From b2d811e57bae26ce43e9116cbde6ff845ade5f28 Mon Sep 17 00:00:00 2001 From: FuChao Date: Sun, 22 Aug 2021 21:54:43 +0800 Subject: [PATCH] add Vango V85xxp project --- .gitee/PULL_REQUEST_TEMPLATE.zh-CN.md | 23 +- .../V85X3P_Lib_V1.1/Eclipse_Kill.bat | 11 + .../ADC/ADC_AC_DMA/ECLIPSE/startup_target.S | 478 +++ .../ADC/ADC_AC_DMA/ECLIPSE/template/.cproject | 226 + .../ADC/ADC_AC_DMA/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC/ADC_AC_DMA/EWARM/startup_target.s | 500 +++ .../ADC/ADC_AC_DMA/EWARM/target_flash.icf | 31 + .../ADC/ADC_AC_DMA/EWARM/template.ewd | 2741 ++++++++++++ .../ADC/ADC_AC_DMA/EWARM/template.ewp | 2007 +++++++++ .../ADC/ADC_AC_DMA/EWARM/template.eww | 10 + .../Examples/ADC/ADC_AC_DMA/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_AC_DMA/Inc/main.h | 27 + .../Examples/ADC/ADC_AC_DMA/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_AC_DMA/Inc/v_stdio.h | 19 + .../ADC/ADC_AC_DMA/MDK-ARM/startup_target.s | 451 ++ .../ADC/ADC_AC_DMA/MDK-ARM/template.uvoptx | 677 +++ .../ADC/ADC_AC_DMA/MDK-ARM/template.uvprojx | 658 +++ .../ADC/ADC_AC_DMA/MDK-ARMv4/startup_target.s | 451 ++ .../ADC/ADC_AC_DMA/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC/ADC_AC_DMA/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_AC_DMA/Src/main.c | 189 + .../Examples/ADC/ADC_AC_DMA/Src/target_isr.c | 304 ++ .../Examples/ADC/ADC_AC_DMA/Src/v_stdio.c | 54 + .../ADC/ADC_BAT/ECLIPSE/startup_target.S | 478 +++ .../ADC/ADC_BAT/ECLIPSE/template/.cproject | 226 + .../ADC/ADC_BAT/ECLIPSE/template/.project | 183 + .../ADC_BAT/ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/settings/template.Debug.cspy.bat | 40 + .../EWARM/settings/template.Debug.driver.xcl | 39 + .../EWARM/settings/template.Debug.general.xcl | 13 + .../ADC/ADC_BAT/EWARM/settings/template.crun | 16 + .../ADC/ADC_BAT/EWARM/settings/template.dbgdt | 5 + .../ADC/ADC_BAT/EWARM/settings/template.dni | 24 + .../ADC/ADC_BAT/EWARM/settings/template.wsdt | 156 + .../ADC/ADC_BAT/EWARM/settings/template.wspos | 2 + .../ADC/ADC_BAT/EWARM/startup_target.s | 500 +++ .../ADC/ADC_BAT/EWARM/target_flash.icf | 31 + .../Examples/ADC/ADC_BAT/EWARM/template.ewd | 2741 ++++++++++++ .../Examples/ADC/ADC_BAT/EWARM/template.ewp | 2007 +++++++++ .../Examples/ADC/ADC_BAT/EWARM/template.eww | 10 + .../Examples/ADC/ADC_BAT/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_BAT/Inc/main.h | 27 + .../Examples/ADC/ADC_BAT/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_BAT/Inc/v_stdio.h | 19 + .../ADC/ADC_BAT/MDK-ARM/startup_target.s | 451 ++ .../ADC/ADC_BAT/MDK-ARM/template.uvoptx | 677 +++ .../ADC/ADC_BAT/MDK-ARM/template.uvprojx | 658 +++ .../ADC/ADC_BAT/MDK-ARMv4/startup_target.s | 451 ++ .../ADC/ADC_BAT/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC/ADC_BAT/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_BAT/Src/main.c | 205 + .../Examples/ADC/ADC_BAT/Src/target_isr.c | 304 ++ .../Examples/ADC/ADC_BAT/Src/v_stdio.c | 54 + .../ADC/ADC_BAT_Auto/ECLIPSE/startup_target.S | 478 +++ .../ADC_BAT_Auto/ECLIPSE/template/.cproject | 226 + .../ADC_BAT_Auto/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC/ADC_BAT_Auto/EWARM/startup_target.s | 500 +++ .../ADC/ADC_BAT_Auto/EWARM/target_flash.icf | 31 + .../ADC/ADC_BAT_Auto/EWARM/template.ewd | 2741 ++++++++++++ .../ADC/ADC_BAT_Auto/EWARM/template.ewp | 2007 +++++++++ .../ADC/ADC_BAT_Auto/EWARM/template.eww | 10 + .../Examples/ADC/ADC_BAT_Auto/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_BAT_Auto/Inc/main.h | 27 + .../ADC/ADC_BAT_Auto/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_BAT_Auto/Inc/v_stdio.h | 19 + .../ADC/ADC_BAT_Auto/MDK-ARM/startup_target.s | 451 ++ .../ADC/ADC_BAT_Auto/MDK-ARM/template.uvoptx | 677 +++ .../ADC/ADC_BAT_Auto/MDK-ARM/template.uvprojx | 658 +++ .../ADC_BAT_Auto/MDK-ARMv4/startup_target.s | 451 ++ .../ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC_BAT_Auto/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_BAT_Auto/Src/main.c | 169 + .../ADC/ADC_BAT_Auto/Src/target_isr.c | 304 ++ .../Examples/ADC/ADC_BAT_Auto/Src/v_stdio.c | 54 + .../ADC_BAT_Manual/ECLIPSE/startup_target.S | 478 +++ .../ADC_BAT_Manual/ECLIPSE/template/.cproject | 226 + .../ADC_BAT_Manual/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC/ADC_BAT_Manual/EWARM/startup_target.s | 500 +++ .../ADC/ADC_BAT_Manual/EWARM/target_flash.icf | 31 + .../ADC/ADC_BAT_Manual/EWARM/template.ewd | 2741 ++++++++++++ .../ADC/ADC_BAT_Manual/EWARM/template.ewp | 2007 +++++++++ .../ADC/ADC_BAT_Manual/EWARM/template.eww | 10 + .../ADC/ADC_BAT_Manual/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_BAT_Manual/Inc/main.h | 27 + .../ADC/ADC_BAT_Manual/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_BAT_Manual/Inc/v_stdio.h | 19 + .../ADC_BAT_Manual/MDK-ARM/startup_target.s | 451 ++ .../ADC_BAT_Manual/MDK-ARM/template.uvoptx | 677 +++ .../ADC_BAT_Manual/MDK-ARM/template.uvprojx | 658 +++ .../ADC_BAT_Manual/MDK-ARMv4/startup_target.s | 451 ++ .../ADC_BAT_Manual/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC_BAT_Manual/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_BAT_Manual/Src/main.c | 165 + .../ADC/ADC_BAT_Manual/Src/target_isr.c | 304 ++ .../Examples/ADC/ADC_BAT_Manual/Src/v_stdio.c | 54 + .../ADC/ADC_DC/ECLIPSE/startup_target.S | 478 +++ .../ADC/ADC_DC/ECLIPSE/template/.cproject | 226 + .../ADC/ADC_DC/ECLIPSE/template/.project | 183 + .../ADC_DC/ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC/ADC_DC/EWARM/startup_target.s | 500 +++ .../ADC/ADC_DC/EWARM/target_flash.icf | 31 + .../Examples/ADC/ADC_DC/EWARM/template.ewd | 2741 ++++++++++++ .../Examples/ADC/ADC_DC/EWARM/template.ewp | 2007 +++++++++ .../Examples/ADC/ADC_DC/EWARM/template.eww | 10 + .../Examples/ADC/ADC_DC/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_DC/Inc/main.h | 27 + .../Examples/ADC/ADC_DC/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_DC/Inc/v_stdio.h | 19 + .../ADC/ADC_DC/MDK-ARM/startup_target.s | 451 ++ .../ADC/ADC_DC/MDK-ARM/template.uvoptx | 677 +++ .../ADC/ADC_DC/MDK-ARM/template.uvprojx | 658 +++ .../ADC/ADC_DC/MDK-ARMv4/startup_target.s | 451 ++ .../ADC/ADC_DC/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC/ADC_DC/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_DC/Src/main.c | 173 + .../Examples/ADC/ADC_DC/Src/target_isr.c | 304 ++ .../Examples/ADC/ADC_DC/Src/v_stdio.c | 54 + .../ADC/ADC_THD/ECLIPSE/startup_target.S | 478 +++ .../ADC/ADC_THD/ECLIPSE/template/.cproject | 226 + .../ADC/ADC_THD/ECLIPSE/template/.project | 183 + .../ADC_THD/ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC/ADC_THD/EWARM/startup_target.s | 500 +++ .../ADC/ADC_THD/EWARM/target_flash.icf | 31 + .../Examples/ADC/ADC_THD/EWARM/template.ewd | 2741 ++++++++++++ .../Examples/ADC/ADC_THD/EWARM/template.ewp | 2007 +++++++++ .../Examples/ADC/ADC_THD/EWARM/template.eww | 10 + .../Examples/ADC/ADC_THD/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_THD/Inc/main.h | 27 + .../Examples/ADC/ADC_THD/Inc/target_isr.h | 63 + .../Examples/ADC/ADC_THD/Inc/v_stdio.h | 19 + .../ADC/ADC_THD/MDK-ARM/startup_target.s | 451 ++ .../ADC/ADC_THD/MDK-ARM/template.uvoptx | 682 +++ .../ADC/ADC_THD/MDK-ARM/template.uvprojx | 658 +++ .../ADC/ADC_THD/MDK-ARMv4/startup_target.s | 451 ++ .../ADC/ADC_THD/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC/ADC_THD/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_THD/Src/main.c | 261 ++ .../Examples/ADC/ADC_THD/Src/target_isr.c | 344 ++ .../Examples/ADC/ADC_THD/Src/v_stdio.c | 54 + .../ADC_Temperature/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ADC_Temperature/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC_Temperature/EWARM/startup_target.s | 500 +++ .../ADC_Temperature/EWARM/target_flash.icf | 31 + .../ADC/ADC_Temperature/EWARM/template.ewd | 2741 ++++++++++++ .../ADC/ADC_Temperature/EWARM/template.ewp | 2007 +++++++++ .../ADC/ADC_Temperature/EWARM/template.eww | 10 + .../ADC/ADC_Temperature/Inc/lib_conf.h | 66 + .../Examples/ADC/ADC_Temperature/Inc/main.h | 27 + .../ADC/ADC_Temperature/Inc/target_isr.h | 63 + .../ADC/ADC_Temperature/Inc/v_stdio.h | 19 + .../ADC_Temperature/MDK-ARM/startup_target.s | 451 ++ .../ADC_Temperature/MDK-ARM/template.uvoptx | 669 +++ .../ADC_Temperature/MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../ADC_Temperature/MDK-ARMv4/template.uvopt | 705 ++++ .../ADC_Temperature/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/ADC/ADC_Temperature/Src/main.c | 188 + .../ADC/ADC_Temperature/Src/target_isr.c | 304 ++ .../ADC/ADC_Temperature/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../ADC_Temperature_Auto/EWARM/template.ewd | 2741 ++++++++++++ .../ADC_Temperature_Auto/EWARM/template.ewp | 2007 +++++++++ .../ADC_Temperature_Auto/EWARM/template.eww | 10 + .../ADC/ADC_Temperature_Auto/Inc/lib_conf.h | 66 + .../ADC/ADC_Temperature_Auto/Inc/main.h | 27 + .../ADC/ADC_Temperature_Auto/Inc/target_isr.h | 63 + .../ADC/ADC_Temperature_Auto/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 669 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../ADC/ADC_Temperature_Auto/Src/main.c | 159 + .../ADC/ADC_Temperature_Auto/Src/target_isr.c | 304 ++ .../ADC/ADC_Temperature_Auto/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ADC_Temperature_DC/EWARM/startup_target.s | 500 +++ .../ADC_Temperature_DC/EWARM/target_flash.icf | 31 + .../ADC/ADC_Temperature_DC/EWARM/template.ewd | 2741 ++++++++++++ .../ADC/ADC_Temperature_DC/EWARM/template.ewp | 2007 +++++++++ .../ADC/ADC_Temperature_DC/EWARM/template.eww | 10 + .../ADC/ADC_Temperature_DC/Inc/lib_conf.h | 66 + .../ADC/ADC_Temperature_DC/Inc/main.h | 27 + .../ADC/ADC_Temperature_DC/Inc/target_isr.h | 63 + .../ADC/ADC_Temperature_DC/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 669 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../ADC/ADC_Temperature_DC/Src/main.c | 272 ++ .../ADC/ADC_Temperature_DC/Src/target_isr.c | 304 ++ .../ADC/ADC_Temperature_DC/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../ADC_Temperature_Manual/EWARM/template.ewd | 2741 ++++++++++++ .../ADC_Temperature_Manual/EWARM/template.ewp | 2007 +++++++++ .../ADC_Temperature_Manual/EWARM/template.eww | 10 + .../ADC/ADC_Temperature_Manual/Inc/lib_conf.h | 66 + .../ADC/ADC_Temperature_Manual/Inc/main.h | 27 + .../ADC_Temperature_Manual/Inc/target_isr.h | 63 + .../ADC/ADC_Temperature_Manual/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 669 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../ADC/ADC_Temperature_Manual/Src/main.c | 155 + .../ADC_Temperature_Manual/Src/target_isr.c | 304 ++ .../ADC/ADC_Temperature_Manual/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 203 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../Bootloader_0x0_IAP/EWARM/startup_target.s | 500 +++ .../Bootloader_0x0_IAP/EWARM/target_flash.icf | 31 + .../Bootloader_0x0_IAP/EWARM/template.ewd | 2741 ++++++++++++ .../Bootloader_0x0_IAP/EWARM/template.ewp | 2019 +++++++++ .../Bootloader_0x0_IAP/EWARM/template.eww | 10 + .../Bootloader_0x0_IAP/Inc/common.h | 66 + .../Bootloader_0x0_IAP/Inc/lib_conf.h | 66 + .../Bootloader/Bootloader_0x0_IAP/Inc/main.h | 32 + .../Bootloader_0x0_IAP/Inc/target_isr.h | 97 + .../Bootloader_0x0_IAP/Inc/v_stdio.h | 19 + .../Bootloader_0x0_IAP/Inc/ymodem.h | 52 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 691 +++ .../MDK-ARM/template.uvprojx | 678 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 769 ++++ .../MDK-ARMv4/template.uvproj | 604 +++ .../Bootloader_0x0_IAP/Src/common.c | 411 ++ .../Bootloader_0x0_IAP/Src/download.c | 62 + .../Bootloader/Bootloader_0x0_IAP/Src/main.c | 161 + .../Bootloader_0x0_IAP/Src/target_isr.c | 540 +++ .../Bootloader_0x0_IAP/Src/upload.c | 46 + .../Bootloader_0x0_IAP/Src/v_stdio.c | 54 + .../Bootloader_0x0_IAP/Src/ymodem.c | 629 +++ .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../Bootloader_0x4000_APP/EWARM/template.ewd | 2741 ++++++++++++ .../Bootloader_0x4000_APP/EWARM/template.ewp | 2007 +++++++++ .../Bootloader_0x4000_APP/EWARM/template.eww | 10 + .../Bootloader_0x4000_APP/Inc/lib_conf.h | 66 + .../Bootloader_0x4000_APP/Inc/main.h | 30 + .../Bootloader_0x4000_APP/Inc/target_isr.h | 63 + .../Bootloader_0x4000_APP/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 647 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Bootloader_0x4000_APP/Src/main.c | 133 + .../Bootloader_0x4000_APP/Src/target_isr.c | 309 ++ .../Bootloader_0x4000_APP/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../CMP_ExtSignalToBGP/EWARM/startup_target.s | 500 +++ .../CMP_ExtSignalToBGP/EWARM/target_flash.icf | 31 + .../CMP/CMP_ExtSignalToBGP/EWARM/template.ewd | 2741 ++++++++++++ .../CMP/CMP_ExtSignalToBGP/EWARM/template.ewp | 2007 +++++++++ .../CMP/CMP_ExtSignalToBGP/EWARM/template.eww | 10 + .../CMP/CMP_ExtSignalToBGP/Inc/lib_conf.h | 66 + .../CMP/CMP_ExtSignalToBGP/Inc/main.h | 27 + .../CMP/CMP_ExtSignalToBGP/Inc/target_isr.h | 63 + .../CMP/CMP_ExtSignalToBGP/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 627 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../CMP/CMP_ExtSignalToBGP/Src/main.c | 124 + .../CMP/CMP_ExtSignalToBGP/Src/target_isr.c | 308 ++ .../CMP/CMP_ExtSignalToBGP/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../CMP_TwoExtSignals/EWARM/startup_target.s | 500 +++ .../CMP_TwoExtSignals/EWARM/target_flash.icf | 31 + .../CMP/CMP_TwoExtSignals/EWARM/template.ewd | 2741 ++++++++++++ .../CMP/CMP_TwoExtSignals/EWARM/template.ewp | 2007 +++++++++ .../CMP/CMP_TwoExtSignals/EWARM/template.eww | 10 + .../CMP/CMP_TwoExtSignals/Inc/lib_conf.h | 66 + .../Examples/CMP/CMP_TwoExtSignals/Inc/main.h | 27 + .../CMP/CMP_TwoExtSignals/Inc/target_isr.h | 63 + .../CMP/CMP_TwoExtSignals/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../CMP_TwoExtSignals/MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Examples/CMP/CMP_TwoExtSignals/Src/main.c | 130 + .../CMP/CMP_TwoExtSignals/Src/target_isr.c | 308 ++ .../CMP/CMP_TwoExtSignals/Src/v_stdio.c | 54 + .../CMP_WakeUp_Sleep/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../CMP_WakeUp_Sleep/EWARM/startup_target.s | 500 +++ .../CMP_WakeUp_Sleep/EWARM/target_flash.icf | 31 + .../CMP/CMP_WakeUp_Sleep/EWARM/template.ewd | 2741 ++++++++++++ .../CMP/CMP_WakeUp_Sleep/EWARM/template.ewp | 2007 +++++++++ .../CMP/CMP_WakeUp_Sleep/EWARM/template.eww | 10 + .../CMP/CMP_WakeUp_Sleep/Inc/lib_conf.h | 66 + .../Examples/CMP/CMP_WakeUp_Sleep/Inc/main.h | 27 + .../CMP/CMP_WakeUp_Sleep/Inc/target_isr.h | 63 + .../CMP/CMP_WakeUp_Sleep/Inc/v_stdio.h | 19 + .../CMP_WakeUp_Sleep/MDK-ARM/startup_target.s | 451 ++ .../CMP_WakeUp_Sleep/MDK-ARM/template.uvoptx | 639 +++ .../CMP_WakeUp_Sleep/MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../CMP_WakeUp_Sleep/MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Examples/CMP/CMP_WakeUp_Sleep/Src/main.c | 140 + .../CMP/CMP_WakeUp_Sleep/Src/target_isr.c | 307 ++ .../CMP/CMP_WakeUp_Sleep/Src/v_stdio.c | 54 + .../CRYPT/CRYPT_Add/ECLIPSE/startup_target.S | 478 +++ .../CRYPT_Add/ECLIPSE/template/.cproject | 226 + .../CRYPT/CRYPT_Add/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../CRYPT/CRYPT_Add/EWARM/startup_target.s | 500 +++ .../CRYPT/CRYPT_Add/EWARM/target_flash.icf | 31 + .../CRYPT/CRYPT_Add/EWARM/template.ewd | 2741 ++++++++++++ .../CRYPT/CRYPT_Add/EWARM/template.ewp | 2007 +++++++++ .../CRYPT/CRYPT_Add/EWARM/template.eww | 10 + .../Examples/CRYPT/CRYPT_Add/Inc/lib_conf.h | 66 + .../Examples/CRYPT/CRYPT_Add/Inc/main.h | 27 + .../Examples/CRYPT/CRYPT_Add/Inc/target_isr.h | 63 + .../Examples/CRYPT/CRYPT_Add/Inc/v_stdio.h | 19 + .../CRYPT/CRYPT_Add/MDK-ARM/startup_target.s | 451 ++ .../CRYPT/CRYPT_Add/MDK-ARM/template.uvoptx | 621 +++ .../CRYPT/CRYPT_Add/MDK-ARM/template.uvprojx | 634 +++ .../CRYPT_Add/MDK-ARMv4/startup_target.s | 451 ++ .../CRYPT/CRYPT_Add/MDK-ARMv4/template.uvopt | 705 ++++ .../CRYPT/CRYPT_Add/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/CRYPT/CRYPT_Add/Src/main.c | 108 + .../Examples/CRYPT/CRYPT_Add/Src/target_isr.c | 303 ++ .../Examples/CRYPT/CRYPT_Add/Src/v_stdio.c | 54 + .../CRYPT_ECC256Signatures/EWARM/IAR_Kill.bat | 8 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../CRYPT_ECC256Signatures/EWARM/template.ewd | 2741 ++++++++++++ .../CRYPT_ECC256Signatures/EWARM/template.ewp | 2019 +++++++++ .../CRYPT_ECC256Signatures/EWARM/template.eww | 10 + .../CRYPT_ECC256Signatures/Inc/lib_conf.h | 66 + .../CRYPT/CRYPT_ECC256Signatures/Inc/main.h | 30 + .../CRYPT_ECC256Signatures/Inc/target_isr.h | 63 + .../CRYPT_ECC256Signatures/Inc/v_stdio.h | 19 + .../CRYPT_ECC256Signatures/Src/asm_arm.inc | 822 ++++ .../Src/curve-specific.inc | 1247 ++++++ .../CRYPT/CRYPT_ECC256Signatures/Src/main.c | 143 + .../Src/platform-specific.inc | 86 + .../CRYPT_ECC256Signatures/Src/target_isr.c | 304 ++ .../CRYPT/CRYPT_ECC256Signatures/Src/types.h | 108 + .../CRYPT/CRYPT_ECC256Signatures/Src/uECC.c | 1882 +++++++++ .../CRYPT/CRYPT_ECC256Signatures/Src/uECC.h | 364 ++ .../CRYPT_ECC256Signatures/Src/uECC_vli.h | 173 + .../CRYPT_ECC256Signatures/Src/v_stdio.c | 38 + .../Cortex/BitBand/ECLIPSE/startup_target.S | 478 +++ .../Cortex/BitBand/ECLIPSE/template/.cproject | 226 + .../Cortex/BitBand/ECLIPSE/template/.project | 183 + .../BitBand/ECLIPSE/template/Target_FLASH.ld | 183 + .../Cortex/BitBand/EWARM/startup_target.s | 500 +++ .../Cortex/BitBand/EWARM/target_flash.icf | 31 + .../Cortex/BitBand/EWARM/template.ewd | 2741 ++++++++++++ .../Cortex/BitBand/EWARM/template.ewp | 2007 +++++++++ .../Cortex/BitBand/EWARM/template.eww | 10 + .../Examples/Cortex/BitBand/Inc/lib_conf.h | 66 + .../Examples/Cortex/BitBand/Inc/main.h | 27 + .../Examples/Cortex/BitBand/Inc/target_isr.h | 63 + .../Examples/Cortex/BitBand/Inc/v_stdio.h | 19 + .../Cortex/BitBand/MDK-ARM/startup_target.s | 451 ++ .../Cortex/BitBand/MDK-ARM/template.uvoptx | 639 +++ .../Cortex/BitBand/MDK-ARM/template.uvprojx | 658 +++ .../Cortex/BitBand/MDK-ARMv4/startup_target.s | 451 ++ .../Cortex/BitBand/MDK-ARMv4/template.uvopt | 705 ++++ .../Cortex/BitBand/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/Cortex/BitBand/Src/main.c | 104 + .../Examples/Cortex/BitBand/Src/target_isr.c | 305 ++ .../Examples/Cortex/BitBand/Src/v_stdio.c | 54 + .../DMA/DMA_AES/ECLIPSE/startup_target.S | 478 +++ .../DMA/DMA_AES/ECLIPSE/template/.cproject | 226 + .../DMA/DMA_AES/ECLIPSE/template/.project | 183 + .../DMA_AES/ECLIPSE/template/Target_FLASH.ld | 183 + .../DMA/DMA_AES/EWARM/startup_target.s | 500 +++ .../DMA/DMA_AES/EWARM/target_flash.icf | 31 + .../Examples/DMA/DMA_AES/EWARM/template.ewd | 2741 ++++++++++++ .../Examples/DMA/DMA_AES/EWARM/template.ewp | 2007 +++++++++ .../Examples/DMA/DMA_AES/EWARM/template.eww | 10 + .../Examples/DMA/DMA_AES/Inc/lib_conf.h | 66 + .../Examples/DMA/DMA_AES/Inc/main.h | 27 + .../Examples/DMA/DMA_AES/Inc/target_isr.h | 63 + .../Examples/DMA/DMA_AES/Inc/v_stdio.h | 19 + .../DMA/DMA_AES/MDK-ARM/startup_target.s | 451 ++ .../DMA/DMA_AES/MDK-ARM/template.uvoptx | 639 +++ .../DMA/DMA_AES/MDK-ARM/template.uvprojx | 658 +++ .../DMA/DMA_AES/MDK-ARMv4/startup_target.s | 451 ++ .../DMA/DMA_AES/MDK-ARMv4/template.uvopt | 705 ++++ .../DMA/DMA_AES/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/DMA/DMA_AES/Src/main.c | 176 + .../Examples/DMA/DMA_AES/Src/target_isr.c | 303 ++ .../Examples/DMA/DMA_AES/Src/v_stdio.c | 54 + .../DMA_FlashToRAM/ECLIPSE/startup_target.S | 478 +++ .../DMA_FlashToRAM/ECLIPSE/template/.cproject | 226 + .../DMA_FlashToRAM/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../DMA/DMA_FlashToRAM/EWARM/startup_target.s | 500 +++ .../DMA/DMA_FlashToRAM/EWARM/target_flash.icf | 31 + .../DMA/DMA_FlashToRAM/EWARM/template.ewd | 2741 ++++++++++++ .../DMA/DMA_FlashToRAM/EWARM/template.ewp | 2007 +++++++++ .../DMA/DMA_FlashToRAM/EWARM/template.eww | 10 + .../DMA/DMA_FlashToRAM/Inc/lib_conf.h | 66 + .../Examples/DMA/DMA_FlashToRAM/Inc/main.h | 30 + .../DMA/DMA_FlashToRAM/Inc/target_isr.h | 63 + .../Examples/DMA/DMA_FlashToRAM/Inc/v_stdio.h | 19 + .../DMA_FlashToRAM/MDK-ARM/startup_target.s | 451 ++ .../DMA_FlashToRAM/MDK-ARM/template.uvoptx | 682 +++ .../DMA_FlashToRAM/MDK-ARM/template.uvprojx | 658 +++ .../DMA_FlashToRAM/MDK-ARMv4/startup_target.s | 451 ++ .../DMA_FlashToRAM/MDK-ARMv4/template.uvopt | 705 ++++ .../DMA_FlashToRAM/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/DMA/DMA_FlashToRAM/Src/main.c | 152 + .../DMA/DMA_FlashToRAM/Src/target_isr.c | 308 ++ .../Examples/DMA/DMA_FlashToRAM/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../DMA_ISO7816_Transmit/EWARM/template.ewd | 2741 ++++++++++++ .../DMA_ISO7816_Transmit/EWARM/template.ewp | 2007 +++++++++ .../DMA_ISO7816_Transmit/EWARM/template.eww | 10 + .../DMA/DMA_ISO7816_Transmit/Inc/lib_conf.h | 66 + .../DMA/DMA_ISO7816_Transmit/Inc/main.h | 29 + .../DMA/DMA_ISO7816_Transmit/Inc/target_isr.h | 63 + .../DMA/DMA_ISO7816_Transmit/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../DMA/DMA_ISO7816_Transmit/Src/main.c | 156 + .../DMA/DMA_ISO7816_Transmit/Src/target_isr.c | 306 ++ .../DMA/DMA_ISO7816_Transmit/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../DMA_MemoryToPeripheral_Timer/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../DMA_MemoryToPeripheral_Timer/Src/main.c | 145 + .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../DMA_SPI_Transmit/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../DMA_SPI_Transmit/EWARM/startup_target.s | 500 +++ .../DMA_SPI_Transmit/EWARM/target_flash.icf | 31 + .../DMA/DMA_SPI_Transmit/EWARM/template.ewd | 2741 ++++++++++++ .../DMA/DMA_SPI_Transmit/EWARM/template.ewp | 2007 +++++++++ .../DMA/DMA_SPI_Transmit/EWARM/template.eww | 10 + .../DMA/DMA_SPI_Transmit/Inc/lib_conf.h | 66 + .../Examples/DMA/DMA_SPI_Transmit/Inc/main.h | 27 + .../DMA/DMA_SPI_Transmit/Inc/target_isr.h | 63 + .../DMA/DMA_SPI_Transmit/Inc/v_stdio.h | 19 + .../DMA_SPI_Transmit/MDK-ARM/startup_target.s | 451 ++ .../DMA_SPI_Transmit/MDK-ARM/template.uvoptx | 639 +++ .../DMA_SPI_Transmit/MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../DMA_SPI_Transmit/MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Examples/DMA/DMA_SPI_Transmit/Src/main.c | 132 + .../DMA/DMA_SPI_Transmit/Src/target_isr.c | 303 ++ .../DMA/DMA_SPI_Transmit/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../DMA_UART_TransmitIT/EWARM/template.ewd | 2741 ++++++++++++ .../DMA_UART_TransmitIT/EWARM/template.ewp | 2007 +++++++++ .../DMA_UART_TransmitIT/EWARM/template.eww | 10 + .../DMA/DMA_UART_TransmitIT/Inc/lib_conf.h | 66 + .../DMA/DMA_UART_TransmitIT/Inc/main.h | 30 + .../DMA/DMA_UART_TransmitIT/Inc/target_isr.h | 63 + .../DMA/DMA_UART_TransmitIT/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../DMA/DMA_UART_TransmitIT/Src/main.c | 153 + .../DMA/DMA_UART_TransmitIT/Src/target_isr.c | 313 ++ .../DMA/DMA_UART_TransmitIT/Src/v_stdio.c | 54 + .../Flash_Program/ECLIPSE/startup_target.S | 478 +++ .../Flash_Program/ECLIPSE/template/.cproject | 226 + .../Flash_Program/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../Flash_Program/EWARM/startup_target.s | 500 +++ .../Flash_Program/EWARM/target_flash.icf | 31 + .../Flash/Flash_Program/EWARM/template.ewd | 2741 ++++++++++++ .../Flash/Flash_Program/EWARM/template.ewp | 2007 +++++++++ .../Flash/Flash_Program/EWARM/template.eww | 10 + .../Flash/Flash_Program/Inc/lib_conf.h | 66 + .../Examples/Flash/Flash_Program/Inc/main.h | 27 + .../Flash/Flash_Program/Inc/target_isr.h | 63 + .../Flash/Flash_Program/Inc/v_stdio.h | 19 + .../Flash_Program/MDK-ARM/startup_target.s | 451 ++ .../Flash_Program/MDK-ARM/template.uvoptx | 694 ++++ .../Flash_Program/MDK-ARM/template.uvprojx | 658 +++ .../Flash_Program/MDK-ARMv4/startup_target.s | 451 ++ .../Flash_Program/MDK-ARMv4/template.uvopt | 705 ++++ .../Flash_Program/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/Flash/Flash_Program/Src/main.c | 158 + .../Flash/Flash_Program/Src/target_isr.c | 309 ++ .../Flash/Flash_Program/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../Flash_Protection_UARTProtocol/Inc/main.h | 29 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 695 ++++ .../MDK-ARM/template.uvprojx | 652 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Flash_Protection_UARTProtocol/Src/main.c | 280 ++ .../Src/target_isr.c | 306 ++ .../Src/v_stdio.c | 54 + .../GPIO/GPIOA_EXIT/ECLIPSE/startup_target.S | 478 +++ .../GPIOA_EXIT/ECLIPSE/template/.cproject | 226 + .../GPIO/GPIOA_EXIT/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../GPIO/GPIOA_EXIT/EWARM/startup_target.s | 500 +++ .../GPIO/GPIOA_EXIT/EWARM/target_flash.icf | 31 + .../GPIO/GPIOA_EXIT/EWARM/template.ewd | 2741 ++++++++++++ .../GPIO/GPIOA_EXIT/EWARM/template.ewp | 2007 +++++++++ .../GPIO/GPIOA_EXIT/EWARM/template.eww | 10 + .../Examples/GPIO/GPIOA_EXIT/Inc/lib_conf.h | 66 + .../Examples/GPIO/GPIOA_EXIT/Inc/main.h | 27 + .../Examples/GPIO/GPIOA_EXIT/Inc/target_isr.h | 63 + .../Examples/GPIO/GPIOA_EXIT/Inc/v_stdio.h | 19 + .../GPIO/GPIOA_EXIT/MDK-ARM/startup_target.s | 451 ++ .../GPIO/GPIOA_EXIT/MDK-ARM/template.uvoptx | 621 +++ .../GPIO/GPIOA_EXIT/MDK-ARM/template.uvprojx | 634 +++ .../GPIOA_EXIT/MDK-ARMv4/startup_target.s | 451 ++ .../GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvopt | 705 ++++ .../GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/GPIO/GPIOA_EXIT/Src/main.c | 88 + .../Examples/GPIO/GPIOA_EXIT/Src/target_isr.c | 308 ++ .../Examples/GPIO/GPIOA_EXIT/Src/v_stdio.c | 54 + .../GPIOA_WakeUp/ECLIPSE/startup_target.S | 478 +++ .../GPIOA_WakeUp/ECLIPSE/template/.cproject | 226 + .../GPIOA_WakeUp/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../GPIO/GPIOA_WakeUp/EWARM/startup_target.s | 500 +++ .../GPIO/GPIOA_WakeUp/EWARM/target_flash.icf | 31 + .../GPIO/GPIOA_WakeUp/EWARM/template.ewd | 2741 ++++++++++++ .../GPIO/GPIOA_WakeUp/EWARM/template.ewp | 2007 +++++++++ .../GPIO/GPIOA_WakeUp/EWARM/template.eww | 10 + .../Examples/GPIO/GPIOA_WakeUp/Inc/lib_conf.h | 66 + .../Examples/GPIO/GPIOA_WakeUp/Inc/main.h | 27 + .../GPIO/GPIOA_WakeUp/Inc/target_isr.h | 63 + .../Examples/GPIO/GPIOA_WakeUp/Inc/v_stdio.h | 19 + .../GPIOA_WakeUp/MDK-ARM/startup_target.s | 451 ++ .../GPIO/GPIOA_WakeUp/MDK-ARM/template.uvoptx | 621 +++ .../GPIOA_WakeUp/MDK-ARM/template.uvprojx | 634 +++ .../GPIOA_WakeUp/MDK-ARMv4/startup_target.s | 451 ++ .../GPIOA_WakeUp/MDK-ARMv4/template.uvopt | 705 ++++ .../GPIOA_WakeUp/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/GPIO/GPIOA_WakeUp/Src/main.c | 135 + .../GPIO/GPIOA_WakeUp/Src/target_isr.c | 309 ++ .../Examples/GPIO/GPIOA_WakeUp/Src/v_stdio.c | 54 + .../GPIO/GPIO_Toggle/ECLIPSE/startup_target.S | 478 +++ .../GPIO_Toggle/ECLIPSE/template/.cproject | 226 + .../GPIO_Toggle/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../GPIO/GPIO_Toggle/EWARM/startup_target.s | 500 +++ .../GPIO/GPIO_Toggle/EWARM/target_flash.icf | 31 + .../GPIO/GPIO_Toggle/EWARM/template.ewd | 2741 ++++++++++++ .../GPIO/GPIO_Toggle/EWARM/template.ewp | 2007 +++++++++ .../GPIO/GPIO_Toggle/EWARM/template.eww | 10 + .../Examples/GPIO/GPIO_Toggle/Inc/lib_conf.h | 66 + .../Examples/GPIO/GPIO_Toggle/Inc/main.h | 27 + .../GPIO/GPIO_Toggle/Inc/target_isr.h | 63 + .../Examples/GPIO/GPIO_Toggle/Inc/v_stdio.h | 19 + .../GPIO/GPIO_Toggle/MDK-ARM/startup_target.s | 451 ++ .../GPIO/GPIO_Toggle/MDK-ARM/template.uvoptx | 639 +++ .../GPIO/GPIO_Toggle/MDK-ARM/template.uvprojx | 658 +++ .../GPIO_Toggle/MDK-ARMv4/startup_target.s | 451 ++ .../GPIO/GPIO_Toggle/MDK-ARMv4/template.uvopt | 705 ++++ .../GPIO_Toggle/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/GPIO/GPIO_Toggle/Src/main.c | 103 + .../GPIO/GPIO_Toggle/Src/target_isr.c | 303 ++ .../Examples/GPIO/GPIO_Toggle/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../I2C_EEPROM_AT24C1024_100KClock/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../I2C_EEPROM_AT24C1024_100KClock/Src/main.c | 148 + .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../I2C_EEPROM_AT24C256_100KClock/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../I2C_EEPROM_AT24C256_100KClock/Src/main.c | 147 + .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../I2C_EEPROM_AT24C256_1MClock/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../I2C_EEPROM_AT24C256_1MClock/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../I2C_EEPROM_AT24C256_1MClock/Src/main.c | 168 + .../Src/target_isr.c | 303 ++ .../I2C_EEPROM_AT24C256_1MClock/Src/v_stdio.c | 54 + .../ISO7816_Transmit/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../ISO7816_Transmit/EWARM/startup_target.s | 500 +++ .../ISO7816_Transmit/EWARM/target_flash.icf | 31 + .../ISO7816_Transmit/EWARM/template.ewd | 2741 ++++++++++++ .../ISO7816_Transmit/EWARM/template.ewp | 2007 +++++++++ .../ISO7816_Transmit/EWARM/template.eww | 10 + .../ISO7816/ISO7816_Transmit/Inc/lib_conf.h | 66 + .../ISO7816/ISO7816_Transmit/Inc/main.h | 29 + .../ISO7816/ISO7816_Transmit/Inc/target_isr.h | 63 + .../ISO7816/ISO7816_Transmit/Inc/v_stdio.h | 19 + .../ISO7816_Transmit/MDK-ARM/startup_target.s | 451 ++ .../ISO7816_Transmit/MDK-ARM/template.uvoptx | 639 +++ .../ISO7816_Transmit/MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../ISO7816_Transmit/MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../ISO7816/ISO7816_Transmit/Src/main.c | 120 + .../ISO7816/ISO7816_Transmit/Src/target_isr.c | 304 ++ .../ISO7816/ISO7816_Transmit/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../LCD_D1135_DisplayNumber/Inc/lib_conf.h | 66 + .../LCD/LCD_D1135_DisplayNumber/Inc/main.h | 27 + .../LCD_D1135_DisplayNumber/Inc/target_isr.h | 63 + .../LCD/LCD_D1135_DisplayNumber/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../LCD/LCD_D1135_DisplayNumber/Src/main.c | 235 ++ .../LCD_D1135_DisplayNumber/Src/target_isr.c | 303 ++ .../LCD/LCD_D1135_DisplayNumber/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../LCD_TS_DH_3541_DisplayNumber/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 656 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../LCD_TS_DH_3541_DisplayNumber/Src/main.c | 345 ++ .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../POWER/AVCCLV_IT/ECLIPSE/startup_target.S | 478 +++ .../POWER/AVCCLV_IT/EWARM/startup_target.s | 500 +++ .../POWER/AVCCLV_IT/EWARM/target_flash.icf | 31 + .../POWER/AVCCLV_IT/EWARM/template.ewd | 2741 ++++++++++++ .../POWER/AVCCLV_IT/EWARM/template.ewp | 2007 +++++++++ .../POWER/AVCCLV_IT/EWARM/template.eww | 10 + .../Examples/POWER/AVCCLV_IT/Inc/lib_conf.h | 66 + .../Examples/POWER/AVCCLV_IT/Inc/main.h | 27 + .../Examples/POWER/AVCCLV_IT/Inc/target_isr.h | 63 + .../Examples/POWER/AVCCLV_IT/Inc/v_stdio.h | 19 + .../POWER/AVCCLV_IT/MDK-ARM/startup_target.s | 451 ++ .../POWER/AVCCLV_IT/MDK-ARM/template.uvoptx | 638 +++ .../POWER/AVCCLV_IT/MDK-ARM/template.uvprojx | 652 +++ .../AVCCLV_IT/MDK-ARMv4/startup_target.s | 451 ++ .../POWER/AVCCLV_IT/MDK-ARMv4/template.uvopt | 705 ++++ .../POWER/AVCCLV_IT/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/POWER/AVCCLV_IT/Src/main.c | 107 + .../Examples/POWER/AVCCLV_IT/Src/target_isr.c | 309 ++ .../Examples/POWER/AVCCLV_IT/Src/v_stdio.c | 54 + .../VDDAlarm_IT/ECLIPSE/startup_target.S | 478 +++ .../VDDAlarm_IT/ECLIPSE/template/.cproject | 226 + .../VDDAlarm_IT/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../POWER/VDDAlarm_IT/EWARM/startup_target.s | 500 +++ .../POWER/VDDAlarm_IT/EWARM/target_flash.icf | 31 + .../POWER/VDDAlarm_IT/EWARM/template.ewd | 2741 ++++++++++++ .../POWER/VDDAlarm_IT/EWARM/template.ewp | 2007 +++++++++ .../POWER/VDDAlarm_IT/EWARM/template.eww | 10 + .../Examples/POWER/VDDAlarm_IT/Inc/lib_conf.h | 66 + .../Examples/POWER/VDDAlarm_IT/Inc/main.h | 27 + .../POWER/VDDAlarm_IT/Inc/target_isr.h | 63 + .../Examples/POWER/VDDAlarm_IT/Inc/v_stdio.h | 19 + .../VDDAlarm_IT/MDK-ARM/startup_target.s | 451 ++ .../POWER/VDDAlarm_IT/MDK-ARM/template.uvoptx | 621 +++ .../VDDAlarm_IT/MDK-ARM/template.uvprojx | 634 +++ .../VDDAlarm_IT/MDK-ARMv4/startup_target.s | 451 ++ .../VDDAlarm_IT/MDK-ARMv4/template.uvopt | 705 ++++ .../VDDAlarm_IT/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/POWER/VDDAlarm_IT/Src/main.c | 106 + .../POWER/VDDAlarm_IT/Src/target_isr.c | 309 ++ .../Examples/POWER/VDDAlarm_IT/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../PWM_16BitsBaseTimer_IT/EWARM/template.ewd | 2741 ++++++++++++ .../PWM_16BitsBaseTimer_IT/EWARM/template.ewp | 2007 +++++++++ .../PWM_16BitsBaseTimer_IT/EWARM/template.eww | 10 + .../PWM/PWM_16BitsBaseTimer_IT/Inc/lib_conf.h | 66 + .../PWM/PWM_16BitsBaseTimer_IT/Inc/main.h | 27 + .../PWM_16BitsBaseTimer_IT/Inc/target_isr.h | 63 + .../PWM/PWM_16BitsBaseTimer_IT/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../PWM/PWM_16BitsBaseTimer_IT/Src/main.c | 110 + .../PWM_16BitsBaseTimer_IT/Src/target_isr.c | 310 ++ .../PWM/PWM_16BitsBaseTimer_IT/Src/v_stdio.c | 54 + .../PWM/PWM_Capture/ECLIPSE/startup_target.S | 478 +++ .../PWM_Capture/ECLIPSE/template/.cproject | 226 + .../PWM/PWM_Capture/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../PWM/PWM_Capture/EWARM/startup_target.s | 500 +++ .../PWM/PWM_Capture/EWARM/target_flash.icf | 31 + .../PWM/PWM_Capture/EWARM/template.ewd | 2741 ++++++++++++ .../PWM/PWM_Capture/EWARM/template.ewp | 2007 +++++++++ .../PWM/PWM_Capture/EWARM/template.eww | 10 + .../Examples/PWM/PWM_Capture/Inc/lib_conf.h | 66 + .../Examples/PWM/PWM_Capture/Inc/main.h | 27 + .../Examples/PWM/PWM_Capture/Inc/target_isr.h | 63 + .../Examples/PWM/PWM_Capture/Inc/v_stdio.h | 19 + .../PWM/PWM_Capture/MDK-ARM/startup_target.s | 451 ++ .../PWM/PWM_Capture/MDK-ARM/template.uvoptx | 621 +++ .../PWM/PWM_Capture/MDK-ARM/template.uvprojx | 634 +++ .../PWM_Capture/MDK-ARMv4/startup_target.s | 451 ++ .../PWM/PWM_Capture/MDK-ARMv4/template.uvopt | 705 ++++ .../PWM/PWM_Capture/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/PWM/PWM_Capture/Src/main.c | 138 + .../Examples/PWM/PWM_Capture/Src/target_isr.c | 319 ++ .../Examples/PWM/PWM_Capture/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../PWM_CompareOutput/EWARM/startup_target.s | 500 +++ .../PWM_CompareOutput/EWARM/target_flash.icf | 31 + .../PWM/PWM_CompareOutput/EWARM/template.ewd | 2741 ++++++++++++ .../PWM/PWM_CompareOutput/EWARM/template.ewp | 2007 +++++++++ .../PWM/PWM_CompareOutput/EWARM/template.eww | 10 + .../PWM/PWM_CompareOutput/Inc/lib_conf.h | 66 + .../Examples/PWM/PWM_CompareOutput/Inc/main.h | 27 + .../PWM/PWM_CompareOutput/Inc/target_isr.h | 63 + .../PWM/PWM_CompareOutput/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../PWM_CompareOutput/MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Examples/PWM/PWM_CompareOutput/Src/main.c | 139 + .../PWM/PWM_CompareOutput/Src/target_isr.c | 303 ++ .../PWM/PWM_CompareOutput/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../PowerConsumption_Idle_RTCCLK/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 639 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../PowerConsumption_Idle_RTCCLK/Src/main.c | 136 + .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../PowerConsumption_Sleep/EWARM/template.ewd | 2741 ++++++++++++ .../PowerConsumption_Sleep/EWARM/template.ewp | 2007 +++++++++ .../PowerConsumption_Sleep/EWARM/template.eww | 10 + .../PowerConsumption_Sleep/Inc/lib_conf.h | 66 + .../PowerConsumption_Sleep/Inc/main.h | 27 + .../PowerConsumption_Sleep/Inc/target_isr.h | 63 + .../PowerConsumption_Sleep/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../PowerConsumption_Sleep/Src/main.c | 111 + .../PowerConsumption_Sleep/Src/target_isr.c | 303 ++ .../PowerConsumption_Sleep/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../RTC_ManualCalibration/EWARM/template.ewd | 2741 ++++++++++++ .../RTC_ManualCalibration/EWARM/template.ewp | 2007 +++++++++ .../RTC_ManualCalibration/EWARM/template.eww | 10 + .../RTC/RTC_ManualCalibration/Inc/lib_conf.h | 67 + .../RTC/RTC_ManualCalibration/Inc/main.h | 27 + .../RTC_ManualCalibration/Inc/target_isr.h | 63 + .../RTC/RTC_ManualCalibration/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 680 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../RTC/RTC_ManualCalibration/Src/main.c | 265 ++ .../RTC_ManualCalibration/Src/target_isr.c | 305 ++ .../RTC/RTC_ManualCalibration/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../RTC_MulSecMin_WakeUpSleep/Inc/lib_conf.h | 66 + .../RTC/RTC_MulSecMin_WakeUpSleep/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../RTC_MulSecMin_WakeUpSleep/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 639 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../RTC/RTC_MulSecMin_WakeUpSleep/Src/main.c | 157 + .../Src/target_isr.c | 304 ++ .../RTC_MulSecMin_WakeUpSleep/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../RTC_PLLDividerOutput_1Hz/Inc/lib_conf.h | 66 + .../RTC/RTC_PLLDividerOutput_1Hz/Inc/main.h | 27 + .../RTC_PLLDividerOutput_1Hz/Inc/target_isr.h | 63 + .../RTC_PLLDividerOutput_1Hz/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 639 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../RTC/RTC_PLLDividerOutput_1Hz/Src/main.c | 90 + .../RTC_PLLDividerOutput_1Hz/Src/target_isr.c | 303 ++ .../RTC_PLLDividerOutput_1Hz/Src/v_stdio.c | 54 + .../RTC_SubSecAlarm/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../RTC_SubSecAlarm/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../RTC_SubSecAlarm/EWARM/startup_target.s | 500 +++ .../RTC_SubSecAlarm/EWARM/target_flash.icf | 31 + .../RTC/RTC_SubSecAlarm/EWARM/template.ewd | 2741 ++++++++++++ .../RTC/RTC_SubSecAlarm/EWARM/template.ewp | 2007 +++++++++ .../RTC/RTC_SubSecAlarm/EWARM/template.eww | 10 + .../RTC/RTC_SubSecAlarm/Inc/lib_conf.h | 66 + .../Examples/RTC/RTC_SubSecAlarm/Inc/main.h | 27 + .../RTC/RTC_SubSecAlarm/Inc/target_isr.h | 63 + .../RTC/RTC_SubSecAlarm/Inc/v_stdio.h | 19 + .../RTC_SubSecAlarm/MDK-ARM/startup_target.s | 451 ++ .../RTC_SubSecAlarm/MDK-ARM/template.uvoptx | 639 +++ .../RTC_SubSecAlarm/MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../RTC_SubSecAlarm/MDK-ARMv4/template.uvopt | 705 ++++ .../RTC_SubSecAlarm/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/RTC/RTC_SubSecAlarm/Src/main.c | 155 + .../RTC/RTC_SubSecAlarm/Src/target_isr.c | 309 ++ .../RTC/RTC_SubSecAlarm/Src/v_stdio.c | 54 + .../SD612_CRC_Test/ECLIPSE/startup_target.S | 478 +++ .../SD612_CRC_Test/ECLIPSE/template/.cproject | 226 + .../SD612_CRC_Test/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../SD612_CRC_Test/EWARM/startup_target.s | 500 +++ .../SD612_CRC_Test/EWARM/target_flash.icf | 31 + .../SD612/SD612_CRC_Test/EWARM/template.ewd | 2741 ++++++++++++ .../SD612/SD612_CRC_Test/EWARM/template.ewp | 2007 +++++++++ .../SD612/SD612_CRC_Test/EWARM/template.eww | 10 + .../SD612/SD612_CRC_Test/Inc/lib_conf.h | 66 + .../Examples/SD612/SD612_CRC_Test/Inc/main.h | 27 + .../SD612/SD612_CRC_Test/Inc/target_isr.h | 63 + .../SD612/SD612_CRC_Test/Inc/v_stdio.h | 19 + .../SD612_CRC_Test/MDK-ARM/startup_target.s | 451 ++ .../SD612_CRC_Test/MDK-ARM/template.uvoptx | 656 +++ .../SD612_CRC_Test/MDK-ARM/template.uvprojx | 658 +++ .../SD612_CRC_Test/MDK-ARMv4/startup_target.s | 451 ++ .../SD612_CRC_Test/MDK-ARMv4/template.uvopt | 705 ++++ .../SD612_CRC_Test/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/SD612/SD612_CRC_Test/Src/main.c | 235 ++ .../SD612/SD612_CRC_Test/Src/target_isr.c | 303 ++ .../SD612/SD612_CRC_Test/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 188 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2010 +++++++++ .../EWARM/template.eww | 10 + .../Inc/FM25Q32.h | 65 + .../Inc/lib_conf.h | 66 + .../Inc/main.h | 29 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 633 +++ .../MDK-ARM/template.uvprojx | 639 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 721 ++++ .../MDK-ARMv4/template.uvproj | 589 +++ .../Src/FM25Q32.c | 723 ++++ .../Src/main.c | 89 + .../Src/target_isr.c | 304 ++ .../Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../SPI_TransmitIT_SSUnused/Inc/lib_conf.h | 66 + .../SPI/SPI_TransmitIT_SSUnused/Inc/main.h | 36 + .../SPI_TransmitIT_SSUnused/Inc/target_isr.h | 63 + .../SPI/SPI_TransmitIT_SSUnused/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../SPI/SPI_TransmitIT_SSUnused/Src/main.c | 143 + .../SPI_TransmitIT_SSUnused/Src/target_isr.c | 315 ++ .../SPI/SPI_TransmitIT_SSUnused/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../Inc/lib_conf.h | 66 + .../Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 639 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../Src/main.c | 165 + .../Src/target_isr.c | 303 ++ .../Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../SysTick_24BitsBaseTimer_IT/Inc/lib_conf.h | 66 + .../SysTick_24BitsBaseTimer_IT/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../SysTick_24BitsBaseTimer_IT/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../SysTick_24BitsBaseTimer_IT/Src/main.c | 101 + .../Src/target_isr.c | 306 ++ .../SysTick_24BitsBaseTimer_IT/Src/v_stdio.c | 54 + .../SysTick_Delay_IT/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../SysTick_Delay_IT/EWARM/startup_target.s | 500 +++ .../SysTick_Delay_IT/EWARM/target_flash.icf | 31 + .../SysTick_Delay_IT/EWARM/template.ewd | 2741 ++++++++++++ .../SysTick_Delay_IT/EWARM/template.ewp | 2007 +++++++++ .../SysTick_Delay_IT/EWARM/template.eww | 10 + .../SysTick/SysTick_Delay_IT/Inc/lib_conf.h | 66 + .../SysTick/SysTick_Delay_IT/Inc/main.h | 27 + .../SysTick/SysTick_Delay_IT/Inc/target_isr.h | 63 + .../SysTick/SysTick_Delay_IT/Inc/v_stdio.h | 19 + .../SysTick_Delay_IT/MDK-ARM/startup_target.s | 451 ++ .../SysTick_Delay_IT/MDK-ARM/template.uvoptx | 621 +++ .../SysTick_Delay_IT/MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../SysTick_Delay_IT/MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../SysTick/SysTick_Delay_IT/Src/main.c | 122 + .../SysTick/SysTick_Delay_IT/Src/target_isr.c | 307 ++ .../SysTick/SysTick_Delay_IT/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../SysTick_Delay_Polling/EWARM/template.ewd | 2741 ++++++++++++ .../SysTick_Delay_Polling/EWARM/template.ewp | 2007 +++++++++ .../SysTick_Delay_Polling/EWARM/template.eww | 10 + .../SysTick_Delay_Polling/Inc/lib_conf.h | 66 + .../SysTick/SysTick_Delay_Polling/Inc/main.h | 27 + .../SysTick_Delay_Polling/Inc/target_isr.h | 63 + .../SysTick_Delay_Polling/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 639 +++ .../MDK-ARM/template.uvprojx | 658 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../SysTick/SysTick_Delay_Polling/Src/main.c | 117 + .../SysTick_Delay_Polling/Src/target_isr.c | 303 ++ .../SysTick_Delay_Polling/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../TMR_32BitsBaseTimer_IT/EWARM/template.ewd | 2741 ++++++++++++ .../TMR_32BitsBaseTimer_IT/EWARM/template.ewp | 2007 +++++++++ .../TMR_32BitsBaseTimer_IT/EWARM/template.eww | 10 + .../TMR_32BitsBaseTimer_IT/Inc/lib_conf.h | 66 + .../TIMER/TMR_32BitsBaseTimer_IT/Inc/main.h | 27 + .../TMR_32BitsBaseTimer_IT/Inc/target_isr.h | 63 + .../TMR_32BitsBaseTimer_IT/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../TIMER/TMR_32BitsBaseTimer_IT/Src/main.c | 107 + .../TMR_32BitsBaseTimer_IT/Src/target_isr.c | 309 ++ .../TMR_32BitsBaseTimer_IT/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../EWARM/template.ewd | 2741 ++++++++++++ .../EWARM/template.ewp | 2007 +++++++++ .../EWARM/template.eww | 10 + .../TMR_ExternalClockSource_IT/Inc/lib_conf.h | 66 + .../TMR_ExternalClockSource_IT/Inc/main.h | 27 + .../Inc/target_isr.h | 63 + .../TMR_ExternalClockSource_IT/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../TMR_ExternalClockSource_IT/Src/main.c | 112 + .../Src/target_isr.c | 310 ++ .../TMR_ExternalClockSource_IT/Src/v_stdio.c | 54 + .../TinyADC/TinyADC/ECLIPSE/startup_target.S | 478 +++ .../TinyADC/ECLIPSE/template/.cproject | 226 + .../TinyADC/TinyADC/ECLIPSE/template/.project | 183 + .../TinyADC/ECLIPSE/template/Target_FLASH.ld | 183 + .../TinyADC/TinyADC/EWARM/startup_target.s | 500 +++ .../TinyADC/TinyADC/EWARM/target_flash.icf | 31 + .../TinyADC/TinyADC/EWARM/template.ewd | 2741 ++++++++++++ .../TinyADC/TinyADC/EWARM/template.ewp | 2007 +++++++++ .../TinyADC/TinyADC/EWARM/template.eww | 10 + .../Examples/TinyADC/TinyADC/Inc/lib_conf.h | 67 + .../Examples/TinyADC/TinyADC/Inc/main.h | 27 + .../Examples/TinyADC/TinyADC/Inc/target_isr.h | 63 + .../Examples/TinyADC/TinyADC/Inc/v_stdio.h | 19 + .../TinyADC/TinyADC/MDK-ARM/startup_target.s | 451 ++ .../TinyADC/TinyADC/MDK-ARM/template.uvoptx | 621 +++ .../TinyADC/TinyADC/MDK-ARM/template.uvprojx | 634 +++ .../TinyADC/MDK-ARMv4/startup_target.s | 451 ++ .../TinyADC/TinyADC/MDK-ARMv4/template.uvopt | 705 ++++ .../TinyADC/TinyADC/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/TinyADC/TinyADC/Src/main.c | 135 + .../Examples/TinyADC/TinyADC/Src/target_isr.c | 309 ++ .../Examples/TinyADC/TinyADC/Src/v_stdio.c | 54 + .../UART_StdPrint/ECLIPSE/startup_target.S | 478 +++ .../UART_StdPrint/ECLIPSE/template/.cproject | 226 + .../UART_StdPrint/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../UART/UART_StdPrint/EWARM/startup_target.s | 500 +++ .../UART/UART_StdPrint/EWARM/target_flash.icf | 31 + .../UART/UART_StdPrint/EWARM/template.ewd | 2741 ++++++++++++ .../UART/UART_StdPrint/EWARM/template.ewp | 2007 +++++++++ .../UART/UART_StdPrint/EWARM/template.eww | 10 + .../UART/UART_StdPrint/Inc/lib_conf.h | 66 + .../Examples/UART/UART_StdPrint/Inc/main.h | 27 + .../UART/UART_StdPrint/Inc/target_isr.h | 63 + .../Examples/UART/UART_StdPrint/Inc/v_stdio.h | 19 + .../UART_StdPrint/MDK-ARM/startup_target.s | 451 ++ .../UART_StdPrint/MDK-ARM/template.uvoptx | 621 +++ .../UART_StdPrint/MDK-ARM/template.uvprojx | 634 +++ .../UART_StdPrint/MDK-ARMv4/startup_target.s | 451 ++ .../UART_StdPrint/MDK-ARMv4/template.uvopt | 705 ++++ .../UART_StdPrint/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/UART/UART_StdPrint/Src/main.c | 91 + .../UART/UART_StdPrint/Src/target_isr.c | 304 ++ .../Examples/UART/UART_StdPrint/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../EWARM/startup_target.s | 500 +++ .../EWARM/target_flash.icf | 31 + .../UART_Tranmit_300bps/EWARM/template.ewd | 2741 ++++++++++++ .../UART_Tranmit_300bps/EWARM/template.ewp | 2007 +++++++++ .../UART_Tranmit_300bps/EWARM/template.eww | 10 + .../UART/UART_Tranmit_300bps/Inc/lib_conf.h | 66 + .../UART/UART_Tranmit_300bps/Inc/main.h | 27 + .../UART/UART_Tranmit_300bps/Inc/target_isr.h | 63 + .../UART/UART_Tranmit_300bps/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../UART/UART_Tranmit_300bps/Src/main.c | 105 + .../UART/UART_Tranmit_300bps/Src/target_isr.c | 304 ++ .../UART/UART_Tranmit_300bps/Src/v_stdio.c | 54 + .../UART_Tranmit_IT/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../UART_Tranmit_IT/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../UART_Tranmit_IT/EWARM/startup_target.s | 500 +++ .../UART_Tranmit_IT/EWARM/target_flash.icf | 31 + .../UART/UART_Tranmit_IT/EWARM/template.ewd | 2741 ++++++++++++ .../UART/UART_Tranmit_IT/EWARM/template.ewp | 2007 +++++++++ .../UART/UART_Tranmit_IT/EWARM/template.eww | 10 + .../UART/UART_Tranmit_IT/Inc/lib_conf.h | 66 + .../Examples/UART/UART_Tranmit_IT/Inc/main.h | 27 + .../UART/UART_Tranmit_IT/Inc/target_isr.h | 63 + .../UART/UART_Tranmit_IT/Inc/v_stdio.h | 19 + .../UART_Tranmit_IT/MDK-ARM/startup_target.s | 451 ++ .../UART_Tranmit_IT/MDK-ARM/template.uvoptx | 638 +++ .../UART_Tranmit_IT/MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../UART_Tranmit_IT/MDK-ARMv4/template.uvopt | 705 ++++ .../UART_Tranmit_IT/MDK-ARMv4/template.uvproj | 584 +++ .../Examples/UART/UART_Tranmit_IT/Src/main.c | 122 + .../UART/UART_Tranmit_IT/Src/target_isr.c | 328 ++ .../UART/UART_Tranmit_IT/Src/v_stdio.c | 54 + .../ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../UART_Transmit_IrDA/EWARM/startup_target.s | 500 +++ .../UART_Transmit_IrDA/EWARM/target_flash.icf | 31 + .../UART_Transmit_IrDA/EWARM/template.ewd | 2741 ++++++++++++ .../UART_Transmit_IrDA/EWARM/template.ewp | 2007 +++++++++ .../UART_Transmit_IrDA/EWARM/template.eww | 10 + .../UART/UART_Transmit_IrDA/Inc/lib_conf.h | 66 + .../UART/UART_Transmit_IrDA/Inc/main.h | 27 + .../UART/UART_Transmit_IrDA/Inc/target_isr.h | 63 + .../UART/UART_Transmit_IrDA/Inc/v_stdio.h | 19 + .../MDK-ARM/startup_target.s | 451 ++ .../MDK-ARM/template.uvoptx | 621 +++ .../MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../UART/UART_Transmit_IrDA/Src/main.c | 95 + .../UART/UART_Transmit_IrDA/Src/target_isr.c | 304 ++ .../UART/UART_Transmit_IrDA/Src/v_stdio.c | 54 + .../U32K_Receive_IT/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../U32K_Receive_IT/ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../U32K_Receive_IT/EWARM/startup_target.s | 500 +++ .../U32K_Receive_IT/EWARM/target_flash.icf | 31 + .../U32K_Receive_IT/EWARM/template.ewd | 2741 ++++++++++++ .../U32K_Receive_IT/EWARM/template.ewp | 2007 +++++++++ .../U32K_Receive_IT/EWARM/template.eww | 10 + .../UART32K/U32K_Receive_IT/Inc/lib_conf.h | 66 + .../UART32K/U32K_Receive_IT/Inc/main.h | 32 + .../UART32K/U32K_Receive_IT/Inc/target_isr.h | 63 + .../UART32K/U32K_Receive_IT/Inc/v_stdio.h | 19 + .../U32K_Receive_IT/MDK-ARM/startup_target.s | 451 ++ .../U32K_Receive_IT/MDK-ARM/template.uvoptx | 621 +++ .../U32K_Receive_IT/MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../U32K_Receive_IT/MDK-ARMv4/template.uvopt | 705 ++++ .../U32K_Receive_IT/MDK-ARMv4/template.uvproj | 584 +++ .../UART32K/U32K_Receive_IT/Src/main.c | 127 + .../UART32K/U32K_Receive_IT/Src/target_isr.c | 322 ++ .../UART32K/U32K_Receive_IT/Src/v_stdio.c | 54 + .../U32K_WakeUpSleep/ECLIPSE/startup_target.S | 478 +++ .../ECLIPSE/template/.cproject | 226 + .../ECLIPSE/template/.project | 183 + .../ECLIPSE/template/Target_FLASH.ld | 183 + .../U32K_WakeUpSleep/EWARM/startup_target.s | 500 +++ .../U32K_WakeUpSleep/EWARM/target_flash.icf | 31 + .../U32K_WakeUpSleep/EWARM/template.ewd | 2741 ++++++++++++ .../U32K_WakeUpSleep/EWARM/template.ewp | 2007 +++++++++ .../U32K_WakeUpSleep/EWARM/template.eww | 10 + .../UART32K/U32K_WakeUpSleep/Inc/lib_conf.h | 66 + .../UART32K/U32K_WakeUpSleep/Inc/main.h | 33 + .../UART32K/U32K_WakeUpSleep/Inc/target_isr.h | 63 + .../UART32K/U32K_WakeUpSleep/Inc/v_stdio.h | 19 + .../U32K_WakeUpSleep/MDK-ARM/startup_target.s | 451 ++ .../U32K_WakeUpSleep/MDK-ARM/template.uvoptx | 621 +++ .../U32K_WakeUpSleep/MDK-ARM/template.uvprojx | 634 +++ .../MDK-ARMv4/startup_target.s | 451 ++ .../U32K_WakeUpSleep/MDK-ARMv4/template.uvopt | 705 ++++ .../MDK-ARMv4/template.uvproj | 584 +++ .../UART32K/U32K_WakeUpSleep/Src/main.c | 151 + .../UART32K/U32K_WakeUpSleep/Src/target_isr.c | 322 ++ .../UART32K/U32K_WakeUpSleep/Src/v_stdio.c | 54 + bsp/Vango-V85xxp/V85X3P_Lib_V1.1/IAR_Kill.bat | 8 + .../CMSIS/CMSIS_Include/cmsis_armcc.h | 865 ++++ .../CMSIS/CMSIS_Include/cmsis_armclang.h | 1869 +++++++++ .../CMSIS/CMSIS_Include/cmsis_compiler.h | 266 ++ .../Libraries/CMSIS/CMSIS_Include/cmsis_gcc.h | 2085 ++++++++++ .../CMSIS/CMSIS_Include/cmsis_iccarm.h | 935 +++++ .../CMSIS/CMSIS_Include/cmsis_version.h | 39 + .../CMSIS/CMSIS_Include/core_armv8mbl.h | 1918 +++++++++ .../CMSIS/CMSIS_Include/core_armv8mml.h | 2927 +++++++++++++ .../Libraries/CMSIS/CMSIS_Include/core_cm0.h | 949 +++++ .../CMSIS/CMSIS_Include/core_cm0plus.h | 1083 +++++ .../Libraries/CMSIS/CMSIS_Include/core_cm1.h | 976 +++++ .../Libraries/CMSIS/CMSIS_Include/core_cm23.h | 1993 +++++++++ .../Libraries/CMSIS/CMSIS_Include/core_cm3.h | 1941 +++++++++ .../Libraries/CMSIS/CMSIS_Include/core_cm33.h | 3002 ++++++++++++++ .../Libraries/CMSIS/CMSIS_Include/core_cm4.h | 2129 ++++++++++ .../Libraries/CMSIS/CMSIS_Include/core_cm7.h | 2671 ++++++++++++ .../CMSIS/CMSIS_Include/core_sc000.h | 1022 +++++ .../CMSIS/CMSIS_Include/core_sc300.h | 1915 +++++++++ .../Libraries/CMSIS/CMSIS_Include/mpu_armv7.h | 270 ++ .../Libraries/CMSIS/CMSIS_Include/mpu_armv8.h | 333 ++ .../CMSIS/CMSIS_Include/tz_context.h | 70 + .../Libraries/CMSIS/device/lib_CodeRAM.c | 33 + .../Libraries/CMSIS/device/lib_LoadNVR.c | 700 ++++ .../Libraries/CMSIS/device/lib_cortex.c | 198 + .../Libraries/CMSIS/device/system_target.c | 81 + .../Libraries/CMSIS/include/lib_CodeRAM.h | 35 + .../Libraries/CMSIS/include/lib_LoadNVR.h | 235 ++ .../Libraries/CMSIS/include/lib_cortex.h | 49 + .../Libraries/CMSIS/include/system_target.h | 41 + .../Libraries/CMSIS/include/target.h | 2799 +++++++++++++ .../Libraries/CMSIS/include/type_def.h | 120 + .../Libraries/Config/ECLIPSE/Target_FLASH.ld | 183 + .../Libraries/Config/ECLIPSE/startup_target.S | 478 +++ .../Config/ECLIPSE/startup_target_noload.S | 477 +++ .../Libraries/Config/EWARM/startup_target.s | 500 +++ .../Config/EWARM/startup_target_noload.s | 499 +++ .../Libraries/Config/EWARM/target_flash.icf | 31 + .../Libraries/Config/MDK-ARM/startup_target.s | 451 ++ .../Config/MDK-ARM/startup_target_noload.s | 451 ++ .../Config/MDK-ARMv4/startup_target.s | 451 ++ .../Config/MDK-ARMv4/startup_target_noload.s | 451 ++ .../Libraries/Lib_Driver/inc/lib_adc.h | 313 ++ .../Libraries/Lib_Driver/inc/lib_adc_tiny.h | 81 + .../Libraries/Lib_Driver/inc/lib_ana.h | 118 + .../Libraries/Lib_Driver/inc/lib_clk.h | 339 ++ .../Libraries/Lib_Driver/inc/lib_cmp.h | 205 + .../Libraries/Lib_Driver/inc/lib_crypt.h | 107 + .../Libraries/Lib_Driver/inc/lib_dma.h | 267 ++ .../Libraries/Lib_Driver/inc/lib_flash.h | 159 + .../Libraries/Lib_Driver/inc/lib_gpio.h | 215 + .../Libraries/Lib_Driver/inc/lib_i2c.h | 164 + .../Libraries/Lib_Driver/inc/lib_iso7816.h | 174 + .../Libraries/Lib_Driver/inc/lib_lcd.h | 139 + .../Libraries/Lib_Driver/inc/lib_misc.h | 85 + .../Libraries/Lib_Driver/inc/lib_pmu.h | 367 ++ .../Libraries/Lib_Driver/inc/lib_pwm.h | 258 ++ .../Libraries/Lib_Driver/inc/lib_rtc.h | 226 + .../Libraries/Lib_Driver/inc/lib_spi.h | 212 + .../Libraries/Lib_Driver/inc/lib_tmr.h | 68 + .../Libraries/Lib_Driver/inc/lib_u32k.h | 160 + .../Libraries/Lib_Driver/inc/lib_uart.h | 172 + .../Libraries/Lib_Driver/inc/lib_version.h | 36 + .../Libraries/Lib_Driver/inc/lib_wdt.h | 47 + .../Libraries/Lib_Driver/src/lib_adc.c | 988 +++++ .../Libraries/Lib_Driver/src/lib_adc_tiny.c | 176 + .../Libraries/Lib_Driver/src/lib_ana.c | 160 + .../Libraries/Lib_Driver/src/lib_clk.c | 674 +++ .../Libraries/Lib_Driver/src/lib_cmp.c | 583 +++ .../Libraries/Lib_Driver/src/lib_crypt.c | 226 + .../Libraries/Lib_Driver/src/lib_dma.c | 473 +++ .../Libraries/Lib_Driver/src/lib_flash.c | 441 ++ .../Libraries/Lib_Driver/src/lib_gpio.c | 437 ++ .../Libraries/Lib_Driver/src/lib_i2c.c | 694 ++++ .../Libraries/Lib_Driver/src/lib_iso7816.c | 405 ++ .../Libraries/Lib_Driver/src/lib_lcd.c | 255 ++ .../Libraries/Lib_Driver/src/lib_misc.c | 255 ++ .../Libraries/Lib_Driver/src/lib_pmu.c | 1214 ++++++ .../Libraries/Lib_Driver/src/lib_pwm.c | 530 +++ .../Libraries/Lib_Driver/src/lib_rtc.c | 793 ++++ .../Libraries/Lib_Driver/src/lib_spi.c | 429 ++ .../Libraries/Lib_Driver/src/lib_tmr.c | 178 + .../Libraries/Lib_Driver/src/lib_u32k.c | 309 ++ .../Libraries/Lib_Driver/src/lib_uart.c | 372 ++ .../Libraries/Lib_Driver/src/lib_version.c | 25 + .../Libraries/Lib_Driver/src/lib_wdt.c | 88 + .../template/ECLIPSE/startup_target.S | 478 +++ .../template/ECLIPSE/template/.cproject | 226 + .../template/ECLIPSE/template/.project | 183 + .../template/ECLIPSE/template/Target_FLASH.ld | 183 + .../template/template/EWARM/rtthread/board.c | 91 + .../EWARM/rtthread/include/libc/libc_dirent.h | 14 + .../EWARM/rtthread/include/libc/libc_errno.h | 206 + .../EWARM/rtthread/include/libc/libc_fcntl.h | 102 + .../EWARM/rtthread/include/libc/libc_fdset.h | 64 + .../EWARM/rtthread/include/libc/libc_ioctl.h | 234 ++ .../EWARM/rtthread/include/libc/libc_signal.h | 188 + .../EWARM/rtthread/include/libc/libc_stat.h | 107 + .../template/EWARM/rtthread/include/rtdbg.h | 179 + .../template/EWARM/rtthread/include/rtdebug.h | 142 + .../template/EWARM/rtthread/include/rtdef.h | 1048 +++++ .../template/EWARM/rtthread/include/rthw.h | 130 + .../template/EWARM/rtthread/include/rtlibc.h | 35 + .../template/EWARM/rtthread/include/rtm.h | 43 + .../EWARM/rtthread/include/rtservice.h | 315 ++ .../EWARM/rtthread/include/rtthread.h | 533 +++ .../rtthread/libcpu/arm/arm926/context_gcc.S | 78 + .../rtthread/libcpu/arm/arm926/context_iar.S | 82 + .../rtthread/libcpu/arm/arm926/context_rvds.S | 91 + .../rtthread/libcpu/arm/arm926/cpuport.c | 230 + .../EWARM/rtthread/libcpu/arm/arm926/mmu.c | 443 ++ .../EWARM/rtthread/libcpu/arm/arm926/mmu.h | 49 + .../EWARM/rtthread/libcpu/arm/arm926/stack.c | 66 + .../rtthread/libcpu/arm/arm926/start_gcc.S | 305 ++ .../rtthread/libcpu/arm/arm926/start_iar.S | 278 ++ .../rtthread/libcpu/arm/arm926/start_rvds.S | 301 ++ .../EWARM/rtthread/libcpu/arm/arm926/trap.c | 207 + .../rtthread/libcpu/arm/armv6/arm_entry_gcc.S | 126 + .../EWARM/rtthread/libcpu/arm/armv6/armv6.h | 93 + .../rtthread/libcpu/arm/armv6/context_gcc.S | 96 + .../EWARM/rtthread/libcpu/arm/armv6/cpuport.c | 234 ++ .../EWARM/rtthread/libcpu/arm/armv6/mmu.c | 548 +++ .../EWARM/rtthread/libcpu/arm/armv6/mmu.h | 194 + .../EWARM/rtthread/libcpu/arm/armv6/stack.c | 68 + .../EWARM/rtthread/libcpu/arm/armv6/vfp.c | 38 + .../EWARM/rtthread/libcpu/arm/armv6/vfp.h | 96 + .../rtthread/libcpu/arm/common/backtrace.c | 63 + .../EWARM/rtthread/libcpu/arm/common/div0.c | 12 + .../EWARM/rtthread/libcpu/arm/common/divsi3.S | 401 ++ .../rtthread/libcpu/arm/common/showmem.c | 38 + .../rtthread/libcpu/arm/cortex-a/SConscript | 23 + .../rtthread/libcpu/arm/cortex-a/armv7.h | 72 + .../rtthread/libcpu/arm/cortex-a/cache.c | 94 + .../libcpu/arm/cortex-a/context_gcc.S | 158 + .../EWARM/rtthread/libcpu/arm/cortex-a/cp15.h | 24 + .../rtthread/libcpu/arm/cortex-a/cp15_gcc.S | 138 + .../EWARM/rtthread/libcpu/arm/cortex-a/cpu.c | 83 + .../EWARM/rtthread/libcpu/arm/cortex-a/gic.c | 301 ++ .../EWARM/rtthread/libcpu/arm/cortex-a/gic.h | 35 + .../rtthread/libcpu/arm/cortex-a/interrupt.c | 123 + .../rtthread/libcpu/arm/cortex-a/interrupt.h | 34 + .../EWARM/rtthread/libcpu/arm/cortex-a/mmu.c | 182 + .../EWARM/rtthread/libcpu/arm/cortex-a/mmu.h | 49 + .../EWARM/rtthread/libcpu/arm/cortex-a/pmu.c | 20 + .../EWARM/rtthread/libcpu/arm/cortex-a/pmu.h | 159 + .../rtthread/libcpu/arm/cortex-a/stack.c | 68 + .../rtthread/libcpu/arm/cortex-a/start_gcc.S | 351 ++ .../EWARM/rtthread/libcpu/arm/cortex-a/trap.c | 179 + .../rtthread/libcpu/arm/cortex-a/vector_gcc.S | 51 + .../libcpu/arm/cortex-m0/context_gcc.S | 210 + .../libcpu/arm/cortex-m0/context_iar.S | 206 + .../libcpu/arm/cortex-m0/context_rvds.S | 215 + .../rtthread/libcpu/arm/cortex-m0/cpuport.c | 135 + .../libcpu/arm/cortex-m3/context_gcc.S | 210 + .../libcpu/arm/cortex-m3/context_iar.S | 202 + .../libcpu/arm/cortex-m3/context_rvds.S | 207 + .../rtthread/libcpu/arm/cortex-m3/cpuport.c | 403 ++ .../libcpu/arm/cortex-m4/context_gcc.S | 245 ++ .../libcpu/arm/cortex-m4/context_iar.S | 253 ++ .../libcpu/arm/cortex-m4/context_rvds.S | 251 ++ .../rtthread/libcpu/arm/cortex-m4/cpuport.c | 487 +++ .../libcpu/arm/cortex-m7/context_gcc.S | 245 ++ .../libcpu/arm/cortex-m7/context_iar.S | 253 ++ .../libcpu/arm/cortex-m7/context_rvds.S | 253 ++ .../rtthread/libcpu/arm/cortex-m7/cpu_cache.c | 89 + .../rtthread/libcpu/arm/cortex-m7/cpuport.c | 487 +++ .../rtthread/libcpu/arm/cortex-r4/armv7.h | 56 + .../libcpu/arm/cortex-r4/context_ccs.asm | 260 ++ .../libcpu/arm/cortex-r4/context_gcc.S | 251 ++ .../EWARM/rtthread/libcpu/arm/cortex-r4/cpu.c | 95 + .../rtthread/libcpu/arm/cortex-r4/interrupt.c | 106 + .../rtthread/libcpu/arm/cortex-r4/stack.c | 83 + .../libcpu/arm/cortex-r4/start_ccs.asm | 552 +++ .../rtthread/libcpu/arm/cortex-r4/start_gcc.S | 486 +++ .../rtthread/libcpu/arm/cortex-r4/trap.c | 148 + .../libcpu/arm/cortex-r4/vector_ccs.asm | 34 + .../libcpu/arm/cortex-r4/vector_gcc.S | 39 + .../libcpu/risc-v/bumblebee/interrupt_gcc.S | 129 + .../libcpu/risc-v/common/context_gcc.S | 212 + .../rtthread/libcpu/risc-v/common/cpuport.c | 129 + .../rtthread/libcpu/risc-v/common/cpuport.h | 27 + .../rtthread/libcpu/risc-v/common/riscv-ops.h | 41 + .../libcpu/risc-v/common/riscv-plic.h | 113 + .../rtthread/libcpu/risc-v/e310/SConscript | 13 + .../rtthread/libcpu/risc-v/e310/context_gcc.S | 227 + .../rtthread/libcpu/risc-v/e310/entry_gcc.S | 145 + .../EWARM/rtthread/libcpu/risc-v/e310/stack.c | 104 + .../rtthread/libcpu/risc-v/k210/cpuport_smp.c | 80 + .../rtthread/libcpu/risc-v/k210/interrupt.c | 397 ++ .../libcpu/risc-v/k210/interrupt_gcc.S | 109 + .../rtthread/libcpu/risc-v/k210/startup_gcc.S | 136 + .../EWARM/rtthread/libcpu/risc-v/k210/tick.c | 48 + .../EWARM/rtthread/libcpu/risc-v/k210/tick.h | 17 + .../rtthread/libcpu/risc-v/rv32m1/interrupt.c | 33 + .../libcpu/risc-v/rv32m1/interrupt_gcc.S | 130 + .../template/EWARM/rtthread/rtconfig.h | 154 + .../template/EWARM/rtthread/src/clock.c | 121 + .../template/EWARM/rtthread/src/components.c | 250 ++ .../template/EWARM/rtthread/src/cpu.c | 14 + .../template/EWARM/rtthread/src/idle.c | 281 ++ .../template/EWARM/rtthread/src/ipc.c | 2328 +++++++++++ .../template/EWARM/rtthread/src/irq.c | 113 + .../template/EWARM/rtthread/src/kservice.c | 1397 +++++++ .../template/EWARM/rtthread/src/mem.c | 698 ++++ .../template/EWARM/rtthread/src/memheap.c | 717 ++++ .../template/EWARM/rtthread/src/mempool.c | 454 ++ .../template/EWARM/rtthread/src/object.c | 518 +++ .../template/EWARM/rtthread/src/scheduler.c | 437 ++ .../template/EWARM/rtthread/src/slab.c | 937 +++++ .../template/EWARM/rtthread/src/thread.c | 802 ++++ .../template/EWARM/rtthread/src/timer.c | 721 ++++ .../template/template/EWARM/startup_target.s | 500 +++ .../template/template/EWARM/target_flash.icf | 31 + .../template/template/EWARM/template.ewd | 2741 ++++++++++++ .../template/template/EWARM/template.ewp | 2069 +++++++++ .../template/template/EWARM/template.eww | 10 + .../template/template/Inc/lib_conf.h | 66 + .../Project_RT/template/template/Inc/main.h | 27 + .../template/template/Inc/target_isr.h | 63 + .../template/template/Inc/v_stdio.h | 19 + .../template/MDK-ARM/Objects/board.crf | Bin 0 -> 29420 bytes .../template/MDK-ARM/Objects/clock.crf | Bin 0 -> 25641 bytes .../template/MDK-ARM/Objects/components.crf | Bin 0 -> 26381 bytes .../template/MDK-ARM/Objects/cpuport.crf | Bin 0 -> 24447 bytes .../template/MDK-ARM/Objects/idle.crf | Bin 0 -> 26717 bytes .../template/template/MDK-ARM/Objects/ipc.crf | Bin 0 -> 30711 bytes .../template/template/MDK-ARM/Objects/irq.crf | Bin 0 -> 25694 bytes .../template/MDK-ARM/Objects/kservice.crf | Bin 0 -> 32878 bytes .../template/MDK-ARM/Objects/lib_adc.crf | Bin 0 -> 213376 bytes .../template/MDK-ARM/Objects/lib_adc_tiny.crf | Bin 0 -> 199266 bytes .../template/MDK-ARM/Objects/lib_ana.crf | Bin 0 -> 199624 bytes .../template/MDK-ARM/Objects/lib_clk.crf | Bin 0 -> 203765 bytes .../template/MDK-ARM/Objects/lib_cmp.crf | Bin 0 -> 204178 bytes .../template/MDK-ARM/Objects/lib_coderam.crf | Bin 0 -> 198103 bytes .../template/MDK-ARM/Objects/lib_cortex.crf | Bin 0 -> 199155 bytes .../template/MDK-ARM/Objects/lib_crypt.crf | Bin 0 -> 200463 bytes .../template/MDK-ARM/Objects/lib_dma.crf | Bin 0 -> 203139 bytes .../template/MDK-ARM/Objects/lib_flash.crf | Bin 0 -> 202046 bytes .../template/MDK-ARM/Objects/lib_gpio.crf | Bin 0 -> 203750 bytes .../template/MDK-ARM/Objects/lib_i2c.crf | Bin 0 -> 203292 bytes .../template/MDK-ARM/Objects/lib_iso7816.crf | Bin 0 -> 202688 bytes .../template/MDK-ARM/Objects/lib_lcd.crf | Bin 0 -> 200827 bytes .../template/MDK-ARM/Objects/lib_loadnvr.crf | Bin 0 -> 204569 bytes .../template/MDK-ARM/Objects/lib_misc.crf | Bin 0 -> 199889 bytes .../template/MDK-ARM/Objects/lib_pmu.crf | Bin 0 -> 209682 bytes .../template/MDK-ARM/Objects/lib_pwm.crf | Bin 0 -> 204464 bytes .../template/MDK-ARM/Objects/lib_rtc.crf | Bin 0 -> 204728 bytes .../template/MDK-ARM/Objects/lib_spi.crf | Bin 0 -> 202903 bytes .../template/MDK-ARM/Objects/lib_tmr.crf | Bin 0 -> 199740 bytes .../template/MDK-ARM/Objects/lib_u32k.crf | Bin 0 -> 201493 bytes .../template/MDK-ARM/Objects/lib_uart.crf | Bin 0 -> 203026 bytes .../template/MDK-ARM/Objects/lib_version.crf | Bin 0 -> 198053 bytes .../template/MDK-ARM/Objects/lib_wdt.crf | Bin 0 -> 198542 bytes .../template/MDK-ARM/Objects/main.crf | Bin 0 -> 226426 bytes .../template/template/MDK-ARM/Objects/mem.crf | Bin 0 -> 29576 bytes .../template/MDK-ARM/Objects/object.crf | Bin 0 -> 28114 bytes .../template/MDK-ARM/Objects/scheduler.crf | Bin 0 -> 26994 bytes .../MDK-ARM/Objects/system_target.crf | Bin 0 -> 198384 bytes .../template/MDK-ARM/Objects/target_isr.crf | Bin 0 -> 203955 bytes .../MDK-ARM/Objects/template.build_log.htm | 81 + .../template/MDK-ARM/Objects/template.lnp | 47 + .../template/MDK-ARM/Objects/template.sct | 17 + .../template/MDK-ARM/Objects/thread.crf | Bin 0 -> 29810 bytes .../template/MDK-ARM/Objects/timer.crf | Bin 0 -> 28736 bytes .../template/MDK-ARM/Objects/v_stdio.crf | Bin 0 -> 202753 bytes .../template/MDK-ARM/RTE/RTOS/board.c | 91 + .../template/MDK-ARM/RTE/RTOS/rtconfig.h | 154 + .../MDK-ARM/RTE/_template/RTE_Components.h | 21 + .../template/MDK-ARM/startup_target.s | 451 ++ .../template/MDK-ARM/template.uvguix.zhuxw | 3691 +++++++++++++++++ .../template/template/MDK-ARM/template.uvoptx | 629 +++ .../template/MDK-ARM/template.uvprojx | 659 +++ .../template/MDK-ARMv4/startup_target.s | 451 ++ .../template/MDK-ARMv4/template.uvopt | 705 ++++ .../template/MDK-ARMv4/template.uvproj | 584 +++ .../Project_RT/template/template/Src/main.c | 185 + .../template/template/Src/target_isr.c | 305 ++ .../template/template/Src/v_stdio.c | 54 + bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Tmp_Kill.bat | 3 + .../V85X3P_Lib_V1.1/keil_Kill.bat | 37 + 1657 files changed, 749020 insertions(+), 13 deletions(-) create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Eclipse_Kill.bat create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.cspy.bat create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.driver.xcl create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.general.xcl create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.crun create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dbgdt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dni create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wsdt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wspos create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/common.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/ymodem.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/common.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/download.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/upload.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/ymodem.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/IAR_Kill.bat create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/asm_arm.inc create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/curve-specific.inc create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/platform-specific.inc create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/types.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC_vli.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/FM25Q32.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/FM25Q32.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/IAR_Kill.bat create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armcc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armclang.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_compiler.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_gcc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_iccarm.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_version.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mbl.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mml.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0plus.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm1.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm23.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm3.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm33.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm4.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm7.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc000.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc300.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv7.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv8.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/tz_context.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_CodeRAM.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_LoadNVR.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_cortex.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/system_target.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_CodeRAM.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_LoadNVR.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_cortex.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/system_target.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/target.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/type_def.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target_noload.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target_noload.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target_noload.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target_noload.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc_tiny.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_ana.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_clk.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_cmp.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_crypt.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_dma.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_flash.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_gpio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_i2c.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_iso7816.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_lcd.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_misc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pmu.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pwm.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_rtc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_spi.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_tmr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_u32k.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_uart.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_version.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_wdt.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc_tiny.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_ana.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_clk.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_cmp.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_crypt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_dma.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_flash.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_gpio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_i2c.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_iso7816.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_lcd.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_misc.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pmu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pwm.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_rtc.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_spi.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_tmr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_u32k.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_uart.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_version.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_wdt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/startup_target.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.cproject create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.project create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/Target_FLASH.ld create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/board.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_dirent.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_errno.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fcntl.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fdset.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_ioctl.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_signal.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_stat.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdbg.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdebug.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdef.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rthw.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtlibc.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtm.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtservice.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtthread.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/stack.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/trap.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/arm_entry_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/armv6.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/stack.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/backtrace.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/div0.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/divsi3.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/showmem.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/SConscript create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/armv7.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cache.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cpu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/stack.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/start_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/trap.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/vector_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_iar.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_rvds.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpu_cache.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/armv7.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_ccs.asm create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/cpu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/interrupt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/stack.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_ccs.asm create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/trap.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_ccs.asm create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/bumblebee/interrupt_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-ops.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-plic.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/SConscript create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/context_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/entry_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/stack.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/cpuport_smp.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/startup_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt_gcc.S create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/rtconfig.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/clock.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/components.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/cpu.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/idle.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/ipc.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/irq.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/kservice.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mem.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/memheap.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mempool.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/object.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/scheduler.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/slab.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/thread.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/timer.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/target_flash.icf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewd create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.eww create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/lib_conf.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/main.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/target_isr.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/v_stdio.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/board.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/clock.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/components.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/cpuport.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/idle.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/ipc.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/irq.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/kservice.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc_tiny.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_ana.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_clk.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cmp.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_coderam.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cortex.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_crypt.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_dma.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_flash.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_gpio.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_i2c.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_iso7816.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_lcd.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_loadnvr.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_misc.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pmu.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pwm.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_rtc.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_spi.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_tmr.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_u32k.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_uart.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_version.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_wdt.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/main.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/mem.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/object.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/scheduler.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/system_target.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/target_isr.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.build_log.htm create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.lnp create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.sct create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/thread.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/timer.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/v_stdio.crf create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/board.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/rtconfig.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/_template/RTE_Components.h create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvguix.zhuxw create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvoptx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvprojx create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/startup_target.s create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvopt create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvproj create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/main.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/target_isr.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/v_stdio.c create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Tmp_Kill.bat create mode 100644 bsp/Vango-V85xxp/V85X3P_Lib_V1.1/keil_Kill.bat diff --git a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md index b64136d96d..4df34e2e1b 100644 --- a/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md +++ b/.gitee/PULL_REQUEST_TEMPLATE.zh-CN.md @@ -1,11 +1,8 @@ ## 拉å–/åˆå¹¶è¯·æ±‚æè¿°ï¼š [ -这段方括å·é‡Œçš„内容是您**å¿…é¡»å¡«å†™å¹¶æ›¿æ¢æŽ‰**的,å¦åˆ™PRä¸å¯èƒ½è¢«åˆå¹¶ã€‚**方括å·å¤–é¢çš„内容ä¸éœ€è¦ä¿®æ”¹ï¼Œä½†è¯·ä»”细阅读。** - -请在这里填写您的PRæè¿°ï¼Œå¯ä»¥åŒ…括以下之一的内容:为什么æäº¤è¿™ä»½PR;解决的问题是什么,你的解决方案是什么; - -并确认并列出已ç»åœ¨ä»€ä¹ˆæƒ…况或æ¿å¡ä¸Šè¿›è¡Œäº†æµ‹è¯•。 +添加Vango V85xxp 对应RT-thread,实机测试OK,使用keil编译。 +åŽç»­æ·»åŠ gcc版本rt-thread é€‚é… ] 以下的内容ä¸åº”该在æäº¤PRæ—¶çš„message修改,修改下述message,PR会被直接关闭。请在æäº¤PRåŽï¼Œæµè§ˆå™¨æŸ¥çœ‹PR并对以下检查项é€é¡¹check,没问题åŽé€æ¡åœ¨é¡µé¢ä¸Šæ‰“钩。 @@ -14,17 +11,17 @@ 必须选择一项: -- [ ] 本拉å–/åˆå¹¶è¯·æ±‚是一个è‰ç¨¿ç‰ˆæœ¬ +- [x] 本拉å–/åˆå¹¶è¯·æ±‚是一个è‰ç¨¿ç‰ˆæœ¬ - [ ] 本拉å–/åˆå¹¶è¯·æ±‚是一个æˆç†Ÿç‰ˆæœ¬ ### 代ç è´¨é‡ï¼š 我在这个拉å–/åˆå¹¶è¯·æ±‚中已ç»è€ƒè™‘了: -- [ ] å·²ç»ä»”ç»†æŸ¥çœ‹è¿‡ä»£ç æ”¹åŠ¨çš„å¯¹æ¯” -- [ ] 代ç é£Žæ ¼æ­£ç¡®ï¼ŒåŒ…括缩进空格,命ååŠå…¶ä»–风格 -- [ ] 没有垃圾代ç ï¼Œä»£ç å°½é‡ç²¾ç®€ï¼Œä¸åŒ…å«`#if 0`代ç ï¼Œä¸åŒ…å«å·²ç»è¢«æ³¨é‡Šäº†çš„ä»£ç  -- [ ] æ‰€æœ‰å˜æ›´å‡æœ‰åŽŸå› åŠåˆç†çš„,并且ä¸ä¼šå½±å“åˆ°å…¶ä»–è½¯ä»¶ç»„ä»¶ä»£ç æˆ– -- [ ] 对难懂代ç å‡æä¾›å¯¹åº”的注释 -- [ ] 本拉å–/åˆå¹¶è¯·æ±‚ä»£ç æ˜¯é«˜è´¨é‡çš„ -- [ ] 本拉å–/åˆå¹¶ç¬¦åˆ[RT-Thread代ç è§„范](../documentation/coding_style_cn.md) +- [x] å·²ç»ä»”ç»†æŸ¥çœ‹è¿‡ä»£ç æ”¹åŠ¨çš„å¯¹æ¯” +- [x] 代ç é£Žæ ¼æ­£ç¡®ï¼ŒåŒ…括缩进空格,命ååŠå…¶ä»–风格 +- [x] 没有垃圾代ç ï¼Œä»£ç å°½é‡ç²¾ç®€ï¼Œä¸åŒ…å«`#if 0`代ç ï¼Œä¸åŒ…å«å·²ç»è¢«æ³¨é‡Šäº†çš„ä»£ç  +- [x] æ‰€æœ‰å˜æ›´å‡æœ‰åŽŸå› åŠåˆç†çš„,并且ä¸ä¼šå½±å“åˆ°å…¶ä»–è½¯ä»¶ç»„ä»¶ä»£ç æˆ– +- [x] 对难懂代ç å‡æä¾›å¯¹åº”的注释 +- [x] 本拉å–/åˆå¹¶è¯·æ±‚ä»£ç æ˜¯é«˜è´¨é‡çš„ +- [x] 本拉å–/åˆå¹¶ç¬¦åˆ[RT-Thread代ç è§„范](../documentation/coding_style_cn.md) diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Eclipse_Kill.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Eclipse_Kill.bat new file mode 100644 index 0000000000..2165bccdc6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Eclipse_Kill.bat @@ -0,0 +1,11 @@ +@echo off + +for /r %%d in (.) do rd /s /q "%%d\.settings" 2>nul +for /r %%d in (.) do rd /s /q "%%d\Debug" 2>nul +for /r %%d in (.) do rd /s /q "%%d\JLink" 2>nul +for /r %%d in (.) do rd /s /q "%%d\Objects" 2>nul +for /r %%d in (.) do rd /s /q "%%d\Startup" 2>nul +for /r %%d in (.) do rd /s /q "%%d\StdDrivers" 2>nul +for /r %%d in (.) do rd /s /q "%%d\User" 2>nul + +exit diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..2b8eedbbbd --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 12000000 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + + 1 + 0 + 0X4001425c + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..5cbbcc7403 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 166 + 166 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/main.c new file mode 100644 index 0000000000..77074770aa --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/main.c @@ -0,0 +1,189 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; +volatile int16_t bsrc[256][4]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + DMA_InitType DMA_InitStruct; + GPIO_InitType InitStruct; + TMR_InitType TMR_InitStruct; + uint32_t i, nCount; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9|GPIO_Pin_10|GPIO_Pin_11; + GPIOA_Init(GPIOA, &InitStruct); + + /* Timer0 initialization: + - Clock source: internal clock(APB clock) + - Overflow interval: 1ms */ + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = CLK_GetPCLKFreq()/(128*50) - 1; + TMR_Init(TMR0, &TMR_InitStruct); + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_AC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_2; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_TMR0; + ADC_InitStruct.Channel = ADC_CHANNEL_CH3 \ + | ADC_CHANNEL_CH4 \ + | ADC_CHANNEL_CH5 \ + | ADC_CHANNEL_CH6; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_CH3 \ + | ADC_CHANNEL_CH4 \ + | ADC_CHANNEL_CH5 \ + | ADC_CHANNEL_CH6; + + ADC_Init(&ADC_InitStruct); + + DMA_DeInit(DMA_CHANNEL_0); + DMA_InitStruct.SrcAddr = (uint32_t)&ANA->ADCDATADMA; + DMA_InitStruct.DestAddr = (uint32_t)&bsrc[0]; + DMA_InitStruct.FrameLen = 256 - 1; + DMA_InitStruct.PackLen = 4 - 1; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_InitStruct.ReqSrc = DMA_REQSRC_ADC; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FEND; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FIX; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_HWORD; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_0); + + DMA_Cmd(DMA_CHANNEL_0, ENABLE); + + ADC_Cmd(ENABLE); + + while(1) + { + if(DMA_GetINTStatus(DMA_INTSTS_C0FE)) + { + DMA_ClearINTStatus(DMA_INTSTS_C0FE); + break; + } + } + + DMA_Cmd(DMA_CHANNEL_0, DISABLE); + ADC_Cmd(DISABLE); + + + printf("CH3\tCH4\tCH5\tCH6\t\r\n"); + for (i=0; i<256; i++) + { + printf("%d\t", bsrc[i][0]); + printf("%d\t", bsrc[i][1]); + printf("%d\t", bsrc[i][2]); + printf("%d\r\n", bsrc[i][3]); + } + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_AC_DMA/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.cspy.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.cspy.bat new file mode 100644 index 0000000000..798f69bc13 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.cspy.bat @@ -0,0 +1,40 @@ +@REM This batch file has been generated by the IAR Embedded Workbench +@REM C-SPY Debugger, as an aid to preparing a command line for running +@REM the cspybat command line utility using the appropriate settings. +@REM +@REM Note that this file is generated every time a new debug session +@REM is initialized, so you may want to move or rename the file before +@REM making changes. +@REM +@REM You can launch cspybat by typing the name of this batch file followed +@REM by the name of the debug file (usually an ELF/DWARF or UBROF file). +@REM +@REM Read about available command line parameters in the C-SPY Debugging +@REM Guide. Hints about additional command line parameters that may be +@REM useful in specific cases: +@REM --download_only Downloads a code image without starting a debug +@REM session afterwards. +@REM --silent Omits the sign-on message. +@REM --timeout Limits the maximum allowed execution time. +@REM + + +@echo off + +if not "%1" == "" goto debugFile + +@echo on + +"D:\ProgramFiles\IAR\common\bin\cspybat" -f "F:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Examples\ADC\ADC_BAT\EWARM\settings\template.Debug.general.xcl" --backend -f "F:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Examples\ADC\ADC_BAT\EWARM\settings\template.Debug.driver.xcl" + +@echo off +goto end + +:debugFile + +@echo on + +"D:\ProgramFiles\IAR\common\bin\cspybat" -f "F:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Examples\ADC\ADC_BAT\EWARM\settings\template.Debug.general.xcl" "--debug_file=%1" --backend -f "F:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Examples\ADC\ADC_BAT\EWARM\settings\template.Debug.driver.xcl" + +@echo off +:end \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.driver.xcl b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.driver.xcl new file mode 100644 index 0000000000..f4e544e7e0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.driver.xcl @@ -0,0 +1,39 @@ +"--endian=little" + +"--cpu=Cortex-M0" + +"--fpu=None" + +"-p" + +"D:\ProgramFiles\IAR\arm\CONFIG\debugger\VANGO\V85X3P.ddf" + +"--drv_verify_download" + +"--semihosting=none" + +"--device=V85X3P" + +"--multicore_nr_of_cores=1" + +"--jet_probe=cmsisdap" + +"--jet_standard_reset=2,300,200" + +"--reset_style=\"0,-,0,Disabled__no_reset_\"" + +"--reset_style=\"1,-,0,Software\"" + +"--reset_style=\"2,-,1,Hardware\"" + +"--reset_style=\"3,-,0,Core\"" + +"--reset_style=\"4,-,0,System\"" + +"--drv_interface=SWD" + +"--drv_catch_exceptions=0x7f0" + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.general.xcl b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.general.xcl new file mode 100644 index 0000000000..8a780c3cf4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.Debug.general.xcl @@ -0,0 +1,13 @@ +"D:\ProgramFiles\IAR\arm\bin\armproc.dll" + +"D:\ProgramFiles\IAR\arm\bin\armJET.dll" + +"F:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Examples\ADC\ADC_BAT\EWARM\Debug\Exe\template.out" + +--plugin "D:\ProgramFiles\IAR\arm\bin\armbat.dll" + +--flash_loader "D:\ProgramFiles\IAR\arm\config\flashloader\VANGO\FlashV85X3P.board" + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.crun b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.crun new file mode 100644 index 0000000000..ef39dce8f4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.crun @@ -0,0 +1,16 @@ + + + + 1 + + + * + * + * + 0 + 1 + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dbgdt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dbgdt new file mode 100644 index 0000000000..e068f91d1e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dbgdt @@ -0,0 +1,5 @@ + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dni b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dni new file mode 100644 index 0000000000..a76eab25fe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.dni @@ -0,0 +1,24 @@ +[Stack] +FillEnabled=0 +OverflowWarningsEnabled=1 +WarningThreshold=90 +SpWarningsEnabled=1 +WarnLogOnly=1 +UseTrigger=1 +TriggerName=main +LimitSize=0 +ByteLimit=50 +[Disassemble mode] +mode=0 +[Breakpoints2] +Count=0 +[Aliases] +Count=0 +SuppressDialog=0 +[PlDriver] +MemConfigValue=D:\ProgramFiles\IAR\arm\CONFIG\debugger\VANGO\V85X3P.ddf +[Jet] +DisableInterrupts=0 +MultiCoreRunAll=0 +[ArmDriver] +EnableCache=1 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wsdt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wsdt new file mode 100644 index 0000000000..71ae0a563b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wsdt @@ -0,0 +1,156 @@ + + + + + + template/Debug + + + + + + 20 + 1365 + + + + 124 + 27 + 27 + 27 + + + + 20 + 1023 + 273 + 68 + + + + + + + TabID-11804-16325 + Workspace + Workspace + + + template + template/User + + + + + 0 + + + + + TabID-22552-16329 + Debug Log + Debug-Log + + + + TabID-10235-16355 + Build + Build + + + + 1 + + + + + + TextEditor + $WS_DIR$\..\Src\main.c + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + 0 + + 0 + + + 1000000 + 1000000 + + + 1 + + + + + + + iaridepm.enu1 + + + + + + + + + + -2 + -2 + 457 + 198 + -2 + -2 + 200 + 200 + 140449 + 285714 + 140449 + 655714 + + + + + + + + + + + + + + + + -2 + -2 + 198 + 1426 + -2 + -2 + 1428 + 200 + 1002809 + 285714 + 140449 + 285714 + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wspos b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wspos new file mode 100644 index 0000000000..4c46fbc5b8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/settings/template.wspos @@ -0,0 +1,2 @@ +[MainWindow] +WindowPlacement=_ 2102 182 3542 941 1 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..4cb5a9a386 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + + 1 + 0 + 0x80C00 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..5cbbcc7403 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 166 + 166 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/main.c new file mode 100644 index 0000000000..f18696d438 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/main.c @@ -0,0 +1,205 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nResult; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_BAT1_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is %.3fV.\t", (float)nResult/1000.0); + } + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_BATRTC_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is %.3fV.\r\n", (float)nResult/1000.0); + } + } + + ADC_Cmd(DISABLE); + + /* ADC Init */ + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<32; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_BAT1_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is %.3fV.\t", (float)nResult/1000.0); + } + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_BATRTC_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is %.3fV.\r\n", (float)nResult/1000.0); + } + } + else + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + + WDT_Clear(); + } + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/main.h new file mode 100644 index 0000000000..00abca75cd --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..73dbac0a41 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9cd514f3b4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + + 1 + 0 + 0x80C00 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..fd927bced6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 139 + 139 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/main.c new file mode 100644 index 0000000000..e67d353b7d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/main.c @@ -0,0 +1,169 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nResult; + + test_success = 0; + + Clock_Init(); + + Stdio_Init(); + printf("Start test.\r\n"); + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_InitStruct.Channel = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<32; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_BAT1_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is %.3fV.\t", (float)nResult/1000.0); + } + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_BATRTC_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is %.3fV.\r\n", (float)nResult/1000.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + WDT_Clear(); + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Auto/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/main.h new file mode 100644 index 0000000000..00abca75cd --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..4cb5a9a386 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + + 1 + 0 + 0x80C00 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7734b83d14 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 134 + 134 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/main.c new file mode 100644 index 0000000000..2059c7716e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/main.c @@ -0,0 +1,165 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; +#include "target.h" // Device header + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nResult; + + test_success = 0; + + Clock_Init(); + + Stdio_Init(); + printf("Start test.\r\n"); + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<32; i++) + { + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_BAT1_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is %.3fV.\t", (float)nResult/1000.0); + } + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_BATRTC_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is %.3fV.\r\n", (float)nResult/1000.0); + } + } + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_BAT_Manual/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..aa0520dab8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvoptx @@ -0,0 +1,677 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + + 1 + 0 + 0x80C48 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..358f8e65ff --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 145 + 145 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..fd25a18c3c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/main.c new file mode 100644 index 0000000000..25cb43bc74 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/main.c @@ -0,0 +1,173 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + GPIO_InitType InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nResult; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; + GPIOA_Init(GPIOA, &InitStruct); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_2; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_InitStruct.Channel = ADC_CHANNEL_CH3|ADC_CHANNEL_CH6; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_CH3|ADC_CHANNEL_CH6; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_CH3; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<10; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_CH3); + if(ADC_CalculateValue(ADC_3V_ADCCHx_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH3 is %d, %.3fV\t", ADCData, (float)nResult/1000.0); + } + + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_CH6); + if(ADC_CalculateValue(ADC_3V_ADCCHx_NODIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH6 is %d, %.3fV\r\n", ADCData, (float)nResult/1000.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + WDT_Clear(); + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_DC/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f1d02e8ac6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvoptx @@ -0,0 +1,682 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + 7 + 1 + ADCData + + + + + 1 + 0 + 0x80C00 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..ec7f597d5f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 233 + 233 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/main.c new file mode 100644 index 0000000000..15e86a3e2c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/main.c @@ -0,0 +1,261 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + ADCTHD_InitType ADC_THDStruct; + GPIO_InitType InitStruct; + int16_t ADCData[4]; + int16_t nResult; + uint32_t nCount; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; + GPIOA_Init(GPIOA, &InitStruct); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_BAT1 \ + | ADC_CHANNEL_BATRTC \ + | ADC_CHANNEL_CH3 \ + | ADC_CHANNEL_CH4; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_BAT1 \ + | ADC_CHANNEL_BATRTC \ + | ADC_CHANNEL_CH3 \ + | ADC_CHANNEL_CH4; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + + /* Manual mode */ + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + ADCData[0] = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_BAT1_RESDIV, ADCData[0], &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is 0x%X %.3fV.\r\n", ADCData[0], (float)nResult/1000.0); + } + ADCData[1] = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_BATRTC_RESDIV, ADCData[1], &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is 0x%X %.3fV.\r\n", ADCData[1], (float)nResult/1000.0); + } + ADCData[2] = ADC_GetADCConversionValue(ADC_CHANNEL_CH4); + if(ADC_CalculateValue(ADC_5V_ADCCHx_NODIV, ADCData[2], &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH4 is 0x%X %.3fC.\r\n", ADCData[2], (float)nResult/1000.0); + } + ADCData[3] = ADC_GetADCConversionValue(ADC_CHANNEL_CH3); + if(ADC_CalculateValue(ADC_5V_ADCCHx_NODIV, ADCData[3], &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH3 is 0x%X %.3fV.\r\n", ADCData[3], (float)nResult/1000.0); + } + } + + ADC_Cmd(DISABLE); + + ADC_THDStructInit(&ADC_THDStruct); + ADC_THDStruct.THDChannel = ADC_THDCHANNEL0; + ADC_THDStruct.THDSource = ADC_CHANNEL_BAT1; + ADC_THDStruct.TriggerSel = ADC_THDSEL_RISING; + ADC_THDStruct.LowerTHD = (ADCData[0]>>8)-0x10; + ADC_THDStruct.UpperTHD = (ADCData[0]>>8)+0x10; + if(ADC_THDStruct.UpperTHD&0x80) + { + ADC_THDStruct.UpperTHD = 0x7F; + } + ADC_THDInit(&ADC_THDStruct); + + ADC_THDStruct.THDChannel = ADC_THDCHANNEL1; + ADC_THDStruct.THDSource = ADC_CHANNEL_BATRTC; + ADC_THDStruct.TriggerSel = ADC_THDSEL_RISING; + ADC_THDStruct.LowerTHD = (ADCData[1]>>8)-0x10; + ADC_THDStruct.UpperTHD = (ADCData[1]>>8)+0x10; + if(ADC_THDStruct.UpperTHD&0x80) + { + ADC_THDStruct.UpperTHD = 0x7F; + } + ADC_THDInit(&ADC_THDStruct); + + ADC_THDStruct.THDChannel = ADC_THDCHANNEL2; + ADC_THDStruct.THDSource = ADC_CHANNEL_CH4; + ADC_THDStruct.TriggerSel = ADC_THDSEL_RISING; + ADC_THDStruct.LowerTHD = (ADCData[2]>>8)-0x10; + ADC_THDStruct.UpperTHD = (ADCData[2]>>8)+0x10; + if(ADC_THDStruct.UpperTHD&0x80) + { + ADC_THDStruct.UpperTHD = 0x7F; + } + ADC_THDInit(&ADC_THDStruct); + + ADC_THDStruct.THDChannel = ADC_THDCHANNEL3; + ADC_THDStruct.THDSource = ADC_CHANNEL_CH3; + ADC_THDStruct.TriggerSel = ADC_THDSEL_RISING; + ADC_THDStruct.LowerTHD = (ADCData[3]>>8)-0x10; + ADC_THDStruct.UpperTHD = (ADCData[3]>>8)+0x10; + if(ADC_THDStruct.UpperTHD&0x80) + { + ADC_THDStruct.UpperTHD = 0x7F; + } + ADC_THDInit(&ADC_THDStruct); + + /* Auto mode */ + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_ClearINTStatus(ADC_INTSTS_UPPER_TH3 | ADC_INTSTS_LOWER_TH3 \ + | ADC_INTSTS_UPPER_TH2 | ADC_INTSTS_LOWER_TH2 \ + | ADC_INTSTS_UPPER_TH1 | ADC_INTSTS_LOWER_TH1 \ + | ADC_INTSTS_UPPER_TH0 | ADC_INTSTS_LOWER_TH0); + ADC_INTConfig(ADC_INT_UPPER_TH3 | ADC_INT_LOWER_TH3 \ + | ADC_INT_UPPER_TH2 | ADC_INT_LOWER_TH2 \ + | ADC_INT_UPPER_TH1 | ADC_INT_LOWER_TH1 \ + | ADC_INT_UPPER_TH0 | ADC_INT_LOWER_TH0, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + ADC_LowerTHDCmd(ADC_THDCHANNEL0, ENABLE); + ADC_UpperTHDCmd(ADC_THDCHANNEL0, ENABLE); + ADC_LowerTHDCmd(ADC_THDCHANNEL1, ENABLE); + ADC_UpperTHDCmd(ADC_THDCHANNEL1, ENABLE); + ADC_LowerTHDCmd(ADC_THDCHANNEL2, ENABLE); + ADC_UpperTHDCmd(ADC_THDCHANNEL2, ENABLE); + ADC_LowerTHDCmd(ADC_THDCHANNEL3, ENABLE); + ADC_UpperTHDCmd(ADC_THDCHANNEL3, ENABLE); + ADC_Cmd(ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/target_isr.c new file mode 100644 index 0000000000..e5046cb0fa --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/target_isr.c @@ -0,0 +1,344 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if(ADC_GetINTStatus(ADC_INTSTS_UPPER_TH0)) + { + ADC_ClearINTStatus(ADC_INTSTS_UPPER_TH0); + printf("UPPER trigger, BAT1 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_BAT1)); + } + if(ADC_GetINTStatus(ADC_INTSTS_LOWER_TH0)) + { + ADC_ClearINTStatus(ADC_INTSTS_LOWER_TH0); + printf("LOWER trigger, BAT1 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_BAT1)); + } + if(ADC_GetINTStatus(ADC_INTSTS_UPPER_TH1)) + { + ADC_ClearINTStatus(ADC_INTSTS_UPPER_TH1); + printf("UPPER trigger,BATRTC ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC)); + } + if(ADC_GetINTStatus(ADC_INTSTS_LOWER_TH1)) + { + ADC_ClearINTStatus(ADC_INTSTS_LOWER_TH1); + printf("LOWER trigger, BATRTC ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC)); + } + if(ADC_GetINTStatus(ADC_INTSTS_UPPER_TH2)) + { + ADC_ClearINTStatus(ADC_INTSTS_UPPER_TH2); + printf("UPPER trigger,CH4 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_CH4)); + } + if(ADC_GetINTStatus(ADC_INTSTS_LOWER_TH2)) + { + ADC_ClearINTStatus(ADC_INTSTS_LOWER_TH2); + printf("LOWER trigger, CH4 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_CH4)); + } + if(ADC_GetINTStatus(ADC_INTSTS_UPPER_TH3)) + { + ADC_ClearINTStatus(ADC_INTSTS_UPPER_TH3); + printf("UPPER trigger, CH3 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_CH3)); + } + if(ADC_GetINTStatus(ADC_INTSTS_LOWER_TH3)) + { + ADC_ClearINTStatus(ADC_INTSTS_LOWER_TH3); + printf("LOWER trigger, CH3 ADADATA: %X\r\n",ADC_GetADCConversionValue(ADC_CHANNEL_CH3)); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_THD/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f469669280 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvoptx @@ -0,0 +1,669 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..5998993593 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 151 + 151 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/main.c new file mode 100644 index 0000000000..7b0f7ff347 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/main.c @@ -0,0 +1,188 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nTemper; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + + ADC_Cmd(DISABLE); + + /* ADC Init */ + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<16; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + WDT_Clear(); + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..45174f819a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvoptx @@ -0,0 +1,669 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..4628460529 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 129 + 129 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/main.c new file mode 100644 index 0000000000..395ee15df5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/main.c @@ -0,0 +1,159 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nTemper; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_SITV(1); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<16;) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + WDT_Clear(); + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Auto/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f469669280 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvoptx @@ -0,0 +1,669 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..e339b6c7c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 141 + 141 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 706 + 706 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/main.c new file mode 100644 index 0000000000..58adc49c0c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/main.c @@ -0,0 +1,272 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + GPIO_InitType InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nTemper, nResult; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + InitStruct.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_11; + GPIOA_Init(GPIOA, &InitStruct); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d, %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + + while(1) + { + ADC_Cmd(DISABLE); + /* ADC Init */ + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_ITV(RTC_ITV_62MS); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<16; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d, %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + + WDT_Clear(); + } + + ADC_Cmd(DISABLE); + /* ADC Init */ + ADC_InitStruct.Mode = ADC_MODE_DC; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_ITVSITV; + ADC_InitStruct.Channel = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC|ADC_CHANNEL_CH3|ADC_CHANNEL_CH6; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_NONE; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_BAT1|ADC_CHANNEL_BATRTC; + ADC_Init(&ADC_InitStruct); + + RTC_WAKE_ITV(RTC_ITV_125MS); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<10; ) + { + /*WARIT SITV time reach */ + while(!RTC_GetINTStatus(RTC_INTSTS_ITVSITV)); + RTC_ClearINTStatus(RTC_INTSTS_ITVSITV); + + if(!ADC_WaitForAuto(DELAY_MS(100))) + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BAT1); + if(ADC_CalculateValue(ADC_5V_ADCCHx_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BAT1 is %d, %.3fV\t", ADCData, (float)nResult/1000.0); + } + + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_BATRTC); + if(ADC_CalculateValue(ADC_5V_ADCCHx_RESDIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("BATRTC is %d, %.3fV\t", ADCData, (float)nResult/1000.0); + } + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_CH3); + if(ADC_CalculateValue(ADC_5V_ADCCHx_NODIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH3 is %d, %.3fV\t", ADCData, (float)nResult/1000.0); + } + + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_CH6); + if(ADC_CalculateValue(ADC_5V_ADCCHx_NODIV, ADCData, &nResult)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("CH6 is %d, %.3fV\r\n", ADCData, (float)nResult/1000.0); + } + } + else + { + ADC_SoftReset(&ADC_InitStruct); + } + WDT_Clear(); + } + WDT_Clear(); + + ADC_Cmd(DISABLE); + + test_success = 1; + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_DC/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f469669280 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvoptx @@ -0,0 +1,669 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + file + + + 2 + 1 + line + + + 3 + 1 + rtc_data2,0x10 + + + 4 + 1 + rtc_data1 + + + 5 + 1 + rtc_data3 + + + 6 + 1 + rtc_data4 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..cc285306ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..622d01f6c0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 125 + 125 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/main.c new file mode 100644 index 0000000000..8977db71e6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/main.c @@ -0,0 +1,155 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ADC_InitType ADC_InitStruct; + uint32_t i, nCount; + int16_t ADCData; + int16_t nTemper; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_32; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + ADC_Cmd(ENABLE); + + /* Get ADC Value */ + for(i=0; i<32; ) + { + ADC_StartManual(); + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + i++; + ADCData = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + if(ADC_CalculateValue(ADC_TEMP, ADCData, &nTemper)) + { + printf("NVR checksum error.\r\n"); + } + else + { + printf("Temperature is %d %.2f.\r\n", ADCData, (float)nTemper/256.0); + } + } + } + + ADC_Cmd(DISABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ADC/ADC_Temperature_Manual/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.project new file mode 100644 index 0000000000..f4a6b67a83 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/.project @@ -0,0 +1,203 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/common.c + 1 + PARENT-2-PROJECT_LOC/Src/common.c + + + User/download.c + 1 + PARENT-2-PROJECT_LOC/Src/download.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/upload.c + 1 + PARENT-2-PROJECT_LOC/Src/upload.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + User/ymodem.c + 1 + PARENT-2-PROJECT_LOC/Src/ymodem.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..9bc781b399 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20002000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x200; /* required amount of heap */ +_Min_Stack_Size = 0x400; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000100, LENGTH = 0x2000 - 0x100 +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 0x4000 +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/target_flash.icf new file mode 100644 index 0000000000..3a7d5bb021 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x00003FFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000100; +define symbol __ICFEDIT_region_RAM_end__ = 0x20001FFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x400; +define symbol __ICFEDIT_size_heap__ = 0x200; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewp new file mode 100644 index 0000000000..51c4b38715 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.ewp @@ -0,0 +1,2019 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Src\common.c + + + $PROJ_DIR$\..\Src\download.c + + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\upload.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + $PROJ_DIR$\..\Src\ymodem.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/common.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/common.h new file mode 100644 index 0000000000..543236f0be --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/common.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file common.h + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + ****************************************************************************** + * @attention + ****************************************************************************** + */ + +#ifndef __COMMON_H +#define __COMMON_H + +#include "stdio.h" +#include "string.h" +#include "target.h" +#include "ymodem.h" + +typedef void (*pFunction)(void); + +#define FLASH_SERASE_KEY 0xAA5555AA +#define CMD_STRING_SIZE 128 +#define ApplicationAddress 0x00004000 +#define ISR_HAND_OFFSET 0x00000004 +#define BootIsrAddress 0x00000004 +#define PAGE_SIZE (0x400) /* 1024 byte */ +#define FLASH_SIZE (0x40000UL) + +//The size of file +#define FLASH_IMAGE_SIZE (uint32_t) (FLASH_SIZE - (ApplicationAddress - 0x0000000)) + +#define IS_AF(c) ((c >= 'A') && (c <= 'F')) +#define IS_af(c) ((c >= 'a') && (c <= 'f')) +#define IS_09(c) ((c >= '0') && (c <= '9')) +#define ISVALIDHEX(c) IS_AF(c) || IS_af(c) || IS_09(c) +#define ISVALIDDEC(c) IS_09(c) +#define CONVERTDEC(c) (c - '0') + +#define CONVERTHEX_alpha(c) (IS_AF(c) ? (c - 'A'+10) : (c - 'a'+10)) +#define CONVERTHEX(c) (IS_09(c) ? (c - '0') : CONVERTHEX_alpha(c)) + +#define SerialPutString(x) Serial_PutString((uint8_t*)(x)) + + +void Int2Str(uint8_t* str,int32_t intnum); +uint32_t Str2Int(uint8_t *inputstr,int32_t *intnum); +uint32_t GetIntegerInput(int32_t * num); +uint32_t SerialKeyPressed(uint8_t *key); +uint8_t GetKey(void); +void SerialPutChar(uint8_t c); +void Serial_PutString(uint8_t *s); +void GetInputString(uint8_t * buffP); +uint32_t FLASH_PagesMask(volatile uint32_t Size); +void FLASH_DisableWriteProtectionPages(void); +void Main_Menu(void); +void SerialDownload(void); +void SerialUpload(void); + +void FLASH_SectorEraseUnderUnlock(uint32_t SectorAddr); +void FLASH_ProgramOneWord(uint32_t Addr, uint32_t Word); +void FLASH_Unlock(void); +void FLASH_Lock(void); + +#endif /* __COMMON_H */ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/main.h new file mode 100644 index 0000000000..6d21721fdf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/main.h @@ -0,0 +1,32 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include +#include "common.h" + +void Delay_us(volatile uint32_t n); +void Delay_ms(volatile uint32_t n); + + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/target_isr.h new file mode 100644 index 0000000000..0642b4d733 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/target_isr.h @@ -0,0 +1,97 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +#define RESET_HAND_OFFSET 0x4 +#define NMI_HAND_OFFSET 0x8 +#define HardFault_HAND_OFFSET 0xC +#define SVC_HAND_OFFSET 0x2C +#define PendSV_HAND_OFFSET 0x38 +#define SysTick_HAND_OFFSET 0x3C +#define PMU_HAND_OFFSET 0x40 +#define RTC_HAND_OFFSET 0x44 +#define U32K0_HAND_OFFSET 0x48 +#define U32K1_HAND_OFFSET 0x4C +#define I2C_HAND_OFFSET 0x50 +#define SPI1_HAND_OFFSET 0x54 +#define UART0_HAND_OFFSET 0x58 +#define UART1_HAND_OFFSET 0x5C +#define UART2_HAND_OFFSET 0x60 +#define UART3_HAND_OFFSET 0x64 +#define UART4_HAND_OFFSET 0x68 +#define UART5_HAND_OFFSET 0x6C +#define ESAM0_HAND_OFFSET 0x70 +#define ESAM1_HAND_OFFSET 0x74 +#define TMR0_HAND_OFFSET 0x78 +#define TMR1_HAND_OFFSET 0x7C +#define TMR2_HAND_OFFSET 0x80 +#define TMR3_HAND_OFFSET 0x84 +#define PWM0_HAND_OFFSET 0x88 +#define PWM1_HAND_OFFSET 0x8C +#define PWM2_HAND_OFFSET 0x90 +#define PWM3_HAND_OFFSET 0x94 +#define DMA_HAND_OFFSET 0x98 +#define FLASH_HAND_OFFSET 0x9C +#define ANA_HAND_OFFSET 0xA0 +#define SPI2_HAND_OFFSET 0xAC +#define SPI3_HAND_OFFSET 0xB0 + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/ymodem.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/ymodem.h new file mode 100644 index 0000000000..3627be2ec2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Inc/ymodem.h @@ -0,0 +1,52 @@ +/** + ****************************************************************************** + * @file ymodem.h + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ +#ifndef _YMODEM_H_ +#define _YMODEM_H_ + +#include "stdint.h" + +/* Definitions ---------------------------------------------------------------*/ +#define PACKET_SEQNO_INDEX (1) +#define PACKET_SEQNO_COMP_INDEX (2) + +#define PACKET_HEADER (3) +#define PACKET_TRAILER (2) +#define PACKET_OVERHEAD (PACKET_HEADER + PACKET_TRAILER) +#define PACKET_SIZE (128) +#define PACKET_1K_SIZE (1024) + +#define FILE_NAME_LENGTH (256) +#define FILE_SIZE_LENGTH (16) + +#define SOH (0x01) //Start @ 128 byte +#define STX (0x02) //Start @ 1024 byte +#define EOT (0x04) //End +#define ACK (0x06) //Response +#define NAK (0x15) //No response +#define CA (0x18) //Aborted +#define CRC16 (0x43) //'C' == 0x43, 16-bit CRC + +#define ABORT1 (0x41) //'A' == 0x41, User aborted +#define ABORT2 (0x61) //'a' == 0x61, User aborted + +#define NAK_TIMEOUT (0x100000) +#define MAX_ERRORS (5) + +/*- Exported Function --------------------------------------------------------*/ +int32_t Ymodem_Receive (uint8_t *buf); +uint8_t Ymodem_Transmit (uint8_t *buf, const uint8_t* sendFileName, uint32_t sizeFile); + +#endif /* _YMODEM_H_ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..3c76305db6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..bd2c0e1f6b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvoptx @@ -0,0 +1,691 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"Any" -UAny -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO31 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + ..\Src\ymodem.c + ymodem.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + ..\Src\upload.c + upload.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + ..\Src\download.c + download.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + ..\Src\common.c + common.c + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 9 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 32 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 33 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..0243c66e2a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARM/template.uvprojx @@ -0,0 +1,678 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000100 + 0x1f00 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + ymodem.c + 1 + ..\Src\ymodem.c + + + upload.c + 1 + ..\Src\upload.c + + + download.c + 1 + ..\Src\download.c + + + common.c + 1 + ..\Src\common.c + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..3c76305db6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x00000400 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000200 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..e38e0b4d28 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvopt @@ -0,0 +1,769 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO31 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 4 + 0 + 19 + 45 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\common.c + common.c + 0 + 0 + + + 1 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\download.c + download.c + 0 + 0 + + + 1 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\upload.c + upload.c + 0 + 0 + + + 1 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\ymodem.c + ymodem.c + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 9 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 32 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 33 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 34 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 35 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..63ad12d94b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/MDK-ARMv4/template.uvproj @@ -0,0 +1,604 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x4000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000100 + 0x1f00 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + common.c + 1 + ..\Src\common.c + + + download.c + 1 + ..\Src\download.c + + + upload.c + 1 + ..\Src\upload.c + + + ymodem.c + 1 + ..\Src\ymodem.c + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/common.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/common.c new file mode 100644 index 0000000000..2bc9121144 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/common.c @@ -0,0 +1,411 @@ +/** + ****************************************************************************** + * @file common.c + * @author Application Team + * @version V1.0.0 + * @date 2019-10-28 + ****************************************************************************** + * @attention + ****************************************************************************** + */ +#include "common.h" + +pFunction Jump_To_Application; +uint32_t JumpAddress; + +extern uint32_t FlashDestination; +extern volatile uint32_t g_bAppRun; + +/** + * @brief Integer switch to string. + * @inparam intnum. + * @outparam str + * @retval None. +**/ +void Int2Str(uint8_t* str, int32_t intnum) +{ + uint32_t i, j ; + uint32_t Div = 1000000000; + uint32_t Status = 0; + + for (i = 0; i < 10; i++) + { + j = 0; + str[j++] = (intnum / Div) + 48; + + intnum = intnum % Div; + Div /= 10; + if ((str[j-1] == '0') & (Status == 0)) + { + j = 0; + } + else + { + Status++; + } + } +} + +/** + * @brief String switch to integer. + * @inparam inputstr: + * @outparam intnum£º + * @retval 0: Error. + 1£ºCorrect. +**/ +uint32_t Str2Int(uint8_t *inputstr, int32_t *intnum) +{ + uint32_t i = 0, res = 0; + uint32_t val = 0; + + if (inputstr[0] == '0' && (inputstr[1] == 'x' || inputstr[1] == 'X')) + { + if (inputstr[2] == '\0') + { + return 0; + } + for (i = 2; i < 11; i++) + { + if (inputstr[i] == '\0') + { + *intnum = val; + res = 1; + break; + } + if (ISVALIDHEX(inputstr[i])) + { + val = (val << 4) + CONVERTHEX(inputstr[i]); + } + else + { + res = 0; + break; + } + } + + if (i >= 11) + { + res = 0; + } + } + else + { + for (i = 0; i < 11; i++) + { + if (inputstr[i] == '\0') + { + *intnum = val; + res = 1; + break; + } + else if ((inputstr[i] == 'k' || inputstr[i] == 'K') && (i > 0)) + { + val = val << 10; + *intnum = val; + res = 1; + break; + } + else if ((inputstr[i] == 'm' || inputstr[i] == 'M') && (i > 0)) + { + val = val << 20; + *intnum = val; + res = 1; + break; + } + else if (ISVALIDDEC(inputstr[i])) + { + val = val * 10 + CONVERTDEC(inputstr[i]); + } + else + { + res = 0; + break; + } + } + if (i >= 11) + { + res = 0; + } + } + + return res; +} + +/** + * @brief Get an integer from the HyperTerminal. + * @inparam num + * @outparam intnum: + * @retval 0: Abort by user. + 1£ºCorrect. +**/ +uint32_t GetIntegerInput(int32_t * num) +{ + uint8_t inputstr[16]; + + while (1) + { + GetInputString(inputstr); + if (inputstr[0] == '\0') continue; + if ((inputstr[0] == 'a' || inputstr[0] == 'A') && inputstr[1] == '\0') + { + SerialPutString("User Cancelled \r\n"); + return 0; + } + + if (Str2Int(inputstr, num) == 0) + { + SerialPutString("Error, Input again: \r\n"); + } + else + { + return 1; + } + } +} + + +/** + * @brief Test whether the terminal has buttons pressed. + * @inparam key. + * @outparam None. + * @retval 0: Error. + 1£ºCorrect. +**/ +uint32_t SerialKeyPressed(uint8_t *key) +{ + if (UART5->STATE&UART_STATE_RXFULL) + { + *key = (uint8_t)UART5->DATA; + return 1; + } + else + { + return 0; + } +} + + +/** + * @brief GetKey. + * @inparam None. + * @outparam None. + * @retval The key of user pressed. +**/ +uint8_t GetKey(void) +{ + uint8_t key = 0; + + // Wait for key be pressed + while (1) + { + if (SerialKeyPressed((uint8_t*)&key)) + { + break; + } + } + return key; +} + + +/** + * @brief Send a character by serial port. + * @inparam C: The character you should send. + * @outparam None. + * @retval None. +**/ +void SerialPutChar(uint8_t c) +{ + UART5->DATA = c; + /* wait for transmit done */ + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE |= UART_STATE_TXDONE; +} + +/** + * @brief Send strings by serial port. + * @inparam s: The string need to send. + * @outparam None. + * @retval None. +**/ +void Serial_PutString(uint8_t *s) +{ + while (*s != '\0') + { + SerialPutChar(*s); + s++; + } +} + +/** + * @brief Get a string from serial port. + * @inparam *s. + * @outparam None. + * @retval None. +**/ +void GetInputString(uint8_t * buffP) +{ + uint32_t bytes_read = 0; + uint8_t c = 0; + do + { + c = GetKey(); + if (c == '\r') + break; + if (c == '\b')// Backspace °´¼ü + { + if (bytes_read > 0) + { + SerialPutString("\b \b"); + bytes_read --; + } + continue; + } + if (bytes_read >= CMD_STRING_SIZE ) + { + SerialPutString("Command string size overflow\r\n"); + bytes_read = 0; + continue; + } + if (c >= 0x20 && c <= 0x7E) + { + buffP[bytes_read++] = c; + SerialPutChar(c); + } + } + while (1); + SerialPutString(("\n\r")); + buffP[bytes_read] = '\0'; +} + +/** + * @brief Calculate the number of Falsh page. + * @inparam Size: Length of file. + * @outparam None. + * @retval The number of Falsh page. +**/ +uint32_t FLASH_PagesMask(volatile uint32_t Size) +{ + uint32_t pagenumber = 0x0; + uint32_t size = Size; + + if ((size % PAGE_SIZE) != 0) + { + pagenumber = (size / PAGE_SIZE) + 1; + } + else + { + pagenumber = size / PAGE_SIZE; + } + return pagenumber; +} + + +/** + * @brief Main_Menu. + * @inparam None. + * @outparam None. + * @retval None. +**/ + void Main_Menu(void) +{ + uint8_t key = 0; + + while (1) + { + SerialPutString("================== Main Menu ==========================\r\n\n"); + SerialPutString(" Download Image To the Target Internal Flash ------- 1\r\n\n"); + SerialPutString(" Upload Image From the Target Internal Flash ------- 2\r\n\n"); + SerialPutString(" Execute The New Program --------------------------- 3\r\n\n"); + + if ((FLASH->PASS) == 0) + { + SerialPutString(" Disable the write protection --------------------- 4\r\n\n"); + } + + SerialPutString("========================================================\r\n\n"); + + key = GetKey(); + + if (key == 0x31) + { + /* Download user application in the Flash */ + SerialDownload(); + } + else if (key == 0x32) + { + /* Upload user application from the Flash */ + SerialUpload(); + } + else if (key == 0x33) + { + g_bAppRun = 1; + SerialPutString("Execute user Program\r\n\n"); + JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); + + Jump_To_Application = (pFunction) JumpAddress; + /*Initial stack pointer of user code*/ + __set_MSP(*(__IO uint32_t*) ApplicationAddress); + Jump_To_Application(); + } + + else if ((key == 0x34) && ((FLASH->PASS) == 0)) + { + /*Unlock FLASH*/ + FLASH_Unlock(); + } + else + { + if ((FLASH->PASS) != 0) + { + SerialPutString("Invalid number! ==> The number should be either 1, 2 or 3\r\n\n\n"); + } + else + { + SerialPutString("Invalid number! ==> The number should be either 1, 2, 3 or 4\r\n\n\n"); + } + } + } +} +/** + * @brief Erase FLASH sector. + * @param SectorAddr: sector address. + * @retval None + */ +void FLASH_SectorEraseUnderUnlock(uint32_t SectorAddr) +{ + FLASH->PGADDR = SectorAddr; + FLASH->SERASE = FLASH_SERASE_KEY; + while (FLASH->SERASE != 0); +} + +/** + * @brief FLASH one word progarm . + * @param Addr: program address + Word: word to write + * @retval None + */ +void FLASH_ProgramOneWord(uint32_t Addr, uint32_t Word) +{ + FLASH->PGADDR = Addr; + FLASH->PGDATA = Word; +} + +/** + * @brief Unlock FLASH. + * @param None + * @retval None + */ +void FLASH_Unlock(void) +{ + FLASH->PASS = 0x55AAAA55; +} + +/** + * @brief Lock FLASH. + * @param None + * @retval None + */ +void FLASH_Lock(void) +{ + FLASH->PASS = 0; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/download.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/download.c new file mode 100644 index 0000000000..9d0657755a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/download.c @@ -0,0 +1,62 @@ +/** + ****************************************************************************** + * @file download.c + * @author Application Team + * @version V1.0.0 + * @date 2019-10-28 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +#include "common.h" + +extern uint8_t file_name[FILE_NAME_LENGTH]; +uint8_t tab_1024[1024] = +{ + 0 +}; + +/** + * @brief Receive file via Serial. + * @inparam None. + * @outparam None. + * @retval None. +**/ +void SerialDownload(void) +{ + int32_t Size = 0; + + SerialPutString("Waiting for the file to be sent ... (press 'a' to abort)\n\r"); + Size = Ymodem_Receive(&tab_1024[0]); + if (Size > 0) + { + SerialPutString("\r\n IAP Completed Successfully!\r\n"); +// SerialPutString("Name: "); +// SerialPutString(file_name); +// Int2Str(Number, Size); +// SerialPutString("\n\r Size: "); +// SerialPutString(Number); +// SerialPutString(" Bytes\r\n"); +// SerialPutString("--------------------------------\r\n"); + } + else if (Size == -1) + { + SerialPutString("\n\n\rThe image size is too large!\n\r"); + } + else if (Size == -2) + { + SerialPutString("\n\n\rVerification failed!\n\r"); + } + else if (Size == -3) + { + SerialPutString("\r\n\nAborted by user.\n\r"); + } + else + { + SerialPutString("\n\rFailed to receive the file!\n\r"); + } +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/main.c new file mode 100644 index 0000000000..46a03ec992 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/main.c @@ -0,0 +1,161 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +volatile unsigned char test_success; + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +#define FLASH_PASS_KEY +extern pFunction Jump_To_Application; +extern uint32_t JumpAddress; +volatile uint32_t g_bAppRun; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +void Delay_us(volatile uint32_t n) +{ + while (n--) + { + __NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP(); + __NOP();__NOP();__NOP(); + __NOP();__NOP(); + } +} + +void Delay_ms(volatile uint32_t n) +{ + while (n--) + { + Delay_us(971); + } +} + +/** + * @brief Jump to APP. + * @param None. + * @retval None. +**/ +static void JumpToApp(void) +{ + /*Jedge the stack address£º0x200000000~0x20007FFF*/ + if (((*(__IO uint32_t*)ApplicationAddress) & 0x2FFF80000 ) == 0x20000000) + { + SerialPutString("Execute user Program!\r\n\n"); + + /*Jump to the user code*/ + JumpAddress = *(__IO uint32_t*) (ApplicationAddress + 4); + Jump_To_Application = (pFunction) JumpAddress; + + /*Set stack top value of user code as current stack top value */ + __set_MSP(*(__IO uint32_t*) ApplicationAddress); + + Jump_To_Application(); + } + else + { + SerialPutString("no user Program\r\n\n"); + Main_Menu(); + } +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + uint8_t key; + + test_success = 0; + + Clock_Init(); + + test_success = 1; + + /*unlock Flash*/ + FLASH_Unlock(); + + /*Configure UART5*/ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN|UART_CTRL_RXEN; + + Delay_ms(500); + /*If UART receive '5', excute IAP program*/ + SerialKeyPressed(&key); + if (key == 0x35) + { + g_bAppRun = 0; + Main_Menu(); + } + /*Else, there will excute user code*/ + else + { + g_bAppRun = 1; + /*Jump to user code*/ + JumpToApp(); + } + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/target_isr.c new file mode 100644 index 0000000000..60614301d9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/target_isr.c @@ -0,0 +1,540 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern volatile uint32_t g_bAppRun; +typedef void (*pFun)(void); + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + NMI_HAND_OFFSET)); + (*p)(); + } + else + { + //Bootloader + } +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + pFun p; + + SerialPutString("\nEnter IAP HardFault!\n\r"); + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + HardFault_HAND_OFFSET)); + (*p)(); + } + else + { + while (1) + { + } + } +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + SVC_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PendSV_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + SysTick_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PMU_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + RTC_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + U32K0_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + U32K1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + I2C_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + SPI1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART0_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART2_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART3_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART4_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + UART5_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + ESAM0_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + ESAM1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + TMR0_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + TMR1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + TMR2_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + TMR3_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PWM0_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PWM1_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PWM2_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + PWM3_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + DMA_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + FLASH_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + ANA_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + SPI2_HAND_OFFSET)); + (*p)(); + } +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ + pFun p; + + if (g_bAppRun) + { + p = (pFun)(*(__IO uint32_t*)(ApplicationAddress + SPI3_HAND_OFFSET)); + (*p)(); + } +} + + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/upload.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/upload.c new file mode 100644 index 0000000000..78d6479744 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/upload.c @@ -0,0 +1,46 @@ +/** + ****************************************************************************** + * @file upload.c + * @author Application Team + * @version V1.0.0 + * @date 2019-10-28 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +#include "common.h" + +/** + * @brief Upload file via Serial. + * @param None. + * @retval None. +**/ +void SerialUpload(void) +{ + uint32_t status = 0; + SerialPutString("\n\n\rSelect Receive File ... (press any key to abort)\n\r"); + +//GetKey(); + if ( GetKey()== CRC16) + { + //Ymodem_Transmit's return value is 0, function successed + status = Ymodem_Transmit((uint8_t*)ApplicationAddress, (const uint8_t*)"UploadedFlashImage.bin", FLASH_IMAGE_SIZE); + + if (status != 0) + { + SerialPutString("\n\rError occured while Transmitting File\n\r"); + } + else + { + SerialPutString("\n\rFile Trasmitted Successfully \n\r"); + } + } + else + { + SerialPutString("\r\n\nAborted by user.\n\r"); + } +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/ymodem.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/ymodem.c new file mode 100644 index 0000000000..01423c1fb1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x0_IAP/Src/ymodem.c @@ -0,0 +1,629 @@ +/** + ****************************************************************************** + * @file ymodem.c + * @author Application Team + * @version V1.0.0 + * @date 2019-10-28 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +#include "target.h" +#include "common.h" +#include "ymodem.h" + +uint8_t file_name[FILE_NAME_LENGTH]; + +// User App Flash offset +uint32_t FlashDestination = ApplicationAddress; +uint16_t PageSize = PAGE_SIZE; +uint32_t EraseCounter = 0x0; +uint32_t NbrOfPage = 0; + +uint32_t RamSource; +extern uint8_t tab_1024[1024]; + +/** + * @brief Receive one byte. + * @param c: the pointer to receive data. + timeout: + * @retal 0£ºFunction succesed. + -1£ºTime-out occured. +**/ +static int32_t Receive_Byte (uint8_t *c, uint32_t timeout) +{ + while (timeout-- > 0) + { + if (SerialKeyPressed(c) == 1) + { + return 0; + } + } + return -1; +} + + +/** + * @brief Receive package. + * @param data £ºthe pointer of datas + length£ºthe length of datas + timeout £º + * @retal 0: Function successed + -1: Time-out occured or datas error + 1: Be canced +**/ +static int32_t Receive_Packet (uint8_t *data, int32_t *length, uint32_t timeout) +{ + uint16_t i, packet_size; + uint8_t c; + *length = 0; + if (Receive_Byte(&c, timeout) != 0) + { + return -1; + } + switch (c) + { + case SOH: + packet_size = PACKET_SIZE; + break; + case STX: + packet_size = PACKET_1K_SIZE; + break; + case EOT: + return 0; + case CA: + if ((Receive_Byte(&c, timeout) == 0) && (c == CA)) + { + *length = -1; + return 0; + } + else + { + return -1; + } + case ABORT1: + case ABORT2: + return 1; + default: + return -1; + } + *data = c; + for (i = 1; i < (packet_size + PACKET_OVERHEAD); i ++) + { + if (Receive_Byte(data + i, timeout) != 0) //·¢ËͶ˳¬Ê± + { + return -1; + } + } + if (data[PACKET_SEQNO_INDEX] != ((data[PACKET_SEQNO_COMP_INDEX] ^ 0xff) & 0xff)) //°ü±àÂëºÅÓëÆä·´Âë²»Ò»Ö + { + return -1; + } + *length = packet_size; + return 0; +} + +/** + * @brief Receive file via ymodem + * @param buf: pointer of file + * @retal The size of file +**/ +int32_t Ymodem_Receive (uint8_t *buf) +{ + uint8_t packet_data[PACKET_1K_SIZE + PACKET_OVERHEAD]; + uint8_t file_size[FILE_SIZE_LENGTH]; + uint8_t *file_ptr, *buf_ptr; + int32_t i, j; + int32_t packet_length, session_done, file_done, packets_received, errors, session_begin, size = 0; + + FlashDestination = ApplicationAddress; + + for (session_done = 0, errors = 0, session_begin = 0; ;) + { + for (packets_received = 0, file_done = 0, buf_ptr = buf; ;) + { + switch (Receive_Packet(packet_data, &packet_length, NAK_TIMEOUT)) + { + case 0: + errors = 0; + switch (packet_length) + { + // Be cancled + case - 1: + SerialPutChar(ACK); + return 0; + //Transfer aborted + case 0: + SerialPutChar(ACK); + file_done = 1; + break; + // Package transfer + default: + if ((packet_data[PACKET_SEQNO_INDEX] & 0xff) != (packets_received & 0xff)) + { + SerialPutChar(NAK); + } + else + { + if (packets_received == 0) + { + // Package of file-name + if (packet_data[PACKET_HEADER] != 0) + { + for (i = 0, file_ptr = packet_data + PACKET_HEADER; (*file_ptr != 0) && (i < FILE_NAME_LENGTH);) + { + file_name[i++] = *file_ptr++; + } + file_name[i++] = '\0'; + for (i = 0, file_ptr ++; (*file_ptr != ' ') && (i < FILE_SIZE_LENGTH);) + { + file_size[i++] = *file_ptr++; + } + file_size[i++] = '\0'; + + // The size of package + Str2Int(file_size, &size); + + // Transfer end + if (size > (FLASH_SIZE - 1)) + { + SerialPutChar(CA); + SerialPutChar(CA); + return -1; + } + + NbrOfPage = FLASH_PagesMask(size); + + // Flash erase + for (EraseCounter = 0; EraseCounter < NbrOfPage; EraseCounter++) + { + FLASH_SectorEraseUnderUnlock(FlashDestination + (PageSize * EraseCounter)); + } + SerialPutChar(ACK); + SerialPutChar(CRC16); + } + // Has no file + else + { + SerialPutChar(ACK); + file_done = 1; + session_done = 1; + break; + } + } + // Package + else + { + memcpy(buf_ptr, packet_data + PACKET_HEADER, packet_length); + RamSource = (uint32_t)buf; + for (j = 0; (j < packet_length) && (FlashDestination < ApplicationAddress + size); j += 4) + { + // Flash program + FLASH_ProgramOneWord(FlashDestination, *(uint32_t*)RamSource); + + if (*(uint32_t*)FlashDestination != *(uint32_t*)RamSource) + { + // end + SerialPutChar(CA); + SerialPutChar(CA); + return -2; + } + FlashDestination += 4; + RamSource += 4; + } + SerialPutChar(ACK); + } + packets_received ++; + session_begin = 1; + } + } + break; + case 1: + SerialPutChar(CA); + SerialPutChar(CA); + return -3; + default: + if (session_begin > 0) + { + errors ++; + } + if (errors > MAX_ERRORS) + { + SerialPutChar(CA); + SerialPutChar(CA); + return 0; + } + SerialPutChar(CRC16); + break; + } + if (file_done != 0) + { + break; + } + } + if (session_done != 0) + { + break; + } + } + return (int32_t)size; +} + +/** + * @brief Check response + * @param c + * @retal 0 +**/ +int32_t Ymodem_CheckResponse(uint8_t c) +{ + return 0; +} + +/** + * @brief Initial packet + * @param data + fileName + length + * @retal None +**/ +void Ymodem_PrepareIntialPacket(uint8_t *data, const uint8_t* fileName, uint32_t *length) +{ + uint16_t i, j; + uint8_t file_ptr[10]; + + data[0] = SOH; + data[1] = 0x00; + data[2] = 0xff; + for (i = 0; ((fileName[i] != '\0') && (i < FILE_NAME_LENGTH)); i++) + { + data[i + PACKET_HEADER] = fileName[i]; + } + + data[i + PACKET_HEADER] = 0x00; + + Int2Str (file_ptr, *length); + for (j =0, i = i + PACKET_HEADER + 1; file_ptr[j] != '\0' ; ) + { + data[i++] = file_ptr[j++]; + } + + for (j = i; j < PACKET_SIZE + PACKET_HEADER; j++) + { + data[j] = 0; + } +} + +/** + * @brief Prepare packet + * @param SourceBuf£º + data£º + pktNo £º + sizeBlk £º + * @retal None +**/ +void Ymodem_PreparePacket(uint8_t *SourceBuf, uint8_t *data, uint8_t pktNo, uint32_t sizeBlk) +{ + uint16_t i, size, packetSize; + uint8_t* file_ptr; + + packetSize = sizeBlk >= PACKET_1K_SIZE ? PACKET_1K_SIZE : PACKET_SIZE; + size = sizeBlk < packetSize ? sizeBlk :packetSize;//sizeBlk<=packetsize size = sizeBlk, ize=packetsize + + if (packetSize == PACKET_1K_SIZE) + { + data[0] = STX; + } + else + { + data[0] = SOH; + } + data[1] = pktNo; + data[2] = (~pktNo); + file_ptr = SourceBuf; + + for (i = PACKET_HEADER; i < size + PACKET_HEADER; i++) + { + data[i] = *file_ptr++; + } + if ( size <= packetSize) + { + for (i = size + PACKET_HEADER; i < packetSize + PACKET_HEADER; i++) + { + data[i] = 0x1A; // end + } + } +} + +/** + * @brief Update CRC + * @param crcIn + byte + * @retal CRC value +**/ +uint16_t UpdateCRC16(uint16_t crcIn, uint8_t byte) +{ + uint32_t crc = crcIn; + uint32_t in = byte|0x100; + do + { + crc <<= 1; + in <<= 1; + if (in&0x100) + ++crc; + if (crc&0x10000) + crc ^= 0x1021; + } + while (!(in&0x10000)); + return crc&0xffffu; +} + +/** + * @brief Cal CRC value + * @param data + size + * @retal CRC value +**/ +uint16_t Cal_CRC16(const uint8_t* data, uint32_t size) +{ + uint32_t crc = 0; + const uint8_t* dataEnd = data+size; + while (data> 8); + SerialPutChar(tempCRC & 0xFF); + } + else + { + tempCheckSum = CalChecksum (&packet_data[3], PACKET_SIZE); + SerialPutChar(tempCheckSum); + } + + if (Receive_Byte(&receivedC[0], 1000000) == 0) + { + receivedC[1]=receivedC[0]; + if(Receive_Byte(&receivedC[0], 1000000) == 0) + { + if ((receivedC[1] == ACK)&&(receivedC[0]==CRC16)) + { + // packet be transferred + ackReceived = 1; + } + } + } + else + { + errors++; + } + } while (!ackReceived && (errors < 0x0A)); + + if (errors >= 0x0A) + { + return errors; + } + + + buf_ptr = buf; + size = sizeFile; + blkNumber = 0x01; + + // 2. Send 1024 byte datas + while (size) + { + // Prepare next packet + Ymodem_PreparePacket(buf_ptr, &packet_data[0], blkNumber, size); + ackReceived = 0; + receivedC[0]= 0; + errors = 0; + + do + { + // Send next packet + if (size >= PACKET_1K_SIZE) + { + pktSize = PACKET_1K_SIZE; + } + else + { + pktSize = PACKET_SIZE; + } + Ymodem_SendPacket(packet_data, pktSize + PACKET_HEADER); + // Send CRC checksum + if (CRC16_F) + { + tempCRC = Cal_CRC16(&packet_data[3], pktSize); + SerialPutChar(tempCRC >> 8); + SerialPutChar(tempCRC & 0xFF); + } + else + { + tempCheckSum = CalChecksum (&packet_data[3], pktSize); + //SerialPutChar(tempCheckSum); + SerialPutChar(tempCheckSum); + } + + // Wait for response + if ((Receive_Byte(&receivedC[0], 100000) == 0) && (receivedC[0] == ACK)) + { + ackReceived = 1; + if (size > pktSize) + { + buf_ptr += pktSize; + size -= pktSize; + if (blkNumber == (FLASH_IMAGE_SIZE/1024)) + { + return 0xFF; // Error + } + else + { + blkNumber++; + } + } + else + { + buf_ptr += pktSize; + size = 0; + } + } + else + { + errors++; + } + } while (!ackReceived && (errors < 0x0A)); + + // Return error + if (errors >= 0x0A) + { + return errors; + } + } + + // 3. Send EOT + ackReceived = 0; + receivedC[0] = 0x00; + errors = 0; + do + { + SerialPutChar(EOT); + // Send (EOT); + // Wait for response + if ((Receive_Byte(&receivedC[0], 10000) == 0) && receivedC[0] == ACK) + { + ackReceived = 1; + } + else + { + errors++; + } + } while (!ackReceived && (errors < 0x0A)); + + if (errors >= 0x0A) + { + return errors; + } + + // Prepare last packet, SOH 00 FF NUL[128] CRC CRC + ackReceived = 0; + receivedC[0] = 0x00; + errors = 0; + + packet_data[0] = SOH; + packet_data[1] = 0x00; + packet_data [2] = 0xFF; + + for (i = PACKET_HEADER; i < (PACKET_SIZE + PACKET_HEADER); i++) + { + packet_data[i] = 0x00; + } + + do + { + // Send datas' packet + Ymodem_SendPacket(packet_data, PACKET_SIZE + PACKET_HEADER); + // Send CRC checksum + tempCRC = Cal_CRC16(&packet_data[3], PACKET_SIZE); + SerialPutChar(tempCRC >> 8); + SerialPutChar(tempCRC & 0xFF); + + // Wait for response + if (Receive_Byte(&receivedC[0], 10000) == 0) + { + if (receivedC[0] == ACK) + { + ackReceived = 1; + } + } + else + { + errors++; + } + } while (!ackReceived && (errors < 0x0A)); + + // Return error + if (errors >= 0x0A) + { + return errors; + } + + return 0; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..ac38593e72 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 0 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..e5d9231dc4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20008000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20002000, LENGTH = 0x8000 - 0x2000 +FLASH (rx) : ORIGIN = 0x00004000, LENGTH = 0x80000 - 0x4000 +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/startup_target.s new file mode 100644 index 0000000000..56a1163207 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 0 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/target_flash.icf new file mode 100644 index 0000000000..4e734b6088 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00004000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00004000; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20002000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/main.h new file mode 100644 index 0000000000..a87637b942 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/main.h @@ -0,0 +1,30 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +uint32_t SerialKeyPressed(uint8_t *key); + + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..cda8ff1a5b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 0 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..e3caff5b0f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvoptx @@ -0,0 +1,647 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + + 1 + 0 + 0 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 1 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..9b342b7298 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x4000 + 0x7c000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20002000 + 0xe000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..cda8ff1a5b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 0 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..6d334edab1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 85 + 85 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 22 + 1 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..347624616c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x4000 + 0x7c000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20002000 + 0xe000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/main.c new file mode 100644 index 0000000000..b5639dc115 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/main.c @@ -0,0 +1,133 @@ +/** + * @file main.c + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + * @brief Main program body. +******************************************************************************/ + +volatile unsigned char test_success; + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +#define FLASH_IAP_ADDR 0x00000000//IAP start address + +//Jump to IAP peogram +typedef void (*IapFun)(void); +IapFun JumpToIap; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Error_Handle. + * @param None + * @retval None + */ +void Error_Handle(void) +{ + while (1); +} + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + uint8_t key; + uint32_t val; + + test_success = 0; + + Clock_Init(); + + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN|UART_CTRL_RXEN; + + val = __get_MSP(); + printf("msp 0x%x\r\n", (unsigned int)val); + printf("Enter App test.\r\n"); + + NVIC_SetPendingIRQ(UART5_IRQn); + NVIC_EnableIRQ(UART5_IRQn); + + test_success = 0; + + while (1) + { + SerialKeyPressed(&key); + /*If UART receive '6', jump to IAP program*/ + if(key == 0x36) + { + JumpToIap=(IapFun)*(volatile uint32_t*)(FLASH_IAP_ADDR+4); + __set_MSP(*(__IO uint32_t*) FLASH_IAP_ADDR); + /*Jump to IAP program*/ + JumpToIap(); + } + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +uint32_t SerialKeyPressed(uint8_t *key) +{ + if (UART5->STATE&UART_STATE_RXFULL) + { + *key = (uint8_t)UART5->DATA; + return 1; + } + else + { + return 0; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/target_isr.c new file mode 100644 index 0000000000..4336e6a6bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern volatile unsigned char test_success; + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ + test_success = 1; + + NVIC_ClearPendingIRQ(UART5_IRQn); + printf("Enter UART5 IRQ.\r\n"); +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Bootloader/Bootloader_0x4000_APP/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..70a6e93c1d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvoptx @@ -0,0 +1,627 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + System Viewer\GPIOA + 35905 + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..a9b47a6048 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 100 + 100 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/main.c new file mode 100644 index 0000000000..ce818449d5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/main.c @@ -0,0 +1,124 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + CMP_TypeDef InitStruct; + CMP_CountTypeDef CountInitStruct; + CMP_INTTypeDef INTInitStruct; + CMP_OutputTypeDef OutputInitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* Forbidden Comparator2 N input pin, IOA5 */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + CMP_DeInit(CMP_2); + CMP_StructInit(&InitStruct); + InitStruct.DebSel = CMP_DEB_RTCCLK_2; /* 2 32KHz de-bounce */ + InitStruct.SignalSourceSel = CMP_SIGNALSRC_NPIN_TO_BGPREF; /* Compare N to BGP refence(1.2V) */ + CMP_Init(CMP_2, &InitStruct); + + CMP_CountStructInit(&CountInitStruct); + CountInitStruct.ModeSel = CMP_MODE_RISING; /* Rising edge */ + CountInitStruct.CheckPeriod = CMP_PERIOD_7_8125MS; /* Checked every 7.8125ms */ + CountInitStruct.CheckNum = CMP_CHKNUM_4; /* Checked data 4 times */ + CMP_CountInit(CMP_2, &CountInitStruct); + + /* Comparator interrupt enable control. */ + CMP_INTStructInit(&INTInitStruct); + INTInitStruct.INTNumSel = CMP_INTNUM_1; + INTInitStruct.SubSel = CMP_COUNT_SUB; + INTInitStruct.THRNum = 10; + CMP_INTInit(CMP_2, &INTInitStruct); + + CMP_INTConfig(CMP_2, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + CMP_OutputStructInit(&OutputInitStruct); + OutputInitStruct.DebSel = CMP_OUTPUT_DEB; + OutputInitStruct.OutputSel = ENABLE; /* Enable Comparator2(output on IOA6) */ + CMP_OutputInit(CMP_2, &OutputInitStruct); + + PMU_BGPCmd(ENABLE); + CMP_Cmd(CMP_2, ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/target_isr.c new file mode 100644 index 0000000000..5239eb7d3a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/target_isr.c @@ -0,0 +1,308 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if(CMP_GetINTStatus(CMP_2)) + { + CMP_ClearINTStatus(CMP_2); + printf("CMP_2 CMPCNT %d\r\n", (unsigned int)ANA->CMPCNT2); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_ExtSignalToBGP/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d5c4adb2cc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..c72beb1ff7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 106 + 106 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/main.c new file mode 100644 index 0000000000..c879c97f46 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/main.c @@ -0,0 +1,130 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + CMP_TypeDef InitStruct; + CMP_CountTypeDef CountInitStruct; + CMP_INTTypeDef INTInitStruct; + CMP_OutputTypeDef OutputInitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* Forbidden Comparator1 input pins: + - P input, IOE8 + - N input, IOE9 */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_8 | GPIO_Pin_9; + GPIOBToF_Init(GPIOE, &GPIO_InitStruct); + + CMP_DeInit(CMP_1); + CMP_StructInit(&InitStruct); + InitStruct.DebSel = CMP_DEB_RTCCLK_2; /* 2 32KHz de-bounce */ + InitStruct.SignalSourceSel = CMP_SIGNALSRC_PPIN_TO_NPIN; /* Compare P to N */ + CMP_Init(CMP_1,&InitStruct); + + PMU_BGPCmd(ENABLE); + + CMP_CountStructInit(&CountInitStruct); + CountInitStruct.ModeSel = CMP_MODE_RISING; /* Rising edge */ + CountInitStruct.CheckPeriod = CMP_PERIOD_7_8125MS; /* Checked every 7.8125ms */ + CountInitStruct.CheckNum = CMP_CHKNUM_4; /* Checked data 4 times */ + CMP_CountInit(CMP_1, &CountInitStruct); + + /* Comparator interrupt enable control. */ + CMP_INTStructInit(&INTInitStruct); + INTInitStruct.INTNumSel = CMP_INTNUM_1; + INTInitStruct.SubSel = CMP_COUNT_NOSUB; + INTInitStruct.THRNum = 9; + CMP_INTInit(CMP_1, &INTInitStruct); + + CMP_INTConfig(CMP_1, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + /* CMP2 output, IOE7 */ + CMP_OutputStructInit(&OutputInitStruct); + OutputInitStruct.DebSel = CMP_OUTPUT_DEB; + OutputInitStruct.OutputSel = ENABLE; + CMP_OutputInit(CMP_1, &OutputInitStruct); + + /* Enable Comparator1 */ + CMP_Cmd(CMP_1, ENABLE); + CMP_ClearCNTValue(CMP_1); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/target_isr.c new file mode 100644 index 0000000000..f1d4e03244 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/target_isr.c @@ -0,0 +1,308 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if(CMP_GetINTStatus(CMP_1)) + { + CMP_ClearINTStatus(CMP_1); + printf("Enter CMP_1 interrupt, CMPCNT: %d\r\n", (unsigned int)ANA->CMPCNT1); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_TwoExtSignals/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..243110e454 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..ab6946bedb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 109 + 109 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/main.c new file mode 100644 index 0000000000..1c0bf5f071 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/main.c @@ -0,0 +1,140 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + CMP_TypeDef InitStruct; + CMP_CountTypeDef CountInitStruct; + CMP_INTTypeDef INTInitStruct; + + test_success = 0; + + Clock_Init(); + + /* Initializes FLASH 1USCYCLE. */ + FLASH_CycleInit(); + + Stdio_Init(); + + /* Forbidden Comparator2 N input pin, IOA5 */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_5; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + CMP_DeInit(CMP_2); + CMP_StructInit(&InitStruct); + InitStruct.DebSel = CMP_DEB_RTCCLK_2; /* 2 32KHz de-bounce */ + InitStruct.SignalSourceSel = CMP_SIGNALSRC_PBAT_TO_NPIN; /* Compare BATRTC to N */ + CMP_Init(CMP_2, &InitStruct); + + CMP_CountStructInit(&CountInitStruct); + CountInitStruct.ModeSel = CMP_MODE_RISING; /* Comparator2 mode rising, ouput 0->1, generate wake-up signal */ + CountInitStruct.CheckPeriod = CMP_PERIOD_7_8125MS; /* Checked every 7.8125ms */ + CountInitStruct.CheckNum = CMP_CHKNUM_4; /* Checked data 4 times */ + CMP_CountInit(CMP_2, &CountInitStruct); + + CMP_INTStructInit(&INTInitStruct); + INTInitStruct.INTNumSel = CMP_INTNUM_1; /* Every time a subtraction is made, an interrupt is generated */ + INTInitStruct.SubSel = CMP_COUNT_SUB; /* If the Comparator2 counter exceeds the \ + CMP2_THR, the CMP2_THR is subtracted until \ + the Comparator2 counter is less than the CMP2_THR*/ + INTInitStruct.THRNum = 5; /* Every 6 interrupts will be triggered */ + CMP_INTInit(CMP_2, &INTInitStruct); + + /* Clear Comparator2 interrupt flag */ + CMP_ClearINTStatus(CMP_2); + /* Enable Comparator2 interrupt, ANA NVIC interrupt */ + CMP_INTConfig(CMP_2, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + PMU_BGPCmd(ENABLE); + /* Enable Comparator2 */ + CMP_Cmd(CMP_2, ENABLE); + + test_success = 1; + + while(1) + { + /* Disable WDT, enter sleep mode */ + printf("Enter sleep mode\r\n"); + WDT_Disable(); + if (PMU_EnterSleepMode()) + { + printf("Enter sleep fail\r\n"); + while (1); + } + + /* Quit sleep mode */ + Stdio_Init(); + printf("Exit sleep mode, CMP2 CMPCNT: %d\r\n", (uint32_t)ANA->CMPCNT2); + WDT_Clear(); + } + +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/target_isr.c new file mode 100644 index 0000000000..103269290a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/target_isr.c @@ -0,0 +1,307 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if (CMP_GetINTStatus(CMP_2)) + { + CMP_ClearINTStatus(CMP_2); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CMP/CMP_WakeUp_Sleep/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..9a75f07195 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 84 + 84 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/main.c new file mode 100644 index 0000000000..e837c62a4e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/main.c @@ -0,0 +1,108 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + uint32_t data_a[2] = { 0xFFFFFFFF, 0xFFFFFFFF }; + uint32_t data_b[2] = { 5, 0x80000000 }; + uint32_t data_o[2] = { 0 }; + + test_success = 0; + + /* Clock initialization */ + Clock_Init(); + /* Print initialization */ + Stdio_Init(); + + /* Configure address */ + CRYPT_AddressAConfig((uint32_t)&data_a[0]); + CRYPT_AddressBConfig((uint32_t)&data_b[0]); + CRYPT_AddressOConfig((uint32_t)&data_o[0]); + + /* Start operation */ + CRYPT_StartAdd(CRYPT_LENGTH_64, CRYPT_STOPCPU); + /* Waiting for operation done */ + CRYPT_WaitForLastOperation(); + + printf("Carry bit is %d\r\n", CRYPT_GetCarryBorrowBit()); +#ifdef __GNUC__ + printf("Result[63:32] 0x%08lx\r\n", data_o[1]); + printf("Result[31: 0] 0x%08lx\r\n", data_o[0]); +#else + printf("Result[63:32] 0x%08x\r\n", data_o[1]); + printf("Result[31: 0] 0x%08x\r\n", data_o[0]); +#endif + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_Add/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/IAR_Kill.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/IAR_Kill.bat new file mode 100644 index 0000000000..a6e07b0aa7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/IAR_Kill.bat @@ -0,0 +1,8 @@ +@echo off + +del /s /a *.lst *.pbi *.cout *.pbd *.browse *.wsdt *.map *.dni *.dep *.ewt *.dbgdt *.tmp 2>nul +for /r . %%d in (.) do rd /s /q "%%d\Debug" 2>nul +for /r . %%d in (.) do rd /s /q "%%d\Release" 2>nul +for /r . %%d in (.) do rd /s /q "%%d\settings" 2>nul + +exit \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewp new file mode 100644 index 0000000000..a26d080d15 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.ewp @@ -0,0 +1,2019 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\types.h + + + $PROJ_DIR$\..\Src\uECC.c + + + $PROJ_DIR$\..\Src\uECC.h + + + $PROJ_DIR$\..\Src\uECC_vli.h + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/main.h new file mode 100644 index 0000000000..cbf53ba51f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/main.h @@ -0,0 +1,30 @@ +/** + * @file main.h + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#include "uECC.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/target_isr.h new file mode 100644 index 0000000000..34859a1c65 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/v_stdio.h new file mode 100644 index 0000000000..af8d67c073 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V4.3.0 + * @date 2018-09-04 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/asm_arm.inc b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/asm_arm.inc new file mode 100644 index 0000000000..fbc456eecb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/asm_arm.inc @@ -0,0 +1,822 @@ +/* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */ + +#ifndef _UECC_ASM_ARM_H_ +#define _UECC_ASM_ARM_H_ + +#if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + #define uECC_MIN_WORDS 8 +#endif +#if uECC_SUPPORTS_secp224r1 + #undef uECC_MIN_WORDS + #define uECC_MIN_WORDS 7 +#endif +#if uECC_SUPPORTS_secp192r1 + #undef uECC_MIN_WORDS + #define uECC_MIN_WORDS 6 +#endif +#if uECC_SUPPORTS_secp160r1 + #undef uECC_MIN_WORDS + #define uECC_MIN_WORDS 5 +#endif + +#if (uECC_PLATFORM == uECC_arm_thumb) + #define REG_RW "+l" + #define REG_WRITE "=l" +#else + #define REG_RW "+r" + #define REG_WRITE "=r" +#endif + +#if (uECC_PLATFORM == uECC_arm_thumb || uECC_PLATFORM == uECC_arm_thumb2) + #define REG_RW_LO "+l" + #define REG_WRITE_LO "=l" +#else + #define REG_RW_LO "+r" + #define REG_WRITE_LO "=r" +#endif + +#if (uECC_PLATFORM == uECC_arm_thumb2) + #define RESUME_SYNTAX +#else + #define RESUME_SYNTAX ".syntax divided \n\t" +#endif + +#if (uECC_OPTIMIZATION_LEVEL >= 2) + +uECC_VLI_API uECC_word_t uECC_vli_add(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { +#if (uECC_MAX_WORDS != uECC_MIN_WORDS) + #if (uECC_PLATFORM == uECC_arm_thumb) || (uECC_PLATFORM == uECC_arm_thumb2) + uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 2 + 1; + #else /* ARM */ + uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 4; + #endif +#endif + uint32_t carry; + uint32_t left_word; + uint32_t right_word; + + __asm volatile ( +/* ".syntax unified \n\t" */ + "movs %[carry], #0 \n\t" + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + "adr %[left], 1f \n\t" + ".align 4 \n\t" + "adds %[jump], %[left] \n\t" + #endif + + "ldmia %[lptr]!, {%[left]} \n\t" + "ldmia %[rptr]!, {%[right]} \n\t" + "adds %[left], %[right] \n\t" + "stmia %[dptr]!, {%[left]} \n\t" + + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + "bx %[jump] \n\t" + #endif + "1: \n\t" + REPEAT(DEC(uECC_MAX_WORDS), + "ldmia %[lptr]!, {%[left]} \n\t" + "ldmia %[rptr]!, {%[right]} \n\t" + "adcs %[left], %[right] \n\t" + "stmia %[dptr]!, {%[left]} \n\t") + + "adcs %[carry], %[carry] \n\t" + RESUME_SYNTAX + : [dptr] REG_RW_LO (result), [lptr] REG_RW_LO (left), [rptr] REG_RW_LO (right), + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + [jump] REG_RW_LO (jump), + #endif + [carry] REG_WRITE_LO (carry), [left] REG_WRITE_LO (left_word), + [right] REG_WRITE_LO (right_word) + : + : "cc", "memory" + ); + return carry; +} +#define asm_add 1 + +uECC_VLI_API uECC_word_t uECC_vli_sub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { +#if (uECC_MAX_WORDS != uECC_MIN_WORDS) + #if (uECC_PLATFORM == uECC_arm_thumb) || (uECC_PLATFORM == uECC_arm_thumb2) + uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 2 + 1; + #else /* ARM */ + uint32_t jump = (uECC_MAX_WORDS - num_words) * 4 * 4; + #endif +#endif + uint32_t carry; + uint32_t left_word; + uint32_t right_word; + + __asm volatile ( + ".syntax unified \n\t" + "movs %[carry], #0 \n\t" + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + "adr %[left], 1f \n\t" + ".align 4 \n\t" + "adds %[jump], %[left] \n\t" + #endif + + "ldmia %[lptr]!, {%[left]} \n\t" + "ldmia %[rptr]!, {%[right]} \n\t" + "subs %[left], %[right] \n\t" + "stmia %[dptr]!, {%[left]} \n\t" + + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + "bx %[jump] \n\t" + #endif + "1: \n\t" + REPEAT(DEC(uECC_MAX_WORDS), + "ldmia %[lptr]!, {%[left]} \n\t" + "ldmia %[rptr]!, {%[right]} \n\t" + "sbcs %[left], %[right] \n\t" + "stmia %[dptr]!, {%[left]} \n\t") + + "adcs %[carry], %[carry] \n\t" + RESUME_SYNTAX + : [dptr] REG_RW_LO (result), [lptr] REG_RW_LO (left), [rptr] REG_RW_LO (right), + #if (uECC_MAX_WORDS != uECC_MIN_WORDS) + [jump] REG_RW_LO (jump), + #endif + [carry] REG_WRITE_LO (carry), [left] REG_WRITE_LO (left_word), + [right] REG_WRITE_LO (right_word) + : + : "cc", "memory" + ); + return !carry; /* Note that on ARM, carry flag set means "no borrow" when subtracting + (for some reason...) */ +} +#define asm_sub 1 + +#endif /* (uECC_OPTIMIZATION_LEVEL >= 2) */ + +#if (uECC_OPTIMIZATION_LEVEL >= 3) + +#if (uECC_PLATFORM != uECC_arm_thumb) + +#if uECC_ARM_USE_UMAAL + #include "asm_arm_mult_square_umaal.inc" +#else + #include "asm_arm_mult_square.inc" +#endif + +#if (uECC_OPTIMIZATION_LEVEL == 3) + +uECC_VLI_API void uECC_vli_mult(uint32_t *result, + const uint32_t *left, + const uint32_t *right, + wordcount_t num_words) { + register uint32_t *r0 __asm__("r0") = result; + register const uint32_t *r1 __asm__("r1") = left; + register const uint32_t *r2 __asm__("r2") = right; + register uint32_t r3 __asm__("r3") = num_words; + + __asm__ volatile ( + ".syntax unified \n\t" +#if (uECC_MIN_WORDS == 5) + FAST_MULT_ASM_5 + #if (uECC_MAX_WORDS > 5) + FAST_MULT_ASM_5_TO_6 + #endif + #if (uECC_MAX_WORDS > 6) + FAST_MULT_ASM_6_TO_7 + #endif + #if (uECC_MAX_WORDS > 7) + FAST_MULT_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 6) + FAST_MULT_ASM_6 + #if (uECC_MAX_WORDS > 6) + FAST_MULT_ASM_6_TO_7 + #endif + #if (uECC_MAX_WORDS > 7) + FAST_MULT_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 7) + FAST_MULT_ASM_7 + #if (uECC_MAX_WORDS > 7) + FAST_MULT_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 8) + FAST_MULT_ASM_8 +#endif + "1: \n\t" + RESUME_SYNTAX + : "+r" (r0), "+r" (r1), "+r" (r2) + : "r" (r3) + : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); +} +#define asm_mult 1 + +#if uECC_SQUARE_FUNC +uECC_VLI_API void uECC_vli_square(uECC_word_t *result, + const uECC_word_t *left, + wordcount_t num_words) { + register uint32_t *r0 __asm__("r0") = result; + register const uint32_t *r1 __asm__("r1") = left; + register uint32_t r2 __asm__("r2") = num_words; + + __asm__ volatile ( + ".syntax unified \n\t" +#if (uECC_MIN_WORDS == 5) + FAST_SQUARE_ASM_5 + #if (uECC_MAX_WORDS > 5) + FAST_SQUARE_ASM_5_TO_6 + #endif + #if (uECC_MAX_WORDS > 6) + FAST_SQUARE_ASM_6_TO_7 + #endif + #if (uECC_MAX_WORDS > 7) + FAST_SQUARE_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 6) + FAST_SQUARE_ASM_6 + #if (uECC_MAX_WORDS > 6) + FAST_SQUARE_ASM_6_TO_7 + #endif + #if (uECC_MAX_WORDS > 7) + FAST_SQUARE_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 7) + FAST_SQUARE_ASM_7 + #if (uECC_MAX_WORDS > 7) + FAST_SQUARE_ASM_7_TO_8 + #endif +#elif (uECC_MIN_WORDS == 8) + FAST_SQUARE_ASM_8 +#endif + + "1: \n\t" + RESUME_SYNTAX + : "+r" (r0), "+r" (r1) + : "r" (r2) + : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); +} +#define asm_square 1 +#endif /* uECC_SQUARE_FUNC */ + +#else /* (uECC_OPTIMIZATION_LEVEL > 3) */ + +uECC_VLI_API void uECC_vli_mult(uint32_t *result, + const uint32_t *left, + const uint32_t *right, + wordcount_t num_words) { + register uint32_t *r0 __asm__("r0") = result; + register const uint32_t *r1 __asm__("r1") = left; + register const uint32_t *r2 __asm__("r2") = right; + register uint32_t r3 __asm__("r3") = num_words; + +#if uECC_SUPPORTS_secp160r1 + if (num_words == 5) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_MULT_ASM_5 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1), "+r" (r2) + : "r" (r3) + : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if uECC_SUPPORTS_secp192r1 + if (num_words == 6) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_MULT_ASM_6 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1), "+r" (r2) + : "r" (r3) + : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if uECC_SUPPORTS_secp224r1 + if (num_words == 7) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_MULT_ASM_7 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1), "+r" (r2) + : "r" (r3) + : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + if (num_words == 8) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_MULT_ASM_8 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1), "+r" (r2) + : "r" (r3) + : "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +} +#define asm_mult 1 + +#if uECC_SQUARE_FUNC +uECC_VLI_API void uECC_vli_square(uECC_word_t *result, + const uECC_word_t *left, + wordcount_t num_words) { + register uint32_t *r0 __asm__("r0") = result; + register const uint32_t *r1 __asm__("r1") = left; + register uint32_t r2 __asm__("r2") = num_words; + +#if uECC_SUPPORTS_secp160r1 + if (num_words == 5) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_SQUARE_ASM_5 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1) + : "r" (r2) + : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if uECC_SUPPORTS_secp192r1 + if (num_words == 6) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_SQUARE_ASM_6 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1) + : "r" (r2) + : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if uECC_SUPPORTS_secp224r1 + if (num_words == 7) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_SQUARE_ASM_7 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1) + : "r" (r2) + : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +#if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + if (num_words == 8) { + __asm__ volatile ( + ".syntax unified \n\t" + FAST_SQUARE_ASM_8 + RESUME_SYNTAX + : "+r" (r0), "+r" (r1) + : "r" (r2) + : "r3", "r4", "r5", "r6", "r7", "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); + return; + } +#endif +} +#define asm_square 1 +#endif /* uECC_SQUARE_FUNC */ + +#endif /* (uECC_OPTIMIZATION_LEVEL > 3) */ + +#endif /* uECC_PLATFORM != uECC_arm_thumb */ + +#endif /* (uECC_OPTIMIZATION_LEVEL >= 3) */ + +/* ---- "Small" implementations ---- */ + +#if !asm_add +uECC_VLI_API uECC_word_t uECC_vli_add(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + uint32_t carry = 0; + uint32_t left_word; + uint32_t right_word; + + __asm__ volatile ( + ".syntax unified \n\t" + "1: \n\t" + "ldmia %[lptr]!, {%[left]} \n\t" /* Load left word. */ + "ldmia %[rptr]!, {%[right]} \n\t" /* Load right word. */ + "lsrs %[carry], #1 \n\t" /* Set up carry flag (carry = 0 after this). */ + "adcs %[left], %[left], %[right] \n\t" /* Add with carry. */ + "adcs %[carry], %[carry], %[carry] \n\t" /* Store carry bit. */ + "stmia %[dptr]!, {%[left]} \n\t" /* Store result word. */ + "subs %[ctr], #1 \n\t" /* Decrement counter. */ + "bne 1b \n\t" /* Loop until counter == 0. */ + RESUME_SYNTAX + : [dptr] REG_RW (result), [lptr] REG_RW (left), [rptr] REG_RW (right), + [ctr] REG_RW (num_words), [carry] REG_RW (carry), + [left] REG_WRITE (left_word), [right] REG_WRITE (right_word) + : + : "cc", "memory" + ); + return carry; +} +#define asm_add 1 +#endif + +#if !asm_sub +uECC_VLI_API uECC_word_t uECC_vli_sub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + uint32_t carry = 1; /* carry = 1 initially (means don't borrow) */ + uint32_t left_word; + uint32_t right_word; + + __asm__ volatile ( + ".syntax unified \n\t" + "1: \n\t" + "ldmia %[lptr]!, {%[left]} \n\t" /* Load left word. */ + "ldmia %[rptr]!, {%[right]} \n\t" /* Load right word. */ + "lsrs %[carry], #1 \n\t" /* Set up carry flag (carry = 0 after this). */ + "sbcs %[left], %[left], %[right] \n\t" /* Subtract with borrow. */ + "adcs %[carry], %[carry], %[carry] \n\t" /* Store carry bit. */ + "stmia %[dptr]!, {%[left]} \n\t" /* Store result word. */ + "subs %[ctr], #1 \n\t" /* Decrement counter. */ + "bne 1b \n\t" /* Loop until counter == 0. */ + RESUME_SYNTAX + : [dptr] REG_RW (result), [lptr] REG_RW (left), [rptr] REG_RW (right), + [ctr] REG_RW (num_words), [carry] REG_RW (carry), + [left] REG_WRITE (left_word), [right] REG_WRITE (right_word) + : + : "cc", "memory" + ); + return !carry; +} +#define asm_sub 1 +#endif + +#if !asm_mult +uECC_VLI_API void uECC_vli_mult(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { +#if (uECC_PLATFORM != uECC_arm_thumb) + uint32_t c0 = 0; + uint32_t c1 = 0; + uint32_t c2 = 0; + uint32_t k = 0; + uint32_t i; + uint32_t t0, t1; + + __asm volatile ( + ".syntax unified \n\t" + + "1: \n\t" /* outer loop (k < num_words) */ + "movs %[i], #0 \n\t" /* i = 0 */ + "b 3f \n\t" + + "2: \n\t" /* outer loop (k >= num_words) */ + "movs %[i], %[k] \n\t" /* i = k */ + "subs %[i], %[last_word] \n\t" /* i = k - (num_words - 1) (times 4) */ + + "3: \n\t" /* inner loop */ + "subs %[t0], %[k], %[i] \n\t" /* t0 = k-i */ + + "ldr %[t1], [%[right], %[t0]] \n\t" /* t1 = right[k - i] */ + "ldr %[t0], [%[left], %[i]] \n\t" /* t0 = left[i] */ + + "umull %[t0], %[t1], %[t0], %[t1] \n\t" /* (t0, t1) = left[i] * right[k - i] */ + + "adds %[c0], %[c0], %[t0] \n\t" /* add low word to c0 */ + "adcs %[c1], %[c1], %[t1] \n\t" /* add high word to c1, including carry */ + "adcs %[c2], %[c2], #0 \n\t" /* add carry to c2 */ + + "adds %[i], #4 \n\t" /* i += 4 */ + "cmp %[i], %[last_word] \n\t" /* i > (num_words - 1) (times 4)? */ + "bgt 4f \n\t" /* if so, exit the loop */ + "cmp %[i], %[k] \n\t" /* i <= k? */ + "ble 3b \n\t" /* if so, continue looping */ + + "4: \n\t" /* end inner loop */ + + "str %[c0], [%[result], %[k]] \n\t" /* result[k] = c0 */ + "mov %[c0], %[c1] \n\t" /* c0 = c1 */ + "mov %[c1], %[c2] \n\t" /* c1 = c2 */ + "movs %[c2], #0 \n\t" /* c2 = 0 */ + "adds %[k], #4 \n\t" /* k += 4 */ + "cmp %[k], %[last_word] \n\t" /* k <= (num_words - 1) (times 4) ? */ + "ble 1b \n\t" /* if so, loop back, start with i = 0 */ + "cmp %[k], %[last_word], lsl #1 \n\t" /* k <= (num_words * 2 - 2) (times 4) ? */ + "ble 2b \n\t" /* if so, loop back, start with i = (k + 1) - num_words */ + /* end outer loop */ + + "str %[c0], [%[result], %[k]] \n\t" /* result[num_words * 2 - 1] = c0 */ + RESUME_SYNTAX +/* : [c0] "+r" (c0), [c1] "+r" (c1), [c2] "+r" (c2), */ + : [c0] "=r" (c0), [c1] "=r" (c1), [c2] "=r" (c2), + [k] "+r" (k), [i] "=&r" (i), [t0] "=&r" (t0), [t1] "=&r" (t1) + : [result] "r" (result), [left] "r" (left), [right] "r" (right), + [last_word] "r" ((num_words - 1) * 4) + : "cc", "memory" + ); + +#else /* Thumb-1 */ + uint32_t r4, r5, r6, r7; + + __asm__ volatile ( + ".syntax unified \n\t" + "subs %[r3], #1 \n\t" /* r3 = num_words - 1 */ + "lsls %[r3], #2 \n\t" /* r3 = (num_words - 1) * 4 */ + "mov r8, %[r3] \n\t" /* r8 = (num_words - 1) * 4 */ + "lsls %[r3], #1 \n\t" /* r3 = (num_words - 1) * 8 */ + "mov r9, %[r3] \n\t" /* r9 = (num_words - 1) * 8 */ + "movs %[r3], #0 \n\t" /* c0 = 0 */ + "movs %[r4], #0 \n\t" /* c1 = 0 */ + "movs %[r5], #0 \n\t" /* c2 = 0 */ + "movs %[r6], #0 \n\t" /* k = 0 */ + + "push {%[r0]} \n\t" /* keep result on the stack */ + + "1: \n\t" /* outer loop (k < num_words) */ + "movs %[r7], #0 \n\t" /* r7 = i = 0 */ + "b 3f \n\t" + + "2: \n\t" /* outer loop (k >= num_words) */ + "movs %[r7], %[r6] \n\t" /* r7 = k */ + "mov %[r0], r8 \n\t" /* r0 = (num_words - 1) * 4 */ + "subs %[r7], %[r0] \n\t" /* r7 = i = k - (num_words - 1) (times 4) */ + + "3: \n\t" /* inner loop */ + "mov r10, %[r3] \n\t" + "mov r11, %[r4] \n\t" + "mov r12, %[r5] \n\t" + "mov r14, %[r6] \n\t" + "subs %[r0], %[r6], %[r7] \n\t" /* r0 = k - i */ + + "ldr %[r4], [%[r2], %[r0]] \n\t" /* r4 = right[k - i] */ + "ldr %[r0], [%[r1], %[r7]] \n\t" /* r0 = left[i] */ + + "lsrs %[r3], %[r0], #16 \n\t" /* r3 = a1 */ + "uxth %[r0], %[r0] \n\t" /* r0 = a0 */ + + "lsrs %[r5], %[r4], #16 \n\t" /* r5 = b1 */ + "uxth %[r4], %[r4] \n\t" /* r4 = b0 */ + + "movs %[r6], %[r3] \n\t" /* r6 = a1 */ + "muls %[r6], %[r5], %[r6] \n\t" /* r6 = a1 * b1 */ + "muls %[r3], %[r4], %[r3] \n\t" /* r3 = b0 * a1 */ + "muls %[r5], %[r0], %[r5] \n\t" /* r5 = a0 * b1 */ + "muls %[r0], %[r4], %[r0] \n\t" /* r0 = a0 * b0 */ + + /* Add middle terms */ + "lsls %[r4], %[r3], #16 \n\t" + "lsrs %[r3], %[r3], #16 \n\t" + "adds %[r0], %[r4] \n\t" + "adcs %[r6], %[r3] \n\t" + + "lsls %[r4], %[r5], #16 \n\t" + "lsrs %[r5], %[r5], #16 \n\t" + "adds %[r0], %[r4] \n\t" + "adcs %[r6], %[r5] \n\t" + + "mov %[r3], r10\n\t" + "mov %[r4], r11\n\t" + "mov %[r5], r12\n\t" + "adds %[r3], %[r0] \n\t" /* add low word to c0 */ + "adcs %[r4], %[r6] \n\t" /* add high word to c1, including carry */ + "movs %[r0], #0 \n\t" /* r0 = 0 (does not affect carry bit) */ + "adcs %[r5], %[r0] \n\t" /* add carry to c2 */ + + "mov %[r6], r14\n\t" /* r6 = k */ + + "adds %[r7], #4 \n\t" /* i += 4 */ + "cmp %[r7], r8 \n\t" /* i > (num_words - 1) (times 4)? */ + "bgt 4f \n\t" /* if so, exit the loop */ + "cmp %[r7], %[r6] \n\t" /* i <= k? */ + "ble 3b \n\t" /* if so, continue looping */ + + "4: \n\t" /* end inner loop */ + + "ldr %[r0], [sp, #0] \n\t" /* r0 = result */ + + "str %[r3], [%[r0], %[r6]] \n\t" /* result[k] = c0 */ + "mov %[r3], %[r4] \n\t" /* c0 = c1 */ + "mov %[r4], %[r5] \n\t" /* c1 = c2 */ + "movs %[r5], #0 \n\t" /* c2 = 0 */ + "adds %[r6], #4 \n\t" /* k += 4 */ + "cmp %[r6], r8 \n\t" /* k <= (num_words - 1) (times 4) ? */ + "ble 1b \n\t" /* if so, loop back, start with i = 0 */ + "cmp %[r6], r9 \n\t" /* k <= (num_words * 2 - 2) (times 4) ? */ + "ble 2b \n\t" /* if so, loop back, with i = (k + 1) - num_words */ + /* end outer loop */ + + "str %[r3], [%[r0], %[r6]] \n\t" /* result[num_words * 2 - 1] = c0 */ + "pop {%[r0]} \n\t" /* pop result off the stack */ + + ".syntax divided \n\t" + : [r3] "+l" (num_words), [r4] "=&l" (r4), + [r5] "=&l" (r5), [r6] "=&l" (r6), [r7] "=&l" (r7) + : [r0] "l" (result), [r1] "l" (left), [r2] "l" (right) + : "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); +#endif +} +#define asm_mult 1 +#endif + +#if uECC_SQUARE_FUNC +#if !asm_square +uECC_VLI_API void uECC_vli_square(uECC_word_t *result, + const uECC_word_t *left, + wordcount_t num_words) { +#if (uECC_PLATFORM != uECC_arm_thumb) + uint32_t c0 = 0; + uint32_t c1 = 0; + uint32_t c2 = 0; + uint32_t k = 0; + uint32_t i, tt; + uint32_t t0, t1; + + __asm volatile ( + ".syntax unified \n\t" + + "1: \n\t" /* outer loop (k < num_words) */ + "movs %[i], #0 \n\t" /* i = 0 */ + "b 3f \n\t" + + "2: \n\t" /* outer loop (k >= num_words) */ + "movs %[i], %[k] \n\t" /* i = k */ + "subs %[i], %[last_word] \n\t" /* i = k - (num_words - 1) (times 4) */ + + "3: \n\t" /* inner loop */ + "subs %[tt], %[k], %[i] \n\t" /* tt = k-i */ + + "ldr %[t1], [%[left], %[tt]] \n\t" /* t1 = left[k - i] */ + "ldr %[t0], [%[left], %[i]] \n\t" /* t0 = left[i] */ + + "umull %[t0], %[t1], %[t0], %[t1] \n\t" /* (t0, t1) = left[i] * right[k - i] */ + + "cmp %[i], %[tt] \n\t" /* (i < k - i) ? */ + "bge 4f \n\t" /* if i >= k - i, skip */ + "adds %[c0], %[c0], %[t0] \n\t" /* add low word to c0 */ + "adcs %[c1], %[c1], %[t1] \n\t" /* add high word to c1, including carry */ + "adcs %[c2], %[c2], #0 \n\t" /* add carry to c2 */ + + "4: \n\t" + "adds %[c0], %[c0], %[t0] \n\t" /* add low word to c0 */ + "adcs %[c1], %[c1], %[t1] \n\t" /* add high word to c1, including carry */ + "adcs %[c2], %[c2], #0 \n\t" /* add carry to c2 */ + + "adds %[i], #4 \n\t" /* i += 4 */ + "cmp %[i], %[k] \n\t" /* i >= k? */ + "bge 5f \n\t" /* if so, exit the loop */ + "subs %[tt], %[k], %[i] \n\t" /* tt = k - i */ + "cmp %[i], %[tt] \n\t" /* i <= k - i? */ + "ble 3b \n\t" /* if so, continue looping */ + + "5: \n\t" /* end inner loop */ + + "str %[c0], [%[result], %[k]] \n\t" /* result[k] = c0 */ + "mov %[c0], %[c1] \n\t" /* c0 = c1 */ + "mov %[c1], %[c2] \n\t" /* c1 = c2 */ + "movs %[c2], #0 \n\t" /* c2 = 0 */ + "adds %[k], #4 \n\t" /* k += 4 */ + "cmp %[k], %[last_word] \n\t" /* k <= (num_words - 1) (times 4) ? */ + "ble 1b \n\t" /* if so, loop back, start with i = 0 */ + "cmp %[k], %[last_word], lsl #1 \n\t" /* k <= (num_words * 2 - 2) (times 4) ? */ + "ble 2b \n\t" /* if so, loop back, start with i = (k + 1) - num_words */ + /* end outer loop */ + + "str %[c0], [%[result], %[k]] \n\t" /* result[num_words * 2 - 1] = c0 */ + RESUME_SYNTAX +/* : [c0] "+r" (c0), [c1] "+r" (c1), [c2] "+r" (c2), */ + : [c0] "=r" (c0), [c1] "=r" (c1), [c2] "=r" (c2), + [k] "+r" (k), [i] "=&r" (i), [tt] "=&r" (tt), [t0] "=&r" (t0), [t1] "=&r" (t1) + : [result] "r" (result), [left] "r" (left), [last_word] "r" ((num_words - 1) * 4) + : "cc", "memory" + ); + +#else + uint32_t r3, r4, r5, r6, r7; + + __asm__ volatile ( + ".syntax unified \n\t" + "subs %[r2], #1 \n\t" /* r2 = num_words - 1 */ + "lsls %[r2], #2 \n\t" /* r2 = (num_words - 1) * 4 */ + "mov r8, %[r2] \n\t" /* r8 = (num_words - 1) * 4 */ + "lsls %[r2], #1 \n\t" /* r2 = (num_words - 1) * 8 */ + "mov r9, %[r2] \n\t" /* r9 = (num_words - 1) * 8 */ + "movs %[r2], #0 \n\t" /* c0 = 0 */ + "movs %[r3], #0 \n\t" /* c1 = 0 */ + "movs %[r4], #0 \n\t" /* c2 = 0 */ + "movs %[r5], #0 \n\t" /* k = 0 */ + + "push {%[r0]} \n\t" /* keep result on the stack */ + + "1: \n\t" /* outer loop (k < num_words) */ + "movs %[r6], #0 \n\t" /* r6 = i = 0 */ + "b 3f \n\t" + + "2: \n\t" /* outer loop (k >= num_words) */ + "movs %[r6], %[r5] \n\t" /* r6 = k */ + "mov %[r0], r8 \n\t" /* r0 = (num_words - 1) * 4 */ + "subs %[r6], %[r0] \n\t" /* r6 = i = k - (num_words - 1) (times 4) */ + + "3: \n\t" /* inner loop */ + "mov r10, %[r2] \n\t" + "mov r11, %[r3] \n\t" + "mov r12, %[r4] \n\t" + "mov r14, %[r5] \n\t" + "subs %[r7], %[r5], %[r6] \n\t" /* r7 = k - i */ + + "ldr %[r3], [%[r1], %[r7]] \n\t" /* r3 = left[k - i] */ + "ldr %[r0], [%[r1], %[r6]] \n\t" /* r0 = left[i] */ + + "lsrs %[r2], %[r0], #16 \n\t" /* r2 = a1 */ + "uxth %[r0], %[r0] \n\t" /* r0 = a0 */ + + "lsrs %[r4], %[r3], #16 \n\t" /* r4 = b1 */ + "uxth %[r3], %[r3] \n\t" /* r3 = b0 */ + + "movs %[r5], %[r2] \n\t" /* r5 = a1 */ + "muls %[r5], %[r4], %[r5] \n\t" /* r5 = a1 * b1 */ + "muls %[r2], %[r3], %[r2] \n\t" /* r2 = b0 * a1 */ + "muls %[r4], %[r0], %[r4] \n\t" /* r4 = a0 * b1 */ + "muls %[r0], %[r3], %[r0] \n\t" /* r0 = a0 * b0 */ + + /* Add middle terms */ + "lsls %[r3], %[r2], #16 \n\t" + "lsrs %[r2], %[r2], #16 \n\t" + "adds %[r0], %[r3] \n\t" + "adcs %[r5], %[r2] \n\t" + + "lsls %[r3], %[r4], #16 \n\t" + "lsrs %[r4], %[r4], #16 \n\t" + "adds %[r0], %[r3] \n\t" + "adcs %[r5], %[r4] \n\t" + + /* Add to acc, doubling if necessary */ + "mov %[r2], r10\n\t" + "mov %[r3], r11\n\t" + "mov %[r4], r12\n\t" + + "cmp %[r6], %[r7] \n\t" /* (i < k - i) ? */ + "bge 4f \n\t" /* if i >= k - i, skip */ + "movs %[r7], #0 \n\t" /* r7 = 0 */ + "adds %[r2], %[r0] \n\t" /* add low word to c0 */ + "adcs %[r3], %[r5] \n\t" /* add high word to c1, including carry */ + "adcs %[r4], %[r7] \n\t" /* add carry to c2 */ + "4: \n\t" + "movs %[r7], #0 \n\t" /* r7 = 0 */ + "adds %[r2], %[r0] \n\t" /* add low word to c0 */ + "adcs %[r3], %[r5] \n\t" /* add high word to c1, including carry */ + "adcs %[r4], %[r7] \n\t" /* add carry to c2 */ + + "mov %[r5], r14\n\t" /* r5 = k */ + + "adds %[r6], #4 \n\t" /* i += 4 */ + "cmp %[r6], %[r5] \n\t" /* i >= k? */ + "bge 5f \n\t" /* if so, exit the loop */ + "subs %[r7], %[r5], %[r6] \n\t" /* r7 = k - i */ + "cmp %[r6], %[r7] \n\t" /* i <= k - i? */ + "ble 3b \n\t" /* if so, continue looping */ + + "5: \n\t" /* end inner loop */ + + "ldr %[r0], [sp, #0] \n\t" /* r0 = result */ + + "str %[r2], [%[r0], %[r5]] \n\t" /* result[k] = c0 */ + "mov %[r2], %[r3] \n\t" /* c0 = c1 */ + "mov %[r3], %[r4] \n\t" /* c1 = c2 */ + "movs %[r4], #0 \n\t" /* c2 = 0 */ + "adds %[r5], #4 \n\t" /* k += 4 */ + "cmp %[r5], r8 \n\t" /* k <= (num_words - 1) (times 4) ? */ + "ble 1b \n\t" /* if so, loop back, start with i = 0 */ + "cmp %[r5], r9 \n\t" /* k <= (num_words * 2 - 2) (times 4) ? */ + "ble 2b \n\t" /* if so, loop back, with i = (k + 1) - num_words */ + /* end outer loop */ + + "str %[r2], [%[r0], %[r5]] \n\t" /* result[num_words * 2 - 1] = c0 */ + "pop {%[r0]} \n\t" /* pop result off the stack */ + + ".syntax divided \n\t" + : [r2] "+l" (num_words), [r3] "=&l" (r3), [r4] "=&l" (r4), + [r5] "=&l" (r5), [r6] "=&l" (r6), [r7] "=&l" (r7) + : [r0] "l" (result), [r1] "l" (left) + : "r8", "r9", "r10", "r11", "r12", "r14", "cc", "memory" + ); +#endif +} +#define asm_square 1 +#endif +#endif /* uECC_SQUARE_FUNC */ + +#endif /* _UECC_ASM_ARM_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/curve-specific.inc b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/curve-specific.inc new file mode 100644 index 0000000000..9e81c6a4f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/curve-specific.inc @@ -0,0 +1,1247 @@ + +#ifndef _UECC_CURVE_SPECIFIC_H_ +#define _UECC_CURVE_SPECIFIC_H_ + +#define num_bytes_secp160r1 20 +#define num_bytes_secp192r1 24 +#define num_bytes_secp224r1 28 +#define num_bytes_secp256r1 32 +#define num_bytes_secp256k1 32 + +#if (uECC_WORD_SIZE == 1) + +#define num_words_secp160r1 20 +#define num_words_secp192r1 24 +#define num_words_secp224r1 28 +#define num_words_secp256r1 32 +#define num_words_secp256k1 32 + +#define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h) \ + 0x##a, 0x##b, 0x##c, 0x##d, 0x##e, 0x##f, 0x##g, 0x##h +#define BYTES_TO_WORDS_4(a, b, c, d) 0x##a, 0x##b, 0x##c, 0x##d + +#elif (uECC_WORD_SIZE == 4) + +#define num_words_secp160r1 5 +#define num_words_secp192r1 6 +#define num_words_secp224r1 7 +#define num_words_secp256r1 8 +#define num_words_secp256k1 8 + +#define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h) 0x##d##c##b##a, 0x##h##g##f##e +#define BYTES_TO_WORDS_4(a, b, c, d) 0x##d##c##b##a + +#elif (uECC_WORD_SIZE == 8) + +#define num_words_secp160r1 3 +#define num_words_secp192r1 3 +#define num_words_secp224r1 4 +#define num_words_secp256r1 4 +#define num_words_secp256k1 4 + +#define BYTES_TO_WORDS_8(a, b, c, d, e, f, g, h) 0x##h##g##f##e##d##c##b##a##ull +#define BYTES_TO_WORDS_4(a, b, c, d) 0x##d##c##b##a##ull + +#endif /* uECC_WORD_SIZE */ + +#if uECC_SUPPORTS_secp160r1 || uECC_SUPPORTS_secp192r1 || \ + uECC_SUPPORTS_secp224r1 || uECC_SUPPORTS_secp256r1 +static void double_jacobian_default(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * Z1, + uECC_Curve curve) { + /* t1 = X, t2 = Y, t3 = Z */ + uECC_word_t t4[uECC_MAX_WORDS]; + uECC_word_t t5[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + + if (uECC_vli_isZero(Z1, num_words)) { + return; + } + + uECC_vli_modSquare_fast(t4, Y1, curve); /* t4 = y1^2 */ + uECC_vli_modMult_fast(t5, X1, t4, curve); /* t5 = x1*y1^2 = A */ + uECC_vli_modSquare_fast(t4, t4, curve); /* t4 = y1^4 */ + uECC_vli_modMult_fast(Y1, Y1, Z1, curve); /* t2 = y1*z1 = z3 */ + uECC_vli_modSquare_fast(Z1, Z1, curve); /* t3 = z1^2 */ + + uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = x1 + z1^2 */ + uECC_vli_modAdd(Z1, Z1, Z1, curve->p, num_words); /* t3 = 2*z1^2 */ + uECC_vli_modSub(Z1, X1, Z1, curve->p, num_words); /* t3 = x1 - z1^2 */ + uECC_vli_modMult_fast(X1, X1, Z1, curve); /* t1 = x1^2 - z1^4 */ + + uECC_vli_modAdd(Z1, X1, X1, curve->p, num_words); /* t3 = 2*(x1^2 - z1^4) */ + uECC_vli_modAdd(X1, X1, Z1, curve->p, num_words); /* t1 = 3*(x1^2 - z1^4) */ + if (uECC_vli_testBit(X1, 0)) { + uECC_word_t l_carry = uECC_vli_add(X1, X1, curve->p, num_words); + uECC_vli_rshift1(X1, num_words); + X1[num_words - 1] |= l_carry << (uECC_WORD_BITS - 1); + } else { + uECC_vli_rshift1(X1, num_words); + } + /* t1 = 3/2*(x1^2 - z1^4) = B */ + + uECC_vli_modSquare_fast(Z1, X1, curve); /* t3 = B^2 */ + uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - A */ + uECC_vli_modSub(Z1, Z1, t5, curve->p, num_words); /* t3 = B^2 - 2A = x3 */ + uECC_vli_modSub(t5, t5, Z1, curve->p, num_words); /* t5 = A - x3 */ + uECC_vli_modMult_fast(X1, X1, t5, curve); /* t1 = B * (A - x3) */ + uECC_vli_modSub(t4, X1, t4, curve->p, num_words); /* t4 = B * (A - x3) - y1^4 = y3 */ + + uECC_vli_set(X1, Z1, num_words); + uECC_vli_set(Z1, Y1, num_words); + uECC_vli_set(Y1, t4, num_words); +} + +/* Computes result = x^3 + ax + b. result must not overlap x. */ +static void x_side_default(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve) { + uECC_word_t _3[uECC_MAX_WORDS] = {3}; /* -a = 3 */ + wordcount_t num_words = curve->num_words; + + uECC_vli_modSquare_fast(result, x, curve); /* r = x^2 */ + uECC_vli_modSub(result, result, _3, curve->p, num_words); /* r = x^2 - 3 */ + uECC_vli_modMult_fast(result, result, x, curve); /* r = x^3 - 3x */ + uECC_vli_modAdd(result, result, curve->b, curve->p, num_words); /* r = x^3 - 3x + b */ +} +#endif /* uECC_SUPPORTS_secp... */ + +#if uECC_SUPPORT_COMPRESSED_POINT +#if uECC_SUPPORTS_secp160r1 || uECC_SUPPORTS_secp192r1 || \ + uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1 +/* Compute a = sqrt(a) (mod curve_p). */ +static void mod_sqrt_default(uECC_word_t *a, uECC_Curve curve) { + bitcount_t i; + uECC_word_t p1[uECC_MAX_WORDS] = {1}; + uECC_word_t l_result[uECC_MAX_WORDS] = {1}; + wordcount_t num_words = curve->num_words; + + /* When curve->p == 3 (mod 4), we can compute + sqrt(a) = a^((curve->p + 1) / 4) (mod curve->p). */ + uECC_vli_add(p1, curve->p, p1, num_words); /* p1 = curve_p + 1 */ + for (i = uECC_vli_numBits(p1, num_words) - 1; i > 1; --i) { + uECC_vli_modSquare_fast(l_result, l_result, curve); + if (uECC_vli_testBit(p1, i)) { + uECC_vli_modMult_fast(l_result, l_result, a, curve); + } + } + uECC_vli_set(a, l_result, num_words); +} +#endif /* uECC_SUPPORTS_secp... */ +#endif /* uECC_SUPPORT_COMPRESSED_POINT */ + +#if uECC_SUPPORTS_secp160r1 + +#if (uECC_OPTIMIZATION_LEVEL > 0) +static void vli_mmod_fast_secp160r1(uECC_word_t *result, uECC_word_t *product); +#endif + +static const struct uECC_Curve_t curve_secp160r1 = { + num_words_secp160r1, + num_bytes_secp160r1, + 161, /* num_n_bits */ + { BYTES_TO_WORDS_8(FF, FF, FF, 7F, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_4(FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(57, 22, 75, CA, D3, AE, 27, F9), + BYTES_TO_WORDS_8(C8, F4, 01, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, 01, 00, 00, 00) }, + { BYTES_TO_WORDS_8(82, FC, CB, 13, B9, 8B, C3, 68), + BYTES_TO_WORDS_8(89, 69, 64, 46, 28, 73, F5, 8E), + BYTES_TO_WORDS_4(68, B5, 96, 4A), + + BYTES_TO_WORDS_8(32, FB, C5, 7A, 37, 51, 23, 04), + BYTES_TO_WORDS_8(12, C9, DC, 59, 7D, 94, 68, 31), + BYTES_TO_WORDS_4(55, 28, A6, 23) }, + { BYTES_TO_WORDS_8(45, FA, 65, C5, AD, D4, D4, 81), + BYTES_TO_WORDS_8(9F, F8, AC, 65, 8B, 7A, BD, 54), + BYTES_TO_WORDS_4(FC, BE, 97, 1C) }, + &double_jacobian_default, +#if uECC_SUPPORT_COMPRESSED_POINT + &mod_sqrt_default, +#endif + &x_side_default, +#if (uECC_OPTIMIZATION_LEVEL > 0) + &vli_mmod_fast_secp160r1 +#endif +}; + +uECC_Curve uECC_secp160r1(void) { return &curve_secp160r1; } + +#if (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp160r1) +/* Computes result = product % curve_p + see http://www.isys.uni-klu.ac.at/PDF/2001-0126-MT.pdf page 354 + + Note that this only works if log2(omega) < log2(p) / 2 */ +static void omega_mult_secp160r1(uECC_word_t *result, const uECC_word_t *right); +#if uECC_WORD_SIZE == 8 +static void vli_mmod_fast_secp160r1(uECC_word_t *result, uECC_word_t *product) { + uECC_word_t tmp[2 * num_words_secp160r1]; + uECC_word_t copy; + + uECC_vli_clear(tmp, num_words_secp160r1); + uECC_vli_clear(tmp + num_words_secp160r1, num_words_secp160r1); + + omega_mult_secp160r1(tmp, product + num_words_secp160r1 - 1); /* (Rq, q) = q * c */ + + product[num_words_secp160r1 - 1] &= 0xffffffff; + copy = tmp[num_words_secp160r1 - 1]; + tmp[num_words_secp160r1 - 1] &= 0xffffffff; + uECC_vli_add(result, product, tmp, num_words_secp160r1); /* (C, r) = r + q */ + uECC_vli_clear(product, num_words_secp160r1); + tmp[num_words_secp160r1 - 1] = copy; + omega_mult_secp160r1(product, tmp + num_words_secp160r1 - 1); /* Rq*c */ + uECC_vli_add(result, result, product, num_words_secp160r1); /* (C1, r) = r + Rq*c */ + + while (uECC_vli_cmp_unsafe(result, curve_secp160r1.p, num_words_secp160r1) > 0) { + uECC_vli_sub(result, result, curve_secp160r1.p, num_words_secp160r1); + } +} + +static void omega_mult_secp160r1(uint64_t *result, const uint64_t *right) { + uint32_t carry; + unsigned i; + + /* Multiply by (2^31 + 1). */ + carry = 0; + for (i = 0; i < num_words_secp160r1; ++i) { + uint64_t tmp = (right[i] >> 32) | (right[i + 1] << 32); + result[i] = (tmp << 31) + tmp + carry; + carry = (tmp >> 33) + (result[i] < tmp || (carry && result[i] == tmp)); + } + result[i] = carry; +} +#else +static void vli_mmod_fast_secp160r1(uECC_word_t *result, uECC_word_t *product) { + uECC_word_t tmp[2 * num_words_secp160r1]; + uECC_word_t carry; + + uECC_vli_clear(tmp, num_words_secp160r1); + uECC_vli_clear(tmp + num_words_secp160r1, num_words_secp160r1); + + omega_mult_secp160r1(tmp, product + num_words_secp160r1); /* (Rq, q) = q * c */ + + carry = uECC_vli_add(result, product, tmp, num_words_secp160r1); /* (C, r) = r + q */ + uECC_vli_clear(product, num_words_secp160r1); + omega_mult_secp160r1(product, tmp + num_words_secp160r1); /* Rq*c */ + carry += uECC_vli_add(result, result, product, num_words_secp160r1); /* (C1, r) = r + Rq*c */ + + while (carry > 0) { + --carry; + uECC_vli_sub(result, result, curve_secp160r1.p, num_words_secp160r1); + } + if (uECC_vli_cmp_unsafe(result, curve_secp160r1.p, num_words_secp160r1) > 0) { + uECC_vli_sub(result, result, curve_secp160r1.p, num_words_secp160r1); + } +} +#endif + +#if uECC_WORD_SIZE == 1 +static void omega_mult_secp160r1(uint8_t *result, const uint8_t *right) { + uint8_t carry; + uint8_t i; + + /* Multiply by (2^31 + 1). */ + uECC_vli_set(result + 4, right, num_words_secp160r1); /* 2^32 */ + uECC_vli_rshift1(result + 4, num_words_secp160r1); /* 2^31 */ + result[3] = right[0] << 7; /* get last bit from shift */ + + carry = uECC_vli_add(result, result, right, num_words_secp160r1); /* 2^31 + 1 */ + for (i = num_words_secp160r1; carry; ++i) { + uint16_t sum = (uint16_t)result[i] + carry; + result[i] = (uint8_t)sum; + carry = sum >> 8; + } +} +#elif uECC_WORD_SIZE == 4 +static void omega_mult_secp160r1(uint32_t *result, const uint32_t *right) { + uint32_t carry; + unsigned i; + + /* Multiply by (2^31 + 1). */ + uECC_vli_set(result + 1, right, num_words_secp160r1); /* 2^32 */ + uECC_vli_rshift1(result + 1, num_words_secp160r1); /* 2^31 */ + result[0] = right[0] << 31; /* get last bit from shift */ + + carry = uECC_vli_add(result, result, right, num_words_secp160r1); /* 2^31 + 1 */ + for (i = num_words_secp160r1; carry; ++i) { + uint64_t sum = (uint64_t)result[i] + carry; + result[i] = (uint32_t)sum; + carry = sum >> 32; + } +} +#endif /* uECC_WORD_SIZE */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp160r1) */ + +#endif /* uECC_SUPPORTS_secp160r1 */ + +#if uECC_SUPPORTS_secp192r1 + +#if (uECC_OPTIMIZATION_LEVEL > 0) +static void vli_mmod_fast_secp192r1(uECC_word_t *result, uECC_word_t *product); +#endif + +static const struct uECC_Curve_t curve_secp192r1 = { + num_words_secp192r1, + num_bytes_secp192r1, + 192, /* num_n_bits */ + { BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FE, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(31, 28, D2, B4, B1, C9, 6B, 14), + BYTES_TO_WORDS_8(36, F8, DE, 99, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(12, 10, FF, 82, FD, 0A, FF, F4), + BYTES_TO_WORDS_8(00, 88, A1, 43, EB, 20, BF, 7C), + BYTES_TO_WORDS_8(F6, 90, 30, B0, 0E, A8, 8D, 18), + + BYTES_TO_WORDS_8(11, 48, 79, 1E, A1, 77, F9, 73), + BYTES_TO_WORDS_8(D5, CD, 24, 6B, ED, 11, 10, 63), + BYTES_TO_WORDS_8(78, DA, C8, FF, 95, 2B, 19, 07) }, + { BYTES_TO_WORDS_8(B1, B9, 46, C1, EC, DE, B8, FE), + BYTES_TO_WORDS_8(49, 30, 24, 72, AB, E9, A7, 0F), + BYTES_TO_WORDS_8(E7, 80, 9C, E5, 19, 05, 21, 64) }, + &double_jacobian_default, +#if uECC_SUPPORT_COMPRESSED_POINT + &mod_sqrt_default, +#endif + &x_side_default, +#if (uECC_OPTIMIZATION_LEVEL > 0) + &vli_mmod_fast_secp192r1 +#endif +}; + +uECC_Curve uECC_secp192r1(void) { return &curve_secp192r1; } + +#if (uECC_OPTIMIZATION_LEVEL > 0) +/* Computes result = product % curve_p. + See algorithm 5 and 6 from http://www.isys.uni-klu.ac.at/PDF/2001-0126-MT.pdf */ +#if uECC_WORD_SIZE == 1 +static void vli_mmod_fast_secp192r1(uint8_t *result, uint8_t *product) { + uint8_t tmp[num_words_secp192r1]; + uint8_t carry; + + uECC_vli_set(result, product, num_words_secp192r1); + + uECC_vli_set(tmp, &product[24], num_words_secp192r1); + carry = uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = tmp[1] = tmp[2] = tmp[3] = tmp[4] = tmp[5] = tmp[6] = tmp[7] = 0; + tmp[8] = product[24]; tmp[9] = product[25]; tmp[10] = product[26]; tmp[11] = product[27]; + tmp[12] = product[28]; tmp[13] = product[29]; tmp[14] = product[30]; tmp[15] = product[31]; + tmp[16] = product[32]; tmp[17] = product[33]; tmp[18] = product[34]; tmp[19] = product[35]; + tmp[20] = product[36]; tmp[21] = product[37]; tmp[22] = product[38]; tmp[23] = product[39]; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = tmp[8] = product[40]; + tmp[1] = tmp[9] = product[41]; + tmp[2] = tmp[10] = product[42]; + tmp[3] = tmp[11] = product[43]; + tmp[4] = tmp[12] = product[44]; + tmp[5] = tmp[13] = product[45]; + tmp[6] = tmp[14] = product[46]; + tmp[7] = tmp[15] = product[47]; + tmp[16] = tmp[17] = tmp[18] = tmp[19] = tmp[20] = tmp[21] = tmp[22] = tmp[23] = 0; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + while (carry || uECC_vli_cmp_unsafe(curve_secp192r1.p, result, num_words_secp192r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp192r1.p, num_words_secp192r1); + } +} +#elif uECC_WORD_SIZE == 4 +static void vli_mmod_fast_secp192r1(uint32_t *result, uint32_t *product) { + uint32_t tmp[num_words_secp192r1]; + int carry; + + uECC_vli_set(result, product, num_words_secp192r1); + + uECC_vli_set(tmp, &product[6], num_words_secp192r1); + carry = uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = tmp[1] = 0; + tmp[2] = product[6]; + tmp[3] = product[7]; + tmp[4] = product[8]; + tmp[5] = product[9]; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = tmp[2] = product[10]; + tmp[1] = tmp[3] = product[11]; + tmp[4] = tmp[5] = 0; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + while (carry || uECC_vli_cmp_unsafe(curve_secp192r1.p, result, num_words_secp192r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp192r1.p, num_words_secp192r1); + } +} +#else +static void vli_mmod_fast_secp192r1(uint64_t *result, uint64_t *product) { + uint64_t tmp[num_words_secp192r1]; + int carry; + + uECC_vli_set(result, product, num_words_secp192r1); + + uECC_vli_set(tmp, &product[3], num_words_secp192r1); + carry = (int)uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = 0; + tmp[1] = product[3]; + tmp[2] = product[4]; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + tmp[0] = tmp[1] = product[5]; + tmp[2] = 0; + carry += uECC_vli_add(result, result, tmp, num_words_secp192r1); + + while (carry || uECC_vli_cmp_unsafe(curve_secp192r1.p, result, num_words_secp192r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp192r1.p, num_words_secp192r1); + } +} +#endif /* uECC_WORD_SIZE */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0) */ + +#endif /* uECC_SUPPORTS_secp192r1 */ + +#if uECC_SUPPORTS_secp224r1 + +#if uECC_SUPPORT_COMPRESSED_POINT +static void mod_sqrt_secp224r1(uECC_word_t *a, uECC_Curve curve); +#endif +#if (uECC_OPTIMIZATION_LEVEL > 0) +static void vli_mmod_fast_secp224r1(uECC_word_t *result, uECC_word_t *product); +#endif + +static const struct uECC_Curve_t curve_secp224r1 = { + num_words_secp224r1, + num_bytes_secp224r1, + 224, /* num_n_bits */ + { BYTES_TO_WORDS_8(01, 00, 00, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_4(FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(3D, 2A, 5C, 5C, 45, 29, DD, 13), + BYTES_TO_WORDS_8(3E, F0, B8, E0, A2, 16, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_4(FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(21, 1D, 5C, 11, D6, 80, 32, 34), + BYTES_TO_WORDS_8(22, 11, C2, 56, D3, C1, 03, 4A), + BYTES_TO_WORDS_8(B9, 90, 13, 32, 7F, BF, B4, 6B), + BYTES_TO_WORDS_4(BD, 0C, 0E, B7), + + BYTES_TO_WORDS_8(34, 7E, 00, 85, 99, 81, D5, 44), + BYTES_TO_WORDS_8(64, 47, 07, 5A, A0, 75, 43, CD), + BYTES_TO_WORDS_8(E6, DF, 22, 4C, FB, 23, F7, B5), + BYTES_TO_WORDS_4(88, 63, 37, BD) }, + { BYTES_TO_WORDS_8(B4, FF, 55, 23, 43, 39, 0B, 27), + BYTES_TO_WORDS_8(BA, D8, BF, D7, B7, B0, 44, 50), + BYTES_TO_WORDS_8(56, 32, 41, F5, AB, B3, 04, 0C), + BYTES_TO_WORDS_4(85, 0A, 05, B4) }, + &double_jacobian_default, +#if uECC_SUPPORT_COMPRESSED_POINT + &mod_sqrt_secp224r1, +#endif + &x_side_default, +#if (uECC_OPTIMIZATION_LEVEL > 0) + &vli_mmod_fast_secp224r1 +#endif +}; + +uECC_Curve uECC_secp224r1(void) { return &curve_secp224r1; } + + +#if uECC_SUPPORT_COMPRESSED_POINT +/* Routine 3.2.4 RS; from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +static void mod_sqrt_secp224r1_rs(uECC_word_t *d1, + uECC_word_t *e1, + uECC_word_t *f1, + const uECC_word_t *d0, + const uECC_word_t *e0, + const uECC_word_t *f0) { + uECC_word_t t[num_words_secp224r1]; + + uECC_vli_modSquare_fast(t, d0, &curve_secp224r1); /* t <-- d0 ^ 2 */ + uECC_vli_modMult_fast(e1, d0, e0, &curve_secp224r1); /* e1 <-- d0 * e0 */ + uECC_vli_modAdd(d1, t, f0, curve_secp224r1.p, num_words_secp224r1); /* d1 <-- t + f0 */ + uECC_vli_modAdd(e1, e1, e1, curve_secp224r1.p, num_words_secp224r1); /* e1 <-- e1 + e1 */ + uECC_vli_modMult_fast(f1, t, f0, &curve_secp224r1); /* f1 <-- t * f0 */ + uECC_vli_modAdd(f1, f1, f1, curve_secp224r1.p, num_words_secp224r1); /* f1 <-- f1 + f1 */ + uECC_vli_modAdd(f1, f1, f1, curve_secp224r1.p, num_words_secp224r1); /* f1 <-- f1 + f1 */ +} + +/* Routine 3.2.5 RSS; from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +static void mod_sqrt_secp224r1_rss(uECC_word_t *d1, + uECC_word_t *e1, + uECC_word_t *f1, + const uECC_word_t *d0, + const uECC_word_t *e0, + const uECC_word_t *f0, + const bitcount_t j) { + bitcount_t i; + + uECC_vli_set(d1, d0, num_words_secp224r1); /* d1 <-- d0 */ + uECC_vli_set(e1, e0, num_words_secp224r1); /* e1 <-- e0 */ + uECC_vli_set(f1, f0, num_words_secp224r1); /* f1 <-- f0 */ + for (i = 1; i <= j; i++) { + mod_sqrt_secp224r1_rs(d1, e1, f1, d1, e1, f1); /* RS (d1,e1,f1,d1,e1,f1) */ + } +} + +/* Routine 3.2.6 RM; from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +static void mod_sqrt_secp224r1_rm(uECC_word_t *d2, + uECC_word_t *e2, + uECC_word_t *f2, + const uECC_word_t *c, + const uECC_word_t *d0, + const uECC_word_t *e0, + const uECC_word_t *d1, + const uECC_word_t *e1) { + uECC_word_t t1[num_words_secp224r1]; + uECC_word_t t2[num_words_secp224r1]; + + uECC_vli_modMult_fast(t1, e0, e1, &curve_secp224r1); /* t1 <-- e0 * e1 */ + uECC_vli_modMult_fast(t1, t1, c, &curve_secp224r1); /* t1 <-- t1 * c */ + /* t1 <-- p - t1 */ + uECC_vli_modSub(t1, curve_secp224r1.p, t1, curve_secp224r1.p, num_words_secp224r1); + uECC_vli_modMult_fast(t2, d0, d1, &curve_secp224r1); /* t2 <-- d0 * d1 */ + uECC_vli_modAdd(t2, t2, t1, curve_secp224r1.p, num_words_secp224r1); /* t2 <-- t2 + t1 */ + uECC_vli_modMult_fast(t1, d0, e1, &curve_secp224r1); /* t1 <-- d0 * e1 */ + uECC_vli_modMult_fast(e2, d1, e0, &curve_secp224r1); /* e2 <-- d1 * e0 */ + uECC_vli_modAdd(e2, e2, t1, curve_secp224r1.p, num_words_secp224r1); /* e2 <-- e2 + t1 */ + uECC_vli_modSquare_fast(f2, e2, &curve_secp224r1); /* f2 <-- e2^2 */ + uECC_vli_modMult_fast(f2, f2, c, &curve_secp224r1); /* f2 <-- f2 * c */ + /* f2 <-- p - f2 */ + uECC_vli_modSub(f2, curve_secp224r1.p, f2, curve_secp224r1.p, num_words_secp224r1); + uECC_vli_set(d2, t2, num_words_secp224r1); /* d2 <-- t2 */ +} + +/* Routine 3.2.7 RP; from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +static void mod_sqrt_secp224r1_rp(uECC_word_t *d1, + uECC_word_t *e1, + uECC_word_t *f1, + const uECC_word_t *c, + const uECC_word_t *r) { + wordcount_t i; + wordcount_t pow2i = 1; + uECC_word_t d0[num_words_secp224r1]; + uECC_word_t e0[num_words_secp224r1] = {1}; /* e0 <-- 1 */ + uECC_word_t f0[num_words_secp224r1]; + + uECC_vli_set(d0, r, num_words_secp224r1); /* d0 <-- r */ + /* f0 <-- p - c */ + uECC_vli_modSub(f0, curve_secp224r1.p, c, curve_secp224r1.p, num_words_secp224r1); + for (i = 0; i <= 6; i++) { + mod_sqrt_secp224r1_rss(d1, e1, f1, d0, e0, f0, pow2i); /* RSS (d1,e1,f1,d0,e0,f0,2^i) */ + mod_sqrt_secp224r1_rm(d1, e1, f1, c, d1, e1, d0, e0); /* RM (d1,e1,f1,c,d1,e1,d0,e0) */ + uECC_vli_set(d0, d1, num_words_secp224r1); /* d0 <-- d1 */ + uECC_vli_set(e0, e1, num_words_secp224r1); /* e0 <-- e1 */ + uECC_vli_set(f0, f1, num_words_secp224r1); /* f0 <-- f1 */ + pow2i *= 2; + } +} + +/* Compute a = sqrt(a) (mod curve_p). */ +/* Routine 3.2.8 mp_mod_sqrt_224; from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +static void mod_sqrt_secp224r1(uECC_word_t *a, uECC_Curve curve) { + bitcount_t i; + uECC_word_t e1[num_words_secp224r1]; + uECC_word_t f1[num_words_secp224r1]; + uECC_word_t d0[num_words_secp224r1]; + uECC_word_t e0[num_words_secp224r1]; + uECC_word_t f0[num_words_secp224r1]; + uECC_word_t d1[num_words_secp224r1]; + + /* s = a; using constant instead of random value */ + mod_sqrt_secp224r1_rp(d0, e0, f0, a, a); /* RP (d0, e0, f0, c, s) */ + mod_sqrt_secp224r1_rs(d1, e1, f1, d0, e0, f0); /* RS (d1, e1, f1, d0, e0, f0) */ + for (i = 1; i <= 95; i++) { + uECC_vli_set(d0, d1, num_words_secp224r1); /* d0 <-- d1 */ + uECC_vli_set(e0, e1, num_words_secp224r1); /* e0 <-- e1 */ + uECC_vli_set(f0, f1, num_words_secp224r1); /* f0 <-- f1 */ + mod_sqrt_secp224r1_rs(d1, e1, f1, d0, e0, f0); /* RS (d1, e1, f1, d0, e0, f0) */ + if (uECC_vli_isZero(d1, num_words_secp224r1)) { /* if d1 == 0 */ + break; + } + } + uECC_vli_modInv(f1, e0, curve_secp224r1.p, num_words_secp224r1); /* f1 <-- 1 / e0 */ + uECC_vli_modMult_fast(a, d0, f1, &curve_secp224r1); /* a <-- d0 / e0 */ +} +#endif /* uECC_SUPPORT_COMPRESSED_POINT */ + +#if (uECC_OPTIMIZATION_LEVEL > 0) +/* Computes result = product % curve_p + from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +#if uECC_WORD_SIZE == 1 +static void vli_mmod_fast_secp224r1(uint8_t *result, uint8_t *product) { + uint8_t tmp[num_words_secp224r1]; + int8_t carry; + + /* t */ + uECC_vli_set(result, product, num_words_secp224r1); + + /* s1 */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = 0; + tmp[4] = tmp[5] = tmp[6] = tmp[7] = 0; + tmp[8] = tmp[9] = tmp[10] = tmp[11] = 0; + tmp[12] = product[28]; tmp[13] = product[29]; tmp[14] = product[30]; tmp[15] = product[31]; + tmp[16] = product[32]; tmp[17] = product[33]; tmp[18] = product[34]; tmp[19] = product[35]; + tmp[20] = product[36]; tmp[21] = product[37]; tmp[22] = product[38]; tmp[23] = product[39]; + tmp[24] = product[40]; tmp[25] = product[41]; tmp[26] = product[42]; tmp[27] = product[43]; + carry = uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* s2 */ + tmp[12] = product[44]; tmp[13] = product[45]; tmp[14] = product[46]; tmp[15] = product[47]; + tmp[16] = product[48]; tmp[17] = product[49]; tmp[18] = product[50]; tmp[19] = product[51]; + tmp[20] = product[52]; tmp[21] = product[53]; tmp[22] = product[54]; tmp[23] = product[55]; + tmp[24] = tmp[25] = tmp[26] = tmp[27] = 0; + carry += uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* d1 */ + tmp[0] = product[28]; tmp[1] = product[29]; tmp[2] = product[30]; tmp[3] = product[31]; + tmp[4] = product[32]; tmp[5] = product[33]; tmp[6] = product[34]; tmp[7] = product[35]; + tmp[8] = product[36]; tmp[9] = product[37]; tmp[10] = product[38]; tmp[11] = product[39]; + tmp[12] = product[40]; tmp[13] = product[41]; tmp[14] = product[42]; tmp[15] = product[43]; + tmp[16] = product[44]; tmp[17] = product[45]; tmp[18] = product[46]; tmp[19] = product[47]; + tmp[20] = product[48]; tmp[21] = product[49]; tmp[22] = product[50]; tmp[23] = product[51]; + tmp[24] = product[52]; tmp[25] = product[53]; tmp[26] = product[54]; tmp[27] = product[55]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + /* d2 */ + tmp[0] = product[44]; tmp[1] = product[45]; tmp[2] = product[46]; tmp[3] = product[47]; + tmp[4] = product[48]; tmp[5] = product[49]; tmp[6] = product[50]; tmp[7] = product[51]; + tmp[8] = product[52]; tmp[9] = product[53]; tmp[10] = product[54]; tmp[11] = product[55]; + tmp[12] = tmp[13] = tmp[14] = tmp[15] = 0; + tmp[16] = tmp[17] = tmp[18] = tmp[19] = 0; + tmp[20] = tmp[21] = tmp[22] = tmp[23] = 0; + tmp[24] = tmp[25] = tmp[26] = tmp[27] = 0; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp224r1.p, num_words_secp224r1); + } while (carry < 0); + } else { + while (carry || uECC_vli_cmp_unsafe(curve_secp224r1.p, result, num_words_secp224r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp224r1.p, num_words_secp224r1); + } + } +} +#elif uECC_WORD_SIZE == 4 +static void vli_mmod_fast_secp224r1(uint32_t *result, uint32_t *product) +{ + uint32_t tmp[num_words_secp224r1]; + int carry; + + /* t */ + uECC_vli_set(result, product, num_words_secp224r1); + + /* s1 */ + tmp[0] = tmp[1] = tmp[2] = 0; + tmp[3] = product[7]; + tmp[4] = product[8]; + tmp[5] = product[9]; + tmp[6] = product[10]; + carry = uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* s2 */ + tmp[3] = product[11]; + tmp[4] = product[12]; + tmp[5] = product[13]; + tmp[6] = 0; + carry += uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* d1 */ + tmp[0] = product[7]; + tmp[1] = product[8]; + tmp[2] = product[9]; + tmp[3] = product[10]; + tmp[4] = product[11]; + tmp[5] = product[12]; + tmp[6] = product[13]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + /* d2 */ + tmp[0] = product[11]; + tmp[1] = product[12]; + tmp[2] = product[13]; + tmp[3] = tmp[4] = tmp[5] = tmp[6] = 0; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp224r1.p, num_words_secp224r1); + } while (carry < 0); + } else { + while (carry || uECC_vli_cmp_unsafe(curve_secp224r1.p, result, num_words_secp224r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp224r1.p, num_words_secp224r1); + } + } +} +#else +static void vli_mmod_fast_secp224r1(uint64_t *result, uint64_t *product) +{ + uint64_t tmp[num_words_secp224r1]; + int carry = 0; + + /* t */ + uECC_vli_set(result, product, num_words_secp224r1); + result[num_words_secp224r1 - 1] &= 0xffffffff; + + /* s1 */ + tmp[0] = 0; + tmp[1] = product[3] & 0xffffffff00000000ull; + tmp[2] = product[4]; + tmp[3] = product[5] & 0xffffffff; + uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* s2 */ + tmp[1] = product[5] & 0xffffffff00000000ull; + tmp[2] = product[6]; + tmp[3] = 0; + uECC_vli_add(result, result, tmp, num_words_secp224r1); + + /* d1 */ + tmp[0] = (product[3] >> 32) | (product[4] << 32); + tmp[1] = (product[4] >> 32) | (product[5] << 32); + tmp[2] = (product[5] >> 32) | (product[6] << 32); + tmp[3] = product[6] >> 32; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + /* d2 */ + tmp[0] = (product[5] >> 32) | (product[6] << 32); + tmp[1] = product[6] >> 32; + tmp[2] = tmp[3] = 0; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp224r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp224r1.p, num_words_secp224r1); + } while (carry < 0); + } else { + while (uECC_vli_cmp_unsafe(curve_secp224r1.p, result, num_words_secp224r1) != 1) { + uECC_vli_sub(result, result, curve_secp224r1.p, num_words_secp224r1); + } + } +} +#endif /* uECC_WORD_SIZE */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0) */ + +#endif /* uECC_SUPPORTS_secp224r1 */ + +#if uECC_SUPPORTS_secp256r1 + +#if (uECC_OPTIMIZATION_LEVEL > 0) +static void vli_mmod_fast_secp256r1(uECC_word_t *result, uECC_word_t *product); +#endif + +static const struct uECC_Curve_t curve_secp256r1 = { + num_words_secp256r1, + num_bytes_secp256r1, + 256, /* num_n_bits */ + { BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(01, 00, 00, 00, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(51, 25, 63, FC, C2, CA, B9, F3), + BYTES_TO_WORDS_8(84, 9E, 17, A7, AD, FA, E6, BC), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(00, 00, 00, 00, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(96, C2, 98, D8, 45, 39, A1, F4), + BYTES_TO_WORDS_8(A0, 33, EB, 2D, 81, 7D, 03, 77), + BYTES_TO_WORDS_8(F2, 40, A4, 63, E5, E6, BC, F8), + BYTES_TO_WORDS_8(47, 42, 2C, E1, F2, D1, 17, 6B), + + BYTES_TO_WORDS_8(F5, 51, BF, 37, 68, 40, B6, CB), + BYTES_TO_WORDS_8(CE, 5E, 31, 6B, 57, 33, CE, 2B), + BYTES_TO_WORDS_8(16, 9E, 0F, 7C, 4A, EB, E7, 8E), + BYTES_TO_WORDS_8(9B, 7F, 1A, FE, E2, 42, E3, 4F) }, + { BYTES_TO_WORDS_8(4B, 60, D2, 27, 3E, 3C, CE, 3B), + BYTES_TO_WORDS_8(F6, B0, 53, CC, B0, 06, 1D, 65), + BYTES_TO_WORDS_8(BC, 86, 98, 76, 55, BD, EB, B3), + BYTES_TO_WORDS_8(E7, 93, 3A, AA, D8, 35, C6, 5A) }, + &double_jacobian_default, +#if uECC_SUPPORT_COMPRESSED_POINT + &mod_sqrt_default, +#endif + &x_side_default, +#if (uECC_OPTIMIZATION_LEVEL > 0) + &vli_mmod_fast_secp256r1 +#endif +}; + +uECC_Curve uECC_secp256r1(void) { return &curve_secp256r1; } + + +#if (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp256r1) +/* Computes result = product % curve_p + from http://www.nsa.gov/ia/_files/nist-routines.pdf */ +#if uECC_WORD_SIZE == 1 +static void vli_mmod_fast_secp256r1(uint8_t *result, uint8_t *product) { + uint8_t tmp[num_words_secp256r1]; + int8_t carry; + + /* t */ + uECC_vli_set(result, product, num_words_secp256r1); + + /* s1 */ + tmp[0] = tmp[1] = tmp[2] = tmp[3] = 0; + tmp[4] = tmp[5] = tmp[6] = tmp[7] = 0; + tmp[8] = tmp[9] = tmp[10] = tmp[11] = 0; + tmp[12] = product[44]; tmp[13] = product[45]; tmp[14] = product[46]; tmp[15] = product[47]; + tmp[16] = product[48]; tmp[17] = product[49]; tmp[18] = product[50]; tmp[19] = product[51]; + tmp[20] = product[52]; tmp[21] = product[53]; tmp[22] = product[54]; tmp[23] = product[55]; + tmp[24] = product[56]; tmp[25] = product[57]; tmp[26] = product[58]; tmp[27] = product[59]; + tmp[28] = product[60]; tmp[29] = product[61]; tmp[30] = product[62]; tmp[31] = product[63]; + carry = uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s2 */ + tmp[12] = product[48]; tmp[13] = product[49]; tmp[14] = product[50]; tmp[15] = product[51]; + tmp[16] = product[52]; tmp[17] = product[53]; tmp[18] = product[54]; tmp[19] = product[55]; + tmp[20] = product[56]; tmp[21] = product[57]; tmp[22] = product[58]; tmp[23] = product[59]; + tmp[24] = product[60]; tmp[25] = product[61]; tmp[26] = product[62]; tmp[27] = product[63]; + tmp[28] = tmp[29] = tmp[30] = tmp[31] = 0; + carry += uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s3 */ + tmp[0] = product[32]; tmp[1] = product[33]; tmp[2] = product[34]; tmp[3] = product[35]; + tmp[4] = product[36]; tmp[5] = product[37]; tmp[6] = product[38]; tmp[7] = product[39]; + tmp[8] = product[40]; tmp[9] = product[41]; tmp[10] = product[42]; tmp[11] = product[43]; + tmp[12] = tmp[13] = tmp[14] = tmp[15] = 0; + tmp[16] = tmp[17] = tmp[18] = tmp[19] = 0; + tmp[20] = tmp[21] = tmp[22] = tmp[23] = 0; + tmp[24] = product[56]; tmp[25] = product[57]; tmp[26] = product[58]; tmp[27] = product[59]; + tmp[28] = product[60]; tmp[29] = product[61]; tmp[30] = product[62]; tmp[31] = product[63]; + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s4 */ + tmp[0] = product[36]; tmp[1] = product[37]; tmp[2] = product[38]; tmp[3] = product[39]; + tmp[4] = product[40]; tmp[5] = product[41]; tmp[6] = product[42]; tmp[7] = product[43]; + tmp[8] = product[44]; tmp[9] = product[45]; tmp[10] = product[46]; tmp[11] = product[47]; + tmp[12] = product[52]; tmp[13] = product[53]; tmp[14] = product[54]; tmp[15] = product[55]; + tmp[16] = product[56]; tmp[17] = product[57]; tmp[18] = product[58]; tmp[19] = product[59]; + tmp[20] = product[60]; tmp[21] = product[61]; tmp[22] = product[62]; tmp[23] = product[63]; + tmp[24] = product[52]; tmp[25] = product[53]; tmp[26] = product[54]; tmp[27] = product[55]; + tmp[28] = product[32]; tmp[29] = product[33]; tmp[30] = product[34]; tmp[31] = product[35]; + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* d1 */ + tmp[0] = product[44]; tmp[1] = product[45]; tmp[2] = product[46]; tmp[3] = product[47]; + tmp[4] = product[48]; tmp[5] = product[49]; tmp[6] = product[50]; tmp[7] = product[51]; + tmp[8] = product[52]; tmp[9] = product[53]; tmp[10] = product[54]; tmp[11] = product[55]; + tmp[12] = tmp[13] = tmp[14] = tmp[15] = 0; + tmp[16] = tmp[17] = tmp[18] = tmp[19] = 0; + tmp[20] = tmp[21] = tmp[22] = tmp[23] = 0; + tmp[24] = product[32]; tmp[25] = product[33]; tmp[26] = product[34]; tmp[27] = product[35]; + tmp[28] = product[40]; tmp[29] = product[41]; tmp[30] = product[42]; tmp[31] = product[43]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d2 */ + tmp[0] = product[48]; tmp[1] = product[49]; tmp[2] = product[50]; tmp[3] = product[51]; + tmp[4] = product[52]; tmp[5] = product[53]; tmp[6] = product[54]; tmp[7] = product[55]; + tmp[8] = product[56]; tmp[9] = product[57]; tmp[10] = product[58]; tmp[11] = product[59]; + tmp[12] = product[60]; tmp[13] = product[61]; tmp[14] = product[62]; tmp[15] = product[63]; + tmp[16] = tmp[17] = tmp[18] = tmp[19] = 0; + tmp[20] = tmp[21] = tmp[22] = tmp[23] = 0; + tmp[24] = product[36]; tmp[25] = product[37]; tmp[26] = product[38]; tmp[27] = product[39]; + tmp[28] = product[44]; tmp[29] = product[45]; tmp[30] = product[46]; tmp[31] = product[47]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d3 */ + tmp[0] = product[52]; tmp[1] = product[53]; tmp[2] = product[54]; tmp[3] = product[55]; + tmp[4] = product[56]; tmp[5] = product[57]; tmp[6] = product[58]; tmp[7] = product[59]; + tmp[8] = product[60]; tmp[9] = product[61]; tmp[10] = product[62]; tmp[11] = product[63]; + tmp[12] = product[32]; tmp[13] = product[33]; tmp[14] = product[34]; tmp[15] = product[35]; + tmp[16] = product[36]; tmp[17] = product[37]; tmp[18] = product[38]; tmp[19] = product[39]; + tmp[20] = product[40]; tmp[21] = product[41]; tmp[22] = product[42]; tmp[23] = product[43]; + tmp[24] = tmp[25] = tmp[26] = tmp[27] = 0; + tmp[28] = product[48]; tmp[29] = product[49]; tmp[30] = product[50]; tmp[31] = product[51]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d4 */ + tmp[0] = product[56]; tmp[1] = product[57]; tmp[2] = product[58]; tmp[3] = product[59]; + tmp[4] = product[60]; tmp[5] = product[61]; tmp[6] = product[62]; tmp[7] = product[63]; + tmp[8] = tmp[9] = tmp[10] = tmp[11] = 0; + tmp[12] = product[36]; tmp[13] = product[37]; tmp[14] = product[38]; tmp[15] = product[39]; + tmp[16] = product[40]; tmp[17] = product[41]; tmp[18] = product[42]; tmp[19] = product[43]; + tmp[20] = product[44]; tmp[21] = product[45]; tmp[22] = product[46]; tmp[23] = product[47]; + tmp[24] = tmp[25] = tmp[26] = tmp[27] = 0; + tmp[28] = product[52]; tmp[29] = product[53]; tmp[30] = product[54]; tmp[31] = product[55]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp256r1.p, num_words_secp256r1); + } while (carry < 0); + } else { + while (carry || uECC_vli_cmp_unsafe(curve_secp256r1.p, result, num_words_secp256r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp256r1.p, num_words_secp256r1); + } + } +} +#elif uECC_WORD_SIZE == 4 +static void vli_mmod_fast_secp256r1(uint32_t *result, uint32_t *product) { + uint32_t tmp[num_words_secp256r1]; + int carry; + + /* t */ + uECC_vli_set(result, product, num_words_secp256r1); + + /* s1 */ + tmp[0] = tmp[1] = tmp[2] = 0; + tmp[3] = product[11]; + tmp[4] = product[12]; + tmp[5] = product[13]; + tmp[6] = product[14]; + tmp[7] = product[15]; + carry = uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s2 */ + tmp[3] = product[12]; + tmp[4] = product[13]; + tmp[5] = product[14]; + tmp[6] = product[15]; + tmp[7] = 0; + carry += uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s3 */ + tmp[0] = product[8]; + tmp[1] = product[9]; + tmp[2] = product[10]; + tmp[3] = tmp[4] = tmp[5] = 0; + tmp[6] = product[14]; + tmp[7] = product[15]; + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s4 */ + tmp[0] = product[9]; + tmp[1] = product[10]; + tmp[2] = product[11]; + tmp[3] = product[13]; + tmp[4] = product[14]; + tmp[5] = product[15]; + tmp[6] = product[13]; + tmp[7] = product[8]; + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* d1 */ + tmp[0] = product[11]; + tmp[1] = product[12]; + tmp[2] = product[13]; + tmp[3] = tmp[4] = tmp[5] = 0; + tmp[6] = product[8]; + tmp[7] = product[10]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d2 */ + tmp[0] = product[12]; + tmp[1] = product[13]; + tmp[2] = product[14]; + tmp[3] = product[15]; + tmp[4] = tmp[5] = 0; + tmp[6] = product[9]; + tmp[7] = product[11]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d3 */ + tmp[0] = product[13]; + tmp[1] = product[14]; + tmp[2] = product[15]; + tmp[3] = product[8]; + tmp[4] = product[9]; + tmp[5] = product[10]; + tmp[6] = 0; + tmp[7] = product[12]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d4 */ + tmp[0] = product[14]; + tmp[1] = product[15]; + tmp[2] = 0; + tmp[3] = product[9]; + tmp[4] = product[10]; + tmp[5] = product[11]; + tmp[6] = 0; + tmp[7] = product[13]; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp256r1.p, num_words_secp256r1); + } while (carry < 0); + } else { + while (carry || uECC_vli_cmp_unsafe(curve_secp256r1.p, result, num_words_secp256r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp256r1.p, num_words_secp256r1); + } + } +} +#else +static void vli_mmod_fast_secp256r1(uint64_t *result, uint64_t *product) { + uint64_t tmp[num_words_secp256r1]; + int carry; + + /* t */ + uECC_vli_set(result, product, num_words_secp256r1); + + /* s1 */ + tmp[0] = 0; + tmp[1] = product[5] & 0xffffffff00000000ull; + tmp[2] = product[6]; + tmp[3] = product[7]; + carry = (int)uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s2 */ + tmp[1] = product[6] << 32; + tmp[2] = (product[6] >> 32) | (product[7] << 32); + tmp[3] = product[7] >> 32; + carry += uECC_vli_add(tmp, tmp, tmp, num_words_secp256r1); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s3 */ + tmp[0] = product[4]; + tmp[1] = product[5] & 0xffffffff; + tmp[2] = 0; + tmp[3] = product[7]; + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* s4 */ + tmp[0] = (product[4] >> 32) | (product[5] << 32); + tmp[1] = (product[5] >> 32) | (product[6] & 0xffffffff00000000ull); + tmp[2] = product[7]; + tmp[3] = (product[6] >> 32) | (product[4] << 32); + carry += uECC_vli_add(result, result, tmp, num_words_secp256r1); + + /* d1 */ + tmp[0] = (product[5] >> 32) | (product[6] << 32); + tmp[1] = (product[6] >> 32); + tmp[2] = 0; + tmp[3] = (product[4] & 0xffffffff) | (product[5] << 32); + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d2 */ + tmp[0] = product[6]; + tmp[1] = product[7]; + tmp[2] = 0; + tmp[3] = (product[4] >> 32) | (product[5] & 0xffffffff00000000ull); + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d3 */ + tmp[0] = (product[6] >> 32) | (product[7] << 32); + tmp[1] = (product[7] >> 32) | (product[4] << 32); + tmp[2] = (product[4] >> 32) | (product[5] << 32); + tmp[3] = (product[6] << 32); + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + /* d4 */ + tmp[0] = product[7]; + tmp[1] = product[4] & 0xffffffff00000000ull; + tmp[2] = product[5]; + tmp[3] = product[6] & 0xffffffff00000000ull; + carry -= uECC_vli_sub(result, result, tmp, num_words_secp256r1); + + if (carry < 0) { + do { + carry += uECC_vli_add(result, result, curve_secp256r1.p, num_words_secp256r1); + } while (carry < 0); + } else { + while (carry || uECC_vli_cmp_unsafe(curve_secp256r1.p, result, num_words_secp256r1) != 1) { + carry -= uECC_vli_sub(result, result, curve_secp256r1.p, num_words_secp256r1); + } + } +} +#endif /* uECC_WORD_SIZE */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp256r1) */ + +#endif /* uECC_SUPPORTS_secp256r1 */ + +#if uECC_SUPPORTS_secp256k1 + +static void double_jacobian_secp256k1(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * Z1, + uECC_Curve curve); +static void x_side_secp256k1(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve); +#if (uECC_OPTIMIZATION_LEVEL > 0) +static void vli_mmod_fast_secp256k1(uECC_word_t *result, uECC_word_t *product); +#endif + +static const struct uECC_Curve_t curve_secp256k1 = { + num_words_secp256k1, + num_bytes_secp256k1, + 256, /* num_n_bits */ + { BYTES_TO_WORDS_8(2F, FC, FF, FF, FE, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(41, 41, 36, D0, 8C, 5E, D2, BF), + BYTES_TO_WORDS_8(3B, A0, 48, AF, E6, DC, AE, BA), + BYTES_TO_WORDS_8(FE, FF, FF, FF, FF, FF, FF, FF), + BYTES_TO_WORDS_8(FF, FF, FF, FF, FF, FF, FF, FF) }, + { BYTES_TO_WORDS_8(98, 17, F8, 16, 5B, 81, F2, 59), + BYTES_TO_WORDS_8(D9, 28, CE, 2D, DB, FC, 9B, 02), + BYTES_TO_WORDS_8(07, 0B, 87, CE, 95, 62, A0, 55), + BYTES_TO_WORDS_8(AC, BB, DC, F9, 7E, 66, BE, 79), + + BYTES_TO_WORDS_8(B8, D4, 10, FB, 8F, D0, 47, 9C), + BYTES_TO_WORDS_8(19, 54, 85, A6, 48, B4, 17, FD), + BYTES_TO_WORDS_8(A8, 08, 11, 0E, FC, FB, A4, 5D), + BYTES_TO_WORDS_8(65, C4, A3, 26, 77, DA, 3A, 48) }, + { BYTES_TO_WORDS_8(07, 00, 00, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, 00, 00, 00, 00), + BYTES_TO_WORDS_8(00, 00, 00, 00, 00, 00, 00, 00) }, + &double_jacobian_secp256k1, +#if uECC_SUPPORT_COMPRESSED_POINT + &mod_sqrt_default, +#endif + &x_side_secp256k1, +#if (uECC_OPTIMIZATION_LEVEL > 0) + &vli_mmod_fast_secp256k1 +#endif +}; + +uECC_Curve uECC_secp256k1(void) { return &curve_secp256k1; } + + +/* Double in place */ +static void double_jacobian_secp256k1(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * Z1, + uECC_Curve curve) { + /* t1 = X, t2 = Y, t3 = Z */ + uECC_word_t t4[num_words_secp256k1]; + uECC_word_t t5[num_words_secp256k1]; + + if (uECC_vli_isZero(Z1, num_words_secp256k1)) { + return; + } + + uECC_vli_modSquare_fast(t5, Y1, curve); /* t5 = y1^2 */ + uECC_vli_modMult_fast(t4, X1, t5, curve); /* t4 = x1*y1^2 = A */ + uECC_vli_modSquare_fast(X1, X1, curve); /* t1 = x1^2 */ + uECC_vli_modSquare_fast(t5, t5, curve); /* t5 = y1^4 */ + uECC_vli_modMult_fast(Z1, Y1, Z1, curve); /* t3 = y1*z1 = z3 */ + + uECC_vli_modAdd(Y1, X1, X1, curve->p, num_words_secp256k1); /* t2 = 2*x1^2 */ + uECC_vli_modAdd(Y1, Y1, X1, curve->p, num_words_secp256k1); /* t2 = 3*x1^2 */ + if (uECC_vli_testBit(Y1, 0)) { + uECC_word_t carry = uECC_vli_add(Y1, Y1, curve->p, num_words_secp256k1); + uECC_vli_rshift1(Y1, num_words_secp256k1); + Y1[num_words_secp256k1 - 1] |= carry << (uECC_WORD_BITS - 1); + } else { + uECC_vli_rshift1(Y1, num_words_secp256k1); + } + /* t2 = 3/2*(x1^2) = B */ + + uECC_vli_modSquare_fast(X1, Y1, curve); /* t1 = B^2 */ + uECC_vli_modSub(X1, X1, t4, curve->p, num_words_secp256k1); /* t1 = B^2 - A */ + uECC_vli_modSub(X1, X1, t4, curve->p, num_words_secp256k1); /* t1 = B^2 - 2A = x3 */ + + uECC_vli_modSub(t4, t4, X1, curve->p, num_words_secp256k1); /* t4 = A - x3 */ + uECC_vli_modMult_fast(Y1, Y1, t4, curve); /* t2 = B * (A - x3) */ + uECC_vli_modSub(Y1, Y1, t5, curve->p, num_words_secp256k1); /* t2 = B * (A - x3) - y1^4 = y3 */ +} + +/* Computes result = x^3 + b. result must not overlap x. */ +static void x_side_secp256k1(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve) { + uECC_vli_modSquare_fast(result, x, curve); /* r = x^2 */ + uECC_vli_modMult_fast(result, result, x, curve); /* r = x^3 */ + uECC_vli_modAdd(result, result, curve->b, curve->p, num_words_secp256k1); /* r = x^3 + b */ +} + +#if (uECC_OPTIMIZATION_LEVEL > 0 && !asm_mmod_fast_secp256k1) +static void omega_mult_secp256k1(uECC_word_t *result, const uECC_word_t *right); +static void vli_mmod_fast_secp256k1(uECC_word_t *result, uECC_word_t *product) { + uECC_word_t tmp[2 * num_words_secp256k1]; + uECC_word_t carry; + + uECC_vli_clear(tmp, num_words_secp256k1); + uECC_vli_clear(tmp + num_words_secp256k1, num_words_secp256k1); + + omega_mult_secp256k1(tmp, product + num_words_secp256k1); /* (Rq, q) = q * c */ + + carry = uECC_vli_add(result, product, tmp, num_words_secp256k1); /* (C, r) = r + q */ + uECC_vli_clear(product, num_words_secp256k1); + omega_mult_secp256k1(product, tmp + num_words_secp256k1); /* Rq*c */ + carry += uECC_vli_add(result, result, product, num_words_secp256k1); /* (C1, r) = r + Rq*c */ + + while (carry > 0) { + --carry; + uECC_vli_sub(result, result, curve_secp256k1.p, num_words_secp256k1); + } + if (uECC_vli_cmp_unsafe(result, curve_secp256k1.p, num_words_secp256k1) > 0) { + uECC_vli_sub(result, result, curve_secp256k1.p, num_words_secp256k1); + } +} + +#if uECC_WORD_SIZE == 1 +static void omega_mult_secp256k1(uint8_t * result, const uint8_t * right) { + /* Multiply by (2^32 + 2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1). */ + uECC_word_t r0 = 0; + uECC_word_t r1 = 0; + uECC_word_t r2 = 0; + wordcount_t k; + + /* Multiply by (2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1). */ + muladd(0xD1, right[0], &r0, &r1, &r2); + result[0] = r0; + r0 = r1; + r1 = r2; + /* r2 is still 0 */ + + for (k = 1; k < num_words_secp256k1; ++k) { + muladd(0x03, right[k - 1], &r0, &r1, &r2); + muladd(0xD1, right[k], &r0, &r1, &r2); + result[k] = r0; + r0 = r1; + r1 = r2; + r2 = 0; + } + muladd(0x03, right[num_words_secp256k1 - 1], &r0, &r1, &r2); + result[num_words_secp256k1] = r0; + result[num_words_secp256k1 + 1] = r1; + /* add the 2^32 multiple */ + result[4 + num_words_secp256k1] = + uECC_vli_add(result + 4, result + 4, right, num_words_secp256k1); +} +#elif uECC_WORD_SIZE == 4 +static void omega_mult_secp256k1(uint32_t * result, const uint32_t * right) { + /* Multiply by (2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1). */ + uint32_t carry = 0; + wordcount_t k; + + for (k = 0; k < num_words_secp256k1; ++k) { + uint64_t p = (uint64_t)0x3D1 * right[k] + carry; + result[k] = (uint32_t) p; + carry = p >> 32; + } + result[num_words_secp256k1] = carry; + /* add the 2^32 multiple */ + result[1 + num_words_secp256k1] = + uECC_vli_add(result + 1, result + 1, right, num_words_secp256k1); +} +#else +static void omega_mult_secp256k1(uint64_t * result, const uint64_t * right) { + uECC_word_t r0 = 0; + uECC_word_t r1 = 0; + uECC_word_t r2 = 0; + wordcount_t k; + + /* Multiply by (2^32 + 2^9 + 2^8 + 2^7 + 2^6 + 2^4 + 1). */ + for (k = 0; k < num_words_secp256k1; ++k) { + muladd(0x1000003D1ull, right[k], &r0, &r1, &r2); + result[k] = r0; + r0 = r1; + r1 = r2; + r2 = 0; + } + result[num_words_secp256k1] = r0; +} +#endif /* uECC_WORD_SIZE */ +#endif /* (uECC_OPTIMIZATION_LEVEL > 0 && && !asm_mmod_fast_secp256k1) */ + +#endif /* uECC_SUPPORTS_secp256k1 */ + +#endif /* _UECC_CURVE_SPECIFIC_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/main.c new file mode 100644 index 0000000000..a484beed50 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/main.c @@ -0,0 +1,143 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +int test_ecdsa(void) +{ + int i, c; + uint8_t private[32] = {0}; + uint8_t public[64] = {0}; + uint8_t hash[32] = {0}; + uint8_t sig[64] = {0}; + + const struct uECC_Curve_t * curves[5]; + int num_curves = 0; +#if uECC_SUPPORTS_secp160r1 + curves[num_curves++] = uECC_secp160r1(); +#endif +#if uECC_SUPPORTS_secp192r1 + curves[num_curves++] = uECC_secp192r1(); +#endif +#if uECC_SUPPORTS_secp224r1 + curves[num_curves++] = uECC_secp224r1(); +#endif +#if uECC_SUPPORTS_secp256r1 + curves[num_curves++] = uECC_secp256r1(); +#endif +#if uECC_SUPPORTS_secp256k1 + curves[num_curves++] = uECC_secp256k1(); +#endif + + printf("Testing 256 signatures\r\n"); + for (c = 0; c < num_curves; ++c) + { + for (i = 0; i < 1; ++i) { + + printf("uECC_make_key()\r\n"); + + if (!uECC_make_key(public, private, curves[c])) + { + printf("uECC_make_key() failed\r\n"); + return 1; + } + memcpy(hash, public, sizeof(hash)); + + printf("uECC_sign()\r\n"); + + if (!uECC_sign(private, hash, sizeof(hash), sig, curves[c])) + { + printf("uECC_sign() failed\r\n"); + return 1; + } + + printf("uECC_verify()\r\n"); + + if (!uECC_verify(public, hash, sizeof(hash), sig, curves[c])) + { + printf("uECC_verify() failed\r\n"); + return 1; + } + } + printf("done\r\n"); +} + + return 0; +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + /* Clock initialization */ + Clock_Init(); + /* Print initialization */ + Stdio_Init(); + + test_ecdsa(); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/platform-specific.inc b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/platform-specific.inc new file mode 100644 index 0000000000..448515a782 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/platform-specific.inc @@ -0,0 +1,86 @@ +/* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */ + +#ifndef _UECC_PLATFORM_SPECIFIC_H_ +#define _UECC_PLATFORM_SPECIFIC_H_ + +#include "types.h" + +#if (defined(_WIN32) || defined(_WIN64)) +/* Windows */ + +#define WIN32_LEAN_AND_MEAN +#include +#include + +static int default_RNG(uint8_t *dest, unsigned size) { + HCRYPTPROV prov; + if (!CryptAcquireContext(&prov, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFYCONTEXT)) { + return 0; + } + + CryptGenRandom(prov, size, (BYTE *)dest); + CryptReleaseContext(prov, 0); + return 1; +} +#define default_RNG_defined 1 + +#elif defined(unix) || defined(__linux__) || defined(__unix__) || defined(__unix) || \ + (defined(__APPLE__) && defined(__MACH__)) || defined(uECC_POSIX) + +/* Some POSIX-like system with /dev/urandom or /dev/random. */ +#include +#include +#include + +#ifndef O_CLOEXEC + #define O_CLOEXEC 0 +#endif + +static int default_RNG(uint8_t *dest, unsigned size) { + int fd = open("/dev/urandom", O_RDONLY | O_CLOEXEC); + if (fd == -1) { + fd = open("/dev/random", O_RDONLY | O_CLOEXEC); + if (fd == -1) { + return 0; + } + } + + char *ptr = (char *)dest; + size_t left = size; + while (left > 0) { + ssize_t bytes_read = read(fd, ptr, left); + if (bytes_read <= 0) { // read failed + close(fd); + return 0; + } + left -= bytes_read; + ptr += bytes_read; + } + + close(fd); + return 1; +} +#define default_RNG_defined 1 + +#else + +// ycliao +static int default_RNG(uint8_t *dest, unsigned size) { + + unsigned i = 0; + char *ptr = (char *)dest; + unsigned left = size; + while (left > 0) { + *ptr = i++; + left -= 1; + ptr += 1; + } + + return 1; +} + +#define default_RNG_defined 1 + +#endif /* platform */ + +#endif /* _UECC_PLATFORM_SPECIFIC_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/target_isr.c new file mode 100644 index 0000000000..e72ff03e05 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/types.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/types.h new file mode 100644 index 0000000000..9ee81438fa --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/types.h @@ -0,0 +1,108 @@ +/* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */ + +#ifndef _UECC_TYPES_H_ +#define _UECC_TYPES_H_ + +#ifndef uECC_PLATFORM + #if __AVR__ + #define uECC_PLATFORM uECC_avr + #elif defined(__thumb2__) || defined(_M_ARMT) /* I think MSVC only supports Thumb-2 targets */ + #define uECC_PLATFORM uECC_arm_thumb2 + #elif defined(__thumb__) + #define uECC_PLATFORM uECC_arm_thumb + #elif defined(__arm__) || defined(_M_ARM) + #define uECC_PLATFORM uECC_arm + #elif defined(__aarch64__) + #define uECC_PLATFORM uECC_arm64 + #elif defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__I86__) + #define uECC_PLATFORM uECC_x86 + #elif defined(__amd64__) || defined(_M_X64) + #define uECC_PLATFORM uECC_x86_64 + #else + #define uECC_PLATFORM uECC_arch_other + #endif +#endif + +#ifndef uECC_ARM_USE_UMAAL + #if (uECC_PLATFORM == uECC_arm) && (__ARM_ARCH >= 6) + #define uECC_ARM_USE_UMAAL 1 + #elif (uECC_PLATFORM == uECC_arm_thumb2) && (__ARM_ARCH >= 6) && !__ARM_ARCH_7M__ + #define uECC_ARM_USE_UMAAL 1 + #else + #define uECC_ARM_USE_UMAAL 0 + #endif +#endif + +#ifndef uECC_WORD_SIZE + #if uECC_PLATFORM == uECC_avr + #define uECC_WORD_SIZE 1 + #elif (uECC_PLATFORM == uECC_x86_64 || uECC_PLATFORM == uECC_arm64) + #define uECC_WORD_SIZE 8 + #else + #define uECC_WORD_SIZE 4 + #endif +#endif + +#if (uECC_WORD_SIZE != 1) && (uECC_WORD_SIZE != 4) && (uECC_WORD_SIZE != 8) + #error "Unsupported value for uECC_WORD_SIZE" +#endif + +#if ((uECC_PLATFORM == uECC_avr) && (uECC_WORD_SIZE != 1)) + #pragma message ("uECC_WORD_SIZE must be 1 for AVR") + #undef uECC_WORD_SIZE + #define uECC_WORD_SIZE 1 +#endif + +#if ((uECC_PLATFORM == uECC_arm || uECC_PLATFORM == uECC_arm_thumb || \ + uECC_PLATFORM == uECC_arm_thumb2) && \ + (uECC_WORD_SIZE != 4)) + #pragma message ("uECC_WORD_SIZE must be 4 for ARM") + #undef uECC_WORD_SIZE + #define uECC_WORD_SIZE 4 +#endif + +#if defined(__SIZEOF_INT128__) || ((__clang_major__ * 100 + __clang_minor__) >= 302) + #define SUPPORTS_INT128 1 +#else + #define SUPPORTS_INT128 0 +#endif + +typedef int8_t wordcount_t; +typedef int16_t bitcount_t; +typedef int8_t cmpresult_t; + +#if (uECC_WORD_SIZE == 1) + +typedef uint8_t uECC_word_t; +typedef uint16_t uECC_dword_t; + +#define HIGH_BIT_SET 0x80 +#define uECC_WORD_BITS 8 +#define uECC_WORD_BITS_SHIFT 3 +#define uECC_WORD_BITS_MASK 0x07 + +#elif (uECC_WORD_SIZE == 4) + +typedef uint32_t uECC_word_t; +typedef uint64_t uECC_dword_t; + +#define HIGH_BIT_SET 0x80000000 +#define uECC_WORD_BITS 32 +#define uECC_WORD_BITS_SHIFT 5 +#define uECC_WORD_BITS_MASK 0x01F + +#elif (uECC_WORD_SIZE == 8) + +typedef uint64_t uECC_word_t; +#if SUPPORTS_INT128 +typedef unsigned __int128 uECC_dword_t; +#endif + +#define HIGH_BIT_SET 0x8000000000000000ull +#define uECC_WORD_BITS 64 +#define uECC_WORD_BITS_SHIFT 6 +#define uECC_WORD_BITS_MASK 0x03F + +#endif /* uECC_WORD_SIZE */ + +#endif /* _UECC_TYPES_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.c new file mode 100644 index 0000000000..b7bfc7ff92 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.c @@ -0,0 +1,1882 @@ +/** + ****************************************************************************** + * @file uECC.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +#include "main.h" +#include "uECC.h" +#include "uECC_vli.h" + +#define HW_CRYPT_ACC /* Hardware Crypto accelerator */ +//#define TOGGLE_IO /* Toggle IO for debug */ + +#ifndef uECC_RNG_MAX_TRIES + #define uECC_RNG_MAX_TRIES 64 +#endif + +#if uECC_ENABLE_VLI_API + #define uECC_VLI_API +#else + #define uECC_VLI_API static +#endif + +#define CONCATX(a, ...) a ## __VA_ARGS__ +#define CONCAT(a, ...) CONCATX(a, __VA_ARGS__) + +#define STRX(a) #a +#define STR(a) STRX(a) + +#define EVAL(...) EVAL1(EVAL1(EVAL1(EVAL1(__VA_ARGS__)))) +#define EVAL1(...) EVAL2(EVAL2(EVAL2(EVAL2(__VA_ARGS__)))) +#define EVAL2(...) EVAL3(EVAL3(EVAL3(EVAL3(__VA_ARGS__)))) +#define EVAL3(...) EVAL4(EVAL4(EVAL4(EVAL4(__VA_ARGS__)))) +#define EVAL4(...) __VA_ARGS__ + +#define DEC_1 0 +#define DEC_2 1 +#define DEC_3 2 +#define DEC_4 3 +#define DEC_5 4 +#define DEC_6 5 +#define DEC_7 6 +#define DEC_8 7 +#define DEC_9 8 +#define DEC_10 9 +#define DEC_11 10 +#define DEC_12 11 +#define DEC_13 12 +#define DEC_14 13 +#define DEC_15 14 +#define DEC_16 15 +#define DEC_17 16 +#define DEC_18 17 +#define DEC_19 18 +#define DEC_20 19 +#define DEC_21 20 +#define DEC_22 21 +#define DEC_23 22 +#define DEC_24 23 +#define DEC_25 24 +#define DEC_26 25 +#define DEC_27 26 +#define DEC_28 27 +#define DEC_29 28 +#define DEC_30 29 +#define DEC_31 30 +#define DEC_32 31 + +#define DEC(N) CONCAT(DEC_, N) + +#define SECOND_ARG(_, val, ...) val +#define SOME_CHECK_0 ~, 0 +#define GET_SECOND_ARG(...) SECOND_ARG(__VA_ARGS__, SOME,) +#define SOME_OR_0(N) GET_SECOND_ARG(CONCAT(SOME_CHECK_, N)) + +#define EMPTY(...) +#define DEFER(...) __VA_ARGS__ EMPTY() + +#define REPEAT_NAME_0() REPEAT_0 +#define REPEAT_NAME_SOME() REPEAT_SOME +#define REPEAT_0(...) +#define REPEAT_SOME(N, stuff) DEFER(CONCAT(REPEAT_NAME_, SOME_OR_0(DEC(N))))()(DEC(N), stuff) stuff +#define REPEAT(N, stuff) EVAL(REPEAT_SOME(N, stuff)) + +#define REPEATM_NAME_0() REPEATM_0 +#define REPEATM_NAME_SOME() REPEATM_SOME +#define REPEATM_0(...) +#define REPEATM_SOME(N, macro) macro(N) \ + DEFER(CONCAT(REPEATM_NAME_, SOME_OR_0(DEC(N))))()(DEC(N), macro) +#define REPEATM(N, macro) EVAL(REPEATM_SOME(N, macro)) + +#include "platform-specific.inc" + +#if (uECC_WORD_SIZE == 1) + #if uECC_SUPPORTS_secp160r1 + #define uECC_MAX_WORDS 21 /* Due to the size of curve_n. */ + #endif + #if uECC_SUPPORTS_secp192r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 24 + #endif + #if uECC_SUPPORTS_secp224r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 28 + #endif + #if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 32 + #endif +#elif (uECC_WORD_SIZE == 4) + #if uECC_SUPPORTS_secp160r1 + #define uECC_MAX_WORDS 6 /* Due to the size of curve_n. */ + #endif + #if uECC_SUPPORTS_secp192r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 6 + #endif + #if uECC_SUPPORTS_secp224r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 7 + #endif + #if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 8 + #endif +#elif (uECC_WORD_SIZE == 8) + #if uECC_SUPPORTS_secp160r1 + #define uECC_MAX_WORDS 3 + #endif + #if uECC_SUPPORTS_secp192r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 3 + #endif + #if uECC_SUPPORTS_secp224r1 + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 4 + #endif + #if (uECC_SUPPORTS_secp256r1 || uECC_SUPPORTS_secp256k1) + #undef uECC_MAX_WORDS + #define uECC_MAX_WORDS 4 + #endif +#endif /* uECC_WORD_SIZE */ + +#define BITS_TO_WORDS(num_bits) ((num_bits + ((uECC_WORD_SIZE * 8) - 1)) / (uECC_WORD_SIZE * 8)) +#define BITS_TO_BYTES(num_bits) ((num_bits + 7) / 8) + +struct uECC_Curve_t { + wordcount_t num_words; + wordcount_t num_bytes; + bitcount_t num_n_bits; + uECC_word_t p[uECC_MAX_WORDS]; + uECC_word_t n[uECC_MAX_WORDS]; + uECC_word_t G[uECC_MAX_WORDS * 2]; + uECC_word_t b[uECC_MAX_WORDS]; + void (*double_jacobian)(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * Z1, + uECC_Curve curve); +#if uECC_SUPPORT_COMPRESSED_POINT + void (*mod_sqrt)(uECC_word_t *a, uECC_Curve curve); +#endif + void (*x_side)(uECC_word_t *result, const uECC_word_t *x, uECC_Curve curve); +#if (uECC_OPTIMIZATION_LEVEL > 0) + void (*mmod_fast)(uECC_word_t *result, uECC_word_t *product); +#endif +}; + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN +static void bcopy(uint8_t *dst, + const uint8_t *src, + unsigned num_bytes) { + while (0 != num_bytes) { + num_bytes--; + dst[num_bytes] = src[num_bytes]; + } +} +#endif + +static cmpresult_t uECC_vli_cmp_unsafe(const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +#if (uECC_PLATFORM == uECC_arm || uECC_PLATFORM == uECC_arm_thumb || \ + uECC_PLATFORM == uECC_arm_thumb2) + #include "asm_arm.inc" +#endif + +#if (uECC_PLATFORM == uECC_avr) + #include "asm_avr.inc" +#endif + +#if default_RNG_defined +static uECC_RNG_Function g_rng_function = &default_RNG; +#else +static uECC_RNG_Function g_rng_function = 0; +#endif + +void uECC_set_rng(uECC_RNG_Function rng_function) { + g_rng_function = rng_function; +} + +uECC_RNG_Function uECC_get_rng(void) { + return g_rng_function; +} + +int uECC_curve_private_key_size(uECC_Curve curve) { + return BITS_TO_BYTES(curve->num_n_bits); +} + +int uECC_curve_public_key_size(uECC_Curve curve) { + return 2 * curve->num_bytes; +} + +#if !asm_clear +uECC_VLI_API void uECC_vli_clear(uECC_word_t *vli, wordcount_t num_words) { + wordcount_t i; + for (i = 0; i < num_words; ++i) { + vli[i] = 0; + } +} +#endif /* !asm_clear */ + +/* Constant-time comparison to zero - secure way to compare long integers */ +/* Returns 1 if vli == 0, 0 otherwise. */ +uECC_VLI_API uECC_word_t uECC_vli_isZero(const uECC_word_t *vli, wordcount_t num_words) { + uECC_word_t bits = 0; + wordcount_t i; + for (i = 0; i < num_words; ++i) { + bits |= vli[i]; + } + return (bits == 0); +} + +/* Returns nonzero if bit 'bit' of vli is set. */ +uECC_VLI_API uECC_word_t uECC_vli_testBit(const uECC_word_t *vli, bitcount_t bit) { + return (vli[bit >> uECC_WORD_BITS_SHIFT] & ((uECC_word_t)1 << (bit & uECC_WORD_BITS_MASK))); +} + +/* Counts the number of words in vli. */ +static wordcount_t vli_numDigits(const uECC_word_t *vli, const wordcount_t max_words) { + wordcount_t i; + /* Search from the end until we find a non-zero digit. + We do it in reverse because we expect that most digits will be nonzero. */ + for (i = max_words - 1; i >= 0 && vli[i] == 0; --i) { + } + + return (i + 1); +} + +/* Counts the number of bits required to represent vli. */ +uECC_VLI_API bitcount_t uECC_vli_numBits(const uECC_word_t *vli, const wordcount_t max_words) { + uECC_word_t i; + uECC_word_t digit; + + wordcount_t num_digits = vli_numDigits(vli, max_words); + if (num_digits == 0) { + return 0; + } + + digit = vli[num_digits - 1]; + for (i = 0; digit; ++i) { + digit >>= 1; + } + + return (((bitcount_t)(num_digits - 1) << uECC_WORD_BITS_SHIFT) + i); +} + +/* Sets dest = src. */ +#if !asm_set +uECC_VLI_API void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src, wordcount_t num_words) { + wordcount_t i; + for (i = 0; i < num_words; ++i) { + dest[i] = src[i]; + } +} +#endif /* !asm_set */ + +/* Returns sign of left - right. */ +static cmpresult_t uECC_vli_cmp_unsafe(const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + wordcount_t i; + for (i = num_words - 1; i >= 0; --i) { + if (left[i] > right[i]) { + return 1; + } else if (left[i] < right[i]) { + return -1; + } + } + return 0; +} + +/* Constant-time comparison function - secure way to compare long integers */ +/* Returns one if left == right, zero otherwise. */ +uECC_VLI_API uECC_word_t uECC_vli_equal(const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + uECC_word_t diff = 0; + wordcount_t i; + for (i = num_words - 1; i >= 0; --i) { + diff |= (left[i] ^ right[i]); + } + return (diff == 0); +} + +uECC_VLI_API uECC_word_t uECC_vli_sub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +/* Returns sign of left - right, in constant time. */ +uECC_VLI_API cmpresult_t uECC_vli_cmp(const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + uECC_word_t tmp[uECC_MAX_WORDS]; + uECC_word_t neg = !!uECC_vli_sub(tmp, left, right, num_words); + uECC_word_t equal = uECC_vli_isZero(tmp, num_words); + return (!equal - 2 * neg); +} + +/* Computes vli = vli >> 1. */ +#if !asm_rshift1 +uECC_VLI_API void uECC_vli_rshift1(uECC_word_t *vli, wordcount_t num_words) { + +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0020; +#endif + +// uECC_word_t result[16], i; + +#ifdef HW_CRYPT_ACC + + CRYPT->PTRA = (unsigned int)&vli[0]; + CRYPT->PTRO = (unsigned int)&vli[0]; +// CRYPT->PTRO = (unsigned int)&result[0]; + CRYPT->CTRL = ((num_words-1)<<8)|0x31; + + while (CRYPT->CTRL & 0x1); + +#else + + uECC_word_t *end = vli; + uECC_word_t carry = 0; + + vli += num_words; + while (vli-- > end) { + uECC_word_t temp = *vli; + *vli = (temp >> 1) | carry; + carry = temp << (uECC_WORD_BITS - 1); + } + +// for (i=0;iDAT &= ~0x0020; +#endif + +} +#endif /* !asm_rshift1 */ + +/* Computes result = left + right, returning carry. Can modify in place. */ +#if !asm_add +uECC_VLI_API uECC_word_t uECC_vli_add(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0040; +#endif + +#ifdef HW_CRYPT_ACC + uECC_word_t tmp, ii; + uECC_word_t tmp_buf[16]; +// uECC_word_t result2[16]; + + tmp = (unsigned int)&left[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRA = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRA = tmp; + } + tmp = (unsigned int)&right[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRB = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRB = tmp; + } + CRYPT->PTRO = (unsigned int)&result[0]; + CRYPT->CTRL = ((num_words-1)<<8)|0x11; + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0040; +#endif + + return CRYPT->CARRY; + +#else + uECC_word_t carry = 0; + wordcount_t i; + + for (i = 0; i < num_words; ++i) { + uECC_word_t sum = left[i] + right[i] + carry; + if (sum != left[i]) { + carry = (sum < left[i]); + } + result[i] = sum; + } + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0040; +#endif + + return carry; + +#endif + +// for (i=0;iDAT |= 0x0080; +#endif + +#ifdef HW_CRYPT_ACC + uECC_word_t tmp, ii; + uECC_word_t tmp_buf[16]; +// uECC_word_t result2[16]; + + tmp = (unsigned int)&left[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRA = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRA = tmp; + } + tmp = (unsigned int)&right[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRB = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRB = tmp; + } + CRYPT->PTRO = (unsigned int)&result[0]; + CRYPT->CTRL = ((num_words-1)<<8)|0x21; + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0080; +#endif + + return CRYPT->CARRY; + +#else + + uECC_word_t borrow = 0; + wordcount_t i; + for (i = 0; i < num_words; ++i) { + uECC_word_t diff = left[i] - right[i] - borrow; + if (diff != left[i]) { + borrow = (diff > left[i]); + } + result[i] = diff; + } +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0080; +#endif + +// for (i=0;i 0) && \ + ((uECC_WORD_SIZE == 1) || (uECC_WORD_SIZE == 8))) +/*static*/ void muladd(uECC_word_t a, + uECC_word_t b, + uECC_word_t *r0, + uECC_word_t *r1, + uECC_word_t *r2) { +#if uECC_WORD_SIZE == 8 && !SUPPORTS_INT128 + uint64_t a0 = a & 0xffffffffull; + uint64_t a1 = a >> 32; + uint64_t b0 = b & 0xffffffffull; + uint64_t b1 = b >> 32; + + uint64_t i0 = a0 * b0; + uint64_t i1 = a0 * b1; + uint64_t i2 = a1 * b0; + uint64_t i3 = a1 * b1; + + uint64_t p0, p1; + + i2 += (i0 >> 32); + i2 += i1; + if (i2 < i1) { /* overflow */ + i3 += 0x100000000ull; + } + + p0 = (i0 & 0xffffffffull) | (i2 << 32); + p1 = i3 + (i2 >> 32); + + *r0 += p0; + *r1 += (p1 + (*r0 < p0)); + *r2 += ((*r1 < p1) || (*r1 == p1 && *r0 < p0)); +#else + uECC_dword_t p = (uECC_dword_t)a * b; + uECC_dword_t r01 = ((uECC_dword_t)(*r1) << uECC_WORD_BITS) | *r0; + r01 += p; + *r2 += (r01 < p); + *r1 = r01 >> uECC_WORD_BITS; + *r0 = (uECC_word_t)r01; +#endif +} +#endif /* muladd needed */ + +#if !asm_mult +uECC_VLI_API void uECC_vli_mult(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words) { + +// uECC_word_t result2[32]; +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0800; +#endif + +#ifdef HW_CRYPT_ACC + uECC_word_t tmp, ii; + uECC_word_t tmp_buf[16]; + + tmp = (unsigned int)&left[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRA = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRA = tmp; + } + tmp = (unsigned int)&right[0]; + if ((tmp&0xF0000000) == 0) { + for (ii=0;iiPTRB = (unsigned int)&tmp_buf[0]; + } else { + CRYPT->PTRB = tmp; + } + CRYPT->PTRO = (unsigned int)&result[0]; + CRYPT->CTRL = ((num_words-1)<<8)|0x1; + + while (CRYPT->CTRL & 0x1); +#else + uECC_word_t r0 = 0; + uECC_word_t r1 = 0; + uECC_word_t r2 = 0; + wordcount_t i, k; + + /* Compute each digit of result in sequence, maintaining the carries. */ + for (k = 0; k < num_words; ++k) { + for (i = 0; i <= k; ++i) { + muladd(left[i], right[k - i], &r0, &r1, &r2); + } + result[k] = r0; + r0 = r1; + r1 = r2; + r2 = 0; + } + for (k = num_words; k < num_words * 2 - 1; ++k) { + for (i = (k + 1) - num_words; i < num_words; ++i) { + muladd(left[i], right[k - i], &r0, &r1, &r2); + } + result[k] = r0; + r0 = r1; + r1 = r2; + r2 = 0; + } + result[num_words * 2 - 1] = r0; + +// for (i=0;i<(num_words * 2);i++) { +// if (result[i] != result2[i]) { +// print1("MULT Fail!!!\n"); +// } +// } +#endif + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0800; +#endif + + +} +#endif /* !asm_mult */ + +#if uECC_SQUARE_FUNC + +#if !asm_square +/*static*/ void mul2add(uECC_word_t a, + uECC_word_t b, + uECC_word_t *r0, + uECC_word_t *r1, + uECC_word_t *r2) { +#if uECC_WORD_SIZE == 8 && !SUPPORTS_INT128 + uint64_t a0 = a & 0xffffffffull; + uint64_t a1 = a >> 32; + uint64_t b0 = b & 0xffffffffull; + uint64_t b1 = b >> 32; + + uint64_t i0 = a0 * b0; + uint64_t i1 = a0 * b1; + uint64_t i2 = a1 * b0; + uint64_t i3 = a1 * b1; + + uint64_t p0, p1; + + i2 += (i0 >> 32); + i2 += i1; + if (i2 < i1) + { /* overflow */ + i3 += 0x100000000ull; + } + + p0 = (i0 & 0xffffffffull) | (i2 << 32); + p1 = i3 + (i2 >> 32); + + *r2 += (p1 >> 63); + p1 = (p1 << 1) | (p0 >> 63); + p0 <<= 1; + + *r0 += p0; + *r1 += (p1 + (*r0 < p0)); + *r2 += ((*r1 < p1) || (*r1 == p1 && *r0 < p0)); +#else + uECC_dword_t p = (uECC_dword_t)a * b; + uECC_dword_t r01 = ((uECC_dword_t)(*r1) << uECC_WORD_BITS) | *r0; + *r2 += (p >> (uECC_WORD_BITS * 2 - 1)); + p *= 2; + r01 += p; + *r2 += (r01 < p); + *r1 = r01 >> uECC_WORD_BITS; + *r0 = (uECC_word_t)r01; +#endif +} + +uECC_VLI_API void uECC_vli_square(uECC_word_t *result, + const uECC_word_t *left, + wordcount_t num_words) { +// uECC_word_t result2[32]; + +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0100; +#endif + +#ifdef HW_CRYPT_ACC + + CRYPT->PTRA = (unsigned int)&left[0]; + CRYPT->PTRB = (unsigned int)&left[0]; + CRYPT->PTRO = (unsigned int)&result[0]; + CRYPT->CTRL = ((num_words-1)<<8)|0x1; + + while (CRYPT->CTRL & 0x1); + +#else + uECC_word_t r0 = 0; + uECC_word_t r1 = 0; + uECC_word_t r2 = 0; + + wordcount_t i, k; + + for (k = 0; k < num_words * 2 - 1; ++k) { + uECC_word_t min = (k < num_words ? 0 : (k + 1) - num_words); + for (i = min; i <= k && i <= k - i; ++i) { + if (i < k-i) { + mul2add(left[i], left[k - i], &r0, &r1, &r2); + } else { + muladd(left[i], left[k - i], &r0, &r1, &r2); + } + } + result[k] = r0; + r0 = r1; + r1 = r2; + r2 = 0; + } + + result[num_words * 2 - 1] = r0; + +// for (i=0;i<(num_words * 2);i++) { +// if (result[i] != result2[i]) { +// print1("SQUARE Fail!!!\n"); +// } +// } + +#endif + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0100; +#endif + +} +#endif /* !asm_square */ + +#else /* uECC_SQUARE_FUNC */ + +#if uECC_ENABLE_VLI_API +uECC_VLI_API void uECC_vli_square(uECC_word_t *result, + const uECC_word_t *left, + wordcount_t num_words) { + uECC_vli_mult(result, left, left, num_words); +} +#endif /* uECC_ENABLE_VLI_API */ + +#endif /* uECC_SQUARE_FUNC */ + +/* Computes result = (left + right) % mod. + Assumes that left < mod and right < mod, and that result does not overlap mod. */ +uECC_VLI_API void uECC_vli_modAdd(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t carry = uECC_vli_add(result, left, right, num_words); + if (carry || uECC_vli_cmp_unsafe(mod, result, num_words) != 1) { + /* result > mod (result = mod + remainder), so subtract mod to get remainder. */ + uECC_vli_sub(result, result, mod, num_words); + } +} + +/* Computes result = (left - right) % mod. + Assumes that left < mod and right < mod, and that result does not overlap mod. */ +uECC_VLI_API void uECC_vli_modSub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t l_borrow = uECC_vli_sub(result, left, right, num_words); + if (l_borrow) { + /* In this case, result == -diff == (max int) - diff. Since -x % d == d - x, + we can get the correct result from result + mod (with overflow). */ + uECC_vli_add(result, result, mod, num_words); + } +} + +/* Computes result = product % mod, where product is 2N words long. */ +/* Currently only designed to work for curve_p or curve_n. */ +uECC_VLI_API void uECC_vli_mmod(uECC_word_t *result, + uECC_word_t *product, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t mod_multiple[2 * uECC_MAX_WORDS]; + uECC_word_t tmp[2 * uECC_MAX_WORDS]; + uECC_word_t *v[2] = {tmp, product}; + uECC_word_t index; + + /* Shift mod so its highest set bit is at the maximum position. */ + bitcount_t shift = (num_words * 2 * uECC_WORD_BITS) - uECC_vli_numBits(mod, num_words); + wordcount_t word_shift = shift / uECC_WORD_BITS; + wordcount_t bit_shift = shift % uECC_WORD_BITS; + uECC_word_t carry = 0; + uECC_vli_clear(mod_multiple, word_shift); + if (bit_shift > 0) { + for(index = 0; index < (uECC_word_t)num_words; ++index) { + mod_multiple[word_shift + index] = (mod[index] << bit_shift) | carry; + carry = mod[index] >> (uECC_WORD_BITS - bit_shift); + } + } else { + uECC_vli_set(mod_multiple + word_shift, mod, num_words); + } + +// uECC_word_t result2[32], borrow2, j; + + for (index = 1; shift >= 0; --shift) { + uECC_word_t borrow = 0; +#ifdef HW_CRYPT_ACC + borrow = uECC_vli_sub(&v[1 - index][0], &v[index][0], mod_multiple, num_words*2); +#else + wordcount_t i; + for (i = 0; i < num_words * 2; ++i) { + uECC_word_t diff = v[index][i] - mod_multiple[i] - borrow; + if (diff != v[index][i]) { + borrow = (diff > v[index][i]); + } + v[1 - index][i] = diff; + } +#endif + index = !(index ^ borrow); /* Swap the index if there was no borrow */ +#ifdef HW_CRYPT_ACC + uECC_vli_rshift1(mod_multiple, num_words*2); +#else + uECC_vli_rshift1(mod_multiple, num_words); + mod_multiple[num_words - 1] |= mod_multiple[num_words] << (uECC_WORD_BITS - 1); + uECC_vli_rshift1(mod_multiple + num_words, num_words); +#endif + } + uECC_vli_set(result, v[index], num_words); +} + +/* Computes result = (left * right) % mod. */ +uECC_VLI_API void uECC_vli_modMult(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t product[2 * uECC_MAX_WORDS]; +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0200; +#endif + uECC_vli_mult(product, left, right, num_words); + uECC_vli_mmod(result, product, mod, num_words); +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0200; +#endif +} + +uECC_VLI_API void uECC_vli_modMult_fast(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + uECC_Curve curve) { + uECC_word_t product[2 * uECC_MAX_WORDS]; + +#ifdef TOGGLE_IO + GPIOA->DAT |= 0x0010; +#endif + + uECC_vli_mult(product, left, right, curve->num_words); +#if (uECC_OPTIMIZATION_LEVEL > 0) + curve->mmod_fast(result, product); +#else + uECC_vli_mmod(result, product, curve->p, curve->num_words); +#endif + +#ifdef TOGGLE_IO + GPIOA->DAT &= ~0x0010; +#endif + +} + +#if uECC_SQUARE_FUNC + +#if uECC_ENABLE_VLI_API +/* Computes result = left^2 % mod. */ +uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t product[2 * uECC_MAX_WORDS]; + uECC_vli_square(product, left, num_words); + uECC_vli_mmod(result, product, mod, num_words); +} +#endif /* uECC_ENABLE_VLI_API */ + +uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result, + const uECC_word_t *left, + uECC_Curve curve) { + uECC_word_t product[2 * uECC_MAX_WORDS]; + uECC_vli_square(product, left, curve->num_words); +#if (uECC_OPTIMIZATION_LEVEL > 0) + curve->mmod_fast(result, product); +#else + uECC_vli_mmod(result, product, curve->p, curve->num_words); +#endif +} + +#else /* uECC_SQUARE_FUNC */ + +#if uECC_ENABLE_VLI_API +uECC_VLI_API void uECC_vli_modSquare(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_vli_modMult(result, left, left, mod, num_words); +} +#endif /* uECC_ENABLE_VLI_API */ + +uECC_VLI_API void uECC_vli_modSquare_fast(uECC_word_t *result, + const uECC_word_t *left, + uECC_Curve curve) { + uECC_vli_modMult_fast(result, left, left, curve); +} + +#endif /* uECC_SQUARE_FUNC */ + +#define EVEN(vli) (!(vli[0] & 1)) +static void vli_modInv_update(uECC_word_t *uv, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t carry = 0; + if (!EVEN(uv)) { + carry = uECC_vli_add(uv, uv, mod, num_words); + } + uECC_vli_rshift1(uv, num_words); + if (carry) { + uv[num_words - 1] |= HIGH_BIT_SET; + } +} + +/* Computes result = (1 / input) % mod. All VLIs are the same size. + See "From Euclid's GCD to Montgomery Multiplication to the Great Divide" */ +uECC_VLI_API void uECC_vli_modInv(uECC_word_t *result, + const uECC_word_t *input, + const uECC_word_t *mod, + wordcount_t num_words) { + uECC_word_t a[uECC_MAX_WORDS], b[uECC_MAX_WORDS], u[uECC_MAX_WORDS], v[uECC_MAX_WORDS]; + cmpresult_t cmpResult; + + if (uECC_vli_isZero(input, num_words)) { + uECC_vli_clear(result, num_words); + return; + } + + uECC_vli_set(a, input, num_words); + uECC_vli_set(b, mod, num_words); + uECC_vli_clear(u, num_words); + u[0] = 1; + uECC_vli_clear(v, num_words); + while ((cmpResult = uECC_vli_cmp_unsafe(a, b, num_words)) != 0) { + if (EVEN(a)) { + uECC_vli_rshift1(a, num_words); + vli_modInv_update(u, mod, num_words); + } else if (EVEN(b)) { + uECC_vli_rshift1(b, num_words); + vli_modInv_update(v, mod, num_words); + } else if (cmpResult > 0) { + uECC_vli_sub(a, a, b, num_words); + uECC_vli_rshift1(a, num_words); + if (uECC_vli_cmp_unsafe(u, v, num_words) < 0) { + uECC_vli_add(u, u, mod, num_words); + } + uECC_vli_sub(u, u, v, num_words); + vli_modInv_update(u, mod, num_words); + } else { + uECC_vli_sub(b, b, a, num_words); + uECC_vli_rshift1(b, num_words); + if (uECC_vli_cmp_unsafe(v, u, num_words) < 0) { + uECC_vli_add(v, v, mod, num_words); + } + uECC_vli_sub(v, v, u, num_words); + vli_modInv_update(v, mod, num_words); + } + } + uECC_vli_set(result, u, num_words); +} + +/* ------ Point operations ------ */ + +#include "curve-specific.inc" + +/* Returns 1 if 'point' is the point at infinity, 0 otherwise. */ +#define EccPoint_isZero(point, curve) uECC_vli_isZero((point), (curve)->num_words * 2) + +/* Point multiplication algorithm using Montgomery's ladder with co-Z coordinates. +From http://eprint.iacr.org/2011/338.pdf +*/ + +/* Modify (x1, y1) => (x1 * z^2, y1 * z^3) */ +static void apply_z(uECC_word_t * X1, + uECC_word_t * Y1, + const uECC_word_t * const Z, + uECC_Curve curve) { + uECC_word_t t1[uECC_MAX_WORDS]; + + uECC_vli_modSquare_fast(t1, Z, curve); /* z^2 */ + uECC_vli_modMult_fast(X1, X1, t1, curve); /* x1 * z^2 */ + uECC_vli_modMult_fast(t1, t1, Z, curve); /* z^3 */ + uECC_vli_modMult_fast(Y1, Y1, t1, curve); /* y1 * z^3 */ +} + +/* P = (x1, y1) => 2P, (x2, y2) => P' */ +static void XYcZ_initial_double(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * X2, + uECC_word_t * Y2, + const uECC_word_t * const initial_Z, + uECC_Curve curve) { + uECC_word_t z[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + if (initial_Z) { + uECC_vli_set(z, initial_Z, num_words); + } else { + uECC_vli_clear(z, num_words); + z[0] = 1; + } + + uECC_vli_set(X2, X1, num_words); + uECC_vli_set(Y2, Y1, num_words); + + apply_z(X1, Y1, z, curve); + curve->double_jacobian(X1, Y1, z, curve); + apply_z(X2, Y2, z, curve); +} + +/* Input P = (x1, y1, Z), Q = (x2, y2, Z) + Output P' = (x1', y1', Z3), P + Q = (x3, y3, Z3) + or P => P', Q => P + Q +*/ +static void XYcZ_add(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * X2, + uECC_word_t * Y2, + uECC_Curve curve) { + /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */ + uECC_word_t t5[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + + uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */ + uECC_vli_modSquare_fast(t5, t5, curve); /* t5 = (x2 - x1)^2 = A */ + uECC_vli_modMult_fast(X1, X1, t5, curve); /* t1 = x1*A = B */ + uECC_vli_modMult_fast(X2, X2, t5, curve); /* t3 = x2*A = C */ + uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y2 - y1 */ + uECC_vli_modSquare_fast(t5, Y2, curve); /* t5 = (y2 - y1)^2 = D */ + + uECC_vli_modSub(t5, t5, X1, curve->p, num_words); /* t5 = D - B */ + uECC_vli_modSub(t5, t5, X2, curve->p, num_words); /* t5 = D - B - C = x3 */ + uECC_vli_modSub(X2, X2, X1, curve->p, num_words); /* t3 = C - B */ + uECC_vli_modMult_fast(Y1, Y1, X2, curve); /* t2 = y1*(C - B) */ + uECC_vli_modSub(X2, X1, t5, curve->p, num_words); /* t3 = B - x3 */ + uECC_vli_modMult_fast(Y2, Y2, X2, curve); /* t4 = (y2 - y1)*(B - x3) */ + uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y3 */ + + uECC_vli_set(X2, t5, num_words); +} + +/* Input P = (x1, y1, Z), Q = (x2, y2, Z) + Output P + Q = (x3, y3, Z3), P - Q = (x3', y3', Z3) + or P => P - Q, Q => P + Q +*/ +static void XYcZ_addC(uECC_word_t * X1, + uECC_word_t * Y1, + uECC_word_t * X2, + uECC_word_t * Y2, + uECC_Curve curve) { + /* t1 = X1, t2 = Y1, t3 = X2, t4 = Y2 */ + uECC_word_t t5[uECC_MAX_WORDS]; + uECC_word_t t6[uECC_MAX_WORDS]; + uECC_word_t t7[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + + uECC_vli_modSub(t5, X2, X1, curve->p, num_words); /* t5 = x2 - x1 */ + uECC_vli_modSquare_fast(t5, t5, curve); /* t5 = (x2 - x1)^2 = A */ + uECC_vli_modMult_fast(X1, X1, t5, curve); /* t1 = x1*A = B */ + uECC_vli_modMult_fast(X2, X2, t5, curve); /* t3 = x2*A = C */ + uECC_vli_modAdd(t5, Y2, Y1, curve->p, num_words); /* t5 = y2 + y1 */ + uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = y2 - y1 */ + + uECC_vli_modSub(t6, X2, X1, curve->p, num_words); /* t6 = C - B */ + uECC_vli_modMult_fast(Y1, Y1, t6, curve); /* t2 = y1 * (C - B) = E */ + uECC_vli_modAdd(t6, X1, X2, curve->p, num_words); /* t6 = B + C */ + uECC_vli_modSquare_fast(X2, Y2, curve); /* t3 = (y2 - y1)^2 = D */ + uECC_vli_modSub(X2, X2, t6, curve->p, num_words); /* t3 = D - (B + C) = x3 */ + + uECC_vli_modSub(t7, X1, X2, curve->p, num_words); /* t7 = B - x3 */ + uECC_vli_modMult_fast(Y2, Y2, t7, curve); /* t4 = (y2 - y1)*(B - x3) */ + uECC_vli_modSub(Y2, Y2, Y1, curve->p, num_words); /* t4 = (y2 - y1)*(B - x3) - E = y3 */ + + uECC_vli_modSquare_fast(t7, t5, curve); /* t7 = (y2 + y1)^2 = F */ + uECC_vli_modSub(t7, t7, t6, curve->p, num_words); /* t7 = F - (B + C) = x3' */ + uECC_vli_modSub(t6, t7, X1, curve->p, num_words); /* t6 = x3' - B */ + uECC_vli_modMult_fast(t6, t6, t5, curve); /* t6 = (y2+y1)*(x3' - B) */ + uECC_vli_modSub(Y1, t6, Y1, curve->p, num_words); /* t2 = (y2+y1)*(x3' - B) - E = y3' */ + + uECC_vli_set(X1, t7, num_words); +} + +/* result may overlap point. */ +static void EccPoint_mult(uECC_word_t * result, + const uECC_word_t * point, + const uECC_word_t * scalar, + const uECC_word_t * initial_Z, + bitcount_t num_bits, + uECC_Curve curve) { + /* R0 and R1 */ + uECC_word_t Rx[2][uECC_MAX_WORDS]; + uECC_word_t Ry[2][uECC_MAX_WORDS]; + uECC_word_t z[uECC_MAX_WORDS]; + bitcount_t i; + uECC_word_t nb; + wordcount_t num_words = curve->num_words; + + uECC_vli_set(Rx[1], point, num_words); + uECC_vli_set(Ry[1], point + num_words, num_words); + + XYcZ_initial_double(Rx[1], Ry[1], Rx[0], Ry[0], initial_Z, curve); + + for (i = num_bits - 2; i > 0; --i) { + nb = !uECC_vli_testBit(scalar, i); + XYcZ_addC(Rx[1 - nb], Ry[1 - nb], Rx[nb], Ry[nb], curve); + XYcZ_add(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], curve); + } + + nb = !uECC_vli_testBit(scalar, 0); + XYcZ_addC(Rx[1 - nb], Ry[1 - nb], Rx[nb], Ry[nb], curve); + + /* Find final 1/Z value. */ + uECC_vli_modSub(z, Rx[1], Rx[0], curve->p, num_words); /* X1 - X0 */ + uECC_vli_modMult_fast(z, z, Ry[1 - nb], curve); /* Yb * (X1 - X0) */ + uECC_vli_modMult_fast(z, z, point, curve); /* xP * Yb * (X1 - X0) */ + uECC_vli_modInv(z, z, curve->p, num_words); /* 1 / (xP * Yb * (X1 - X0)) */ + /* yP / (xP * Yb * (X1 - X0)) */ + uECC_vli_modMult_fast(z, z, point + num_words, curve); + uECC_vli_modMult_fast(z, z, Rx[1 - nb], curve); /* Xb * yP / (xP * Yb * (X1 - X0)) */ + /* End 1/Z calculation */ + + XYcZ_add(Rx[nb], Ry[nb], Rx[1 - nb], Ry[1 - nb], curve); + apply_z(Rx[0], Ry[0], z, curve); + + uECC_vli_set(result, Rx[0], num_words); + uECC_vli_set(result + num_words, Ry[0], num_words); +} + +static uECC_word_t regularize_k(const uECC_word_t * const k, + uECC_word_t *k0, + uECC_word_t *k1, + uECC_Curve curve) { + wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits); + bitcount_t num_n_bits = curve->num_n_bits; + uECC_word_t carry = uECC_vli_add(k0, k, curve->n, num_n_words) || + (num_n_bits < ((bitcount_t)num_n_words * uECC_WORD_SIZE * 8) && + uECC_vli_testBit(k0, num_n_bits)); + uECC_vli_add(k1, k0, curve->n, num_n_words); + return carry; +} + +static uECC_word_t EccPoint_compute_public_key(uECC_word_t *result, + uECC_word_t *private_key, + uECC_Curve curve) { + uECC_word_t tmp1[uECC_MAX_WORDS]; + uECC_word_t tmp2[uECC_MAX_WORDS]; + uECC_word_t *p2[2] = {tmp1, tmp2}; + uECC_word_t carry; + + /* Regularize the bitcount for the private key so that attackers cannot use a side channel + attack to learn the number of leading zeros. */ + carry = regularize_k(private_key, tmp1, tmp2, curve); + + EccPoint_mult(result, curve->G, p2[!carry], 0, curve->num_n_bits + 1, curve); + + if (EccPoint_isZero(result, curve)) { + return 0; + } + return 1; +} + +#if uECC_WORD_SIZE == 1 + +uECC_VLI_API void uECC_vli_nativeToBytes(uint8_t *bytes, + int num_bytes, + const uint8_t *native) { + wordcount_t i; + for (i = 0; i < num_bytes; ++i) { + bytes[i] = native[(num_bytes - 1) - i]; + } +} + +uECC_VLI_API void uECC_vli_bytesToNative(uint8_t *native, + const uint8_t *bytes, + int num_bytes) { + uECC_vli_nativeToBytes(native, num_bytes, bytes); +} + +#else + +uECC_VLI_API void uECC_vli_nativeToBytes(uint8_t *bytes, + int num_bytes, + const uECC_word_t *native) { + wordcount_t i; + for (i = 0; i < num_bytes; ++i) { + unsigned b = num_bytes - 1 - i; + bytes[i] = native[b / uECC_WORD_SIZE] >> (8 * (b % uECC_WORD_SIZE)); + } +} + +uECC_VLI_API void uECC_vli_bytesToNative(uECC_word_t *native, + const uint8_t *bytes, + int num_bytes) { + wordcount_t i; + uECC_vli_clear(native, (num_bytes + (uECC_WORD_SIZE - 1)) / uECC_WORD_SIZE); + for (i = 0; i < num_bytes; ++i) { + unsigned b = num_bytes - 1 - i; + native[b / uECC_WORD_SIZE] |= + (uECC_word_t)bytes[i] << (8 * (b % uECC_WORD_SIZE)); + } +} + +#endif /* uECC_WORD_SIZE */ + +/* Generates a random integer in the range 0 < random < top. + Both random and top have num_words words. */ +uECC_VLI_API int uECC_generate_random_int(uECC_word_t *random, + const uECC_word_t *top, + wordcount_t num_words) { + uECC_word_t mask = (uECC_word_t)-1; + uECC_word_t tries; + bitcount_t num_bits = uECC_vli_numBits(top, num_words); + + if (!g_rng_function) { + return 0; + } + + for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) { + if (!g_rng_function((uint8_t *)random, num_words * uECC_WORD_SIZE)) { + return 0; + } + random[num_words - 1] &= mask >> ((bitcount_t)(num_words * uECC_WORD_SIZE * 8 - num_bits)); + if (!uECC_vli_isZero(random, num_words) && + uECC_vli_cmp(top, random, num_words) == 1) { + return 1; + } + } + return 0; +} + +int uECC_make_key(uint8_t *public_key, + uint8_t *private_key, + uECC_Curve curve) { +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *_private = (uECC_word_t *)private_key; + uECC_word_t *_public = (uECC_word_t *)public_key; +#else + uECC_word_t _private[uECC_MAX_WORDS]; + uECC_word_t _public[uECC_MAX_WORDS * 2]; +#endif + uECC_word_t tries; + + for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) { + if (!uECC_generate_random_int(_private, curve->n, BITS_TO_WORDS(curve->num_n_bits))) { + return 0; + } + + if (EccPoint_compute_public_key(_public, _private, curve)) { +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_nativeToBytes(private_key, BITS_TO_BYTES(curve->num_n_bits), _private); + uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public); + uECC_vli_nativeToBytes( + public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words); +#endif + return 1; + } + } + return 0; +} + +int uECC_shared_secret(const uint8_t *public_key, + const uint8_t *private_key, + uint8_t *secret, + uECC_Curve curve) { + uECC_word_t _public[uECC_MAX_WORDS * 2]; + uECC_word_t _private[uECC_MAX_WORDS]; + + uECC_word_t tmp[uECC_MAX_WORDS]; + uECC_word_t *p2[2] = {_private, tmp}; + uECC_word_t *initial_Z = 0; + uECC_word_t carry; + wordcount_t num_words = curve->num_words; + wordcount_t num_bytes = curve->num_bytes; + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) _private, private_key, num_bytes); + bcopy((uint8_t *) _public, public_key, num_bytes*2); +#else + uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits)); + uECC_vli_bytesToNative(_public, public_key, num_bytes); + uECC_vli_bytesToNative(_public + num_words, public_key + num_bytes, num_bytes); +#endif + + /* Regularize the bitcount for the private key so that attackers cannot use a side channel + attack to learn the number of leading zeros. */ + carry = regularize_k(_private, _private, tmp, curve); + + /* If an RNG function was specified, try to get a random initial Z value to improve + protection against side-channel attacks. */ + if (g_rng_function) { + if (!uECC_generate_random_int(p2[carry], curve->p, num_words)) { + return 0; + } + initial_Z = p2[carry]; + } + + EccPoint_mult(_public, _public, p2[!carry], initial_Z, curve->num_n_bits + 1, curve); +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) secret, (uint8_t *) _public, num_bytes); +#else + uECC_vli_nativeToBytes(secret, num_bytes, _public); +#endif + return !EccPoint_isZero(_public, curve); +} + +#if uECC_SUPPORT_COMPRESSED_POINT +void uECC_compress(const uint8_t *public_key, uint8_t *compressed, uECC_Curve curve) { + wordcount_t i; + for (i = 0; i < curve->num_bytes; ++i) { + compressed[i+1] = public_key[i]; + } +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + compressed[0] = 2 + (public_key[curve->num_bytes] & 0x01); +#else + compressed[0] = 2 + (public_key[curve->num_bytes * 2 - 1] & 0x01); +#endif +} + +void uECC_decompress(const uint8_t *compressed, uint8_t *public_key, uECC_Curve curve) { +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *point = (uECC_word_t *)public_key; +#else + uECC_word_t point[uECC_MAX_WORDS * 2]; +#endif + uECC_word_t *y = point + curve->num_words; +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy(public_key, compressed+1, curve->num_bytes); +#else + uECC_vli_bytesToNative(point, compressed + 1, curve->num_bytes); +#endif + curve->x_side(y, point, curve); + curve->mod_sqrt(y, curve); + + if ((y[0] & 0x01) != (compressed[0] & 0x01)) { + uECC_vli_sub(y, curve->p, y, curve->num_words); + } + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_nativeToBytes(public_key, curve->num_bytes, point); + uECC_vli_nativeToBytes(public_key + curve->num_bytes, curve->num_bytes, y); +#endif +} +#endif /* uECC_SUPPORT_COMPRESSED_POINT */ + +int uECC_valid_point(const uECC_word_t *point, uECC_Curve curve) { + uECC_word_t tmp1[uECC_MAX_WORDS]; + uECC_word_t tmp2[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + + /* The point at infinity is invalid. */ + if (EccPoint_isZero(point, curve)) { + return 0; + } + + /* x and y must be smaller than p. */ + if (uECC_vli_cmp_unsafe(curve->p, point, num_words) != 1 || + uECC_vli_cmp_unsafe(curve->p, point + num_words, num_words) != 1) { + return 0; + } + + uECC_vli_modSquare_fast(tmp1, point + num_words, curve); + curve->x_side(tmp2, point, curve); /* tmp2 = x^3 + ax + b */ + + /* Make sure that y^2 == x^3 + ax + b */ + return (int)(uECC_vli_equal(tmp1, tmp2, num_words)); +} + +int uECC_valid_public_key(const uint8_t *public_key, uECC_Curve curve) { +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *_public = (uECC_word_t *)public_key; +#else + uECC_word_t _public[uECC_MAX_WORDS * 2]; +#endif + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_bytesToNative(_public, public_key, curve->num_bytes); + uECC_vli_bytesToNative( + _public + curve->num_words, public_key + curve->num_bytes, curve->num_bytes); +#endif + return uECC_valid_point(_public, curve); +} + +int uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve) { +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *_private = (uECC_word_t *)private_key; + uECC_word_t *_public = (uECC_word_t *)public_key; +#else + uECC_word_t _private[uECC_MAX_WORDS]; + uECC_word_t _public[uECC_MAX_WORDS * 2]; +#endif + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_bytesToNative(_private, private_key, BITS_TO_BYTES(curve->num_n_bits)); +#endif + + /* Make sure the private key is in the range [1, n-1]. */ + if (uECC_vli_isZero(_private, BITS_TO_WORDS(curve->num_n_bits))) { + return 0; + } + + if (uECC_vli_cmp(curve->n, _private, BITS_TO_WORDS(curve->num_n_bits)) != 1) { + return 0; + } + + /* Compute public key. */ + if (!EccPoint_compute_public_key(_public, _private, curve)) { + return 0; + } + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_nativeToBytes(public_key, curve->num_bytes, _public); + uECC_vli_nativeToBytes( + public_key + curve->num_bytes, curve->num_bytes, _public + curve->num_words); +#endif + return 1; +} + + +/* -------- ECDSA code -------- */ + +static void bits2int(uECC_word_t *native, + const uint8_t *bits, + unsigned bits_size, + uECC_Curve curve) { + unsigned num_n_bytes = BITS_TO_BYTES(curve->num_n_bits); + unsigned num_n_words = BITS_TO_WORDS(curve->num_n_bits); + int shift; + uECC_word_t carry; + uECC_word_t *ptr; + + if (bits_size > num_n_bytes) { + bits_size = num_n_bytes; + } + + uECC_vli_clear(native, num_n_words); +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) native, bits, bits_size); +#else + uECC_vli_bytesToNative(native, bits, bits_size); +#endif + if (bits_size * 8 <= (unsigned)curve->num_n_bits) { + return; + } + shift = bits_size * 8 - curve->num_n_bits; + carry = 0; + ptr = native + num_n_words; + while (ptr-- > native) { + uECC_word_t temp = *ptr; + *ptr = (temp >> shift) | carry; + carry = temp << (uECC_WORD_BITS - shift); + } + + /* Reduce mod curve_n */ + if (uECC_vli_cmp_unsafe(curve->n, native, num_n_words) != 1) { + uECC_vli_sub(native, native, curve->n, num_n_words); + } +} + +static int uECC_sign_with_k(const uint8_t *private_key, + const uint8_t *message_hash, + unsigned hash_size, + uECC_word_t *k, + uint8_t *signature, + uECC_Curve curve) { + + uECC_word_t tmp[uECC_MAX_WORDS]; + uECC_word_t s[uECC_MAX_WORDS]; + uECC_word_t *k2[2] = {tmp, s}; +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *p = (uECC_word_t *)signature; +#else + uECC_word_t p[uECC_MAX_WORDS * 2]; +#endif + uECC_word_t carry; + wordcount_t num_words = curve->num_words; + wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits); + bitcount_t num_n_bits = curve->num_n_bits; + + /* Make sure 0 < k < curve_n */ + if (uECC_vli_isZero(k, num_words) || uECC_vli_cmp(curve->n, k, num_n_words) != 1) { + return 0; + } + + carry = regularize_k(k, tmp, s, curve); + EccPoint_mult(p, curve->G, k2[!carry], 0, num_n_bits + 1, curve); + if (uECC_vli_isZero(p, num_words)) { + return 0; + } + + /* If an RNG function was specified, get a random number + to prevent side channel analysis of k. */ + if (!g_rng_function) { + uECC_vli_clear(tmp, num_n_words); + tmp[0] = 1; + } else if (!uECC_generate_random_int(tmp, curve->n, num_n_words)) { + return 0; + } + + /* Prevent side channel analysis of uECC_vli_modInv() to determine + bits of k / the private key by premultiplying by a random number */ + uECC_vli_modMult(k, k, tmp, curve->n, num_n_words); /* k' = rand * k */ + uECC_vli_modInv(k, k, curve->n, num_n_words); /* k = 1 / k' */ + uECC_vli_modMult(k, k, tmp, curve->n, num_n_words); /* k = 1 / k */ + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN == 0 + uECC_vli_nativeToBytes(signature, curve->num_bytes, p); /* store r */ +#endif + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) tmp, private_key, BITS_TO_BYTES(curve->num_n_bits)); +#else + uECC_vli_bytesToNative(tmp, private_key, BITS_TO_BYTES(curve->num_n_bits)); /* tmp = d */ +#endif + + s[num_n_words - 1] = 0; + uECC_vli_set(s, p, num_words); + uECC_vli_modMult(s, tmp, s, curve->n, num_n_words); /* s = r*d */ + + bits2int(tmp, message_hash, hash_size, curve); + uECC_vli_modAdd(s, tmp, s, curve->n, num_n_words); /* s = e + r*d */ + uECC_vli_modMult(s, s, k, curve->n, num_n_words); /* s = (e + r*d) / k */ + if (uECC_vli_numBits(s, num_n_words) > (bitcount_t)curve->num_bytes * 8) { + return 0; + } +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) signature + curve->num_bytes, (uint8_t *) s, curve->num_bytes); +#else + uECC_vli_nativeToBytes(signature + curve->num_bytes, curve->num_bytes, s); +#endif + return 1; +} + +int uECC_sign(const uint8_t *private_key, + const uint8_t *message_hash, + unsigned hash_size, + uint8_t *signature, + uECC_Curve curve) { + uECC_word_t k[uECC_MAX_WORDS]; + uECC_word_t tries; + + for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) { + if (!uECC_generate_random_int(k, curve->n, BITS_TO_WORDS(curve->num_n_bits))) { + return 0; + } + + if (uECC_sign_with_k(private_key, message_hash, hash_size, k, signature, curve)) { + return 1; + } + } + return 0; +} + +/* Compute an HMAC using K as a key (as in RFC 6979). Note that K is always + the same size as the hash result size. */ +static void HMAC_init(const uECC_HashContext *hash_context, const uint8_t *K) { + uint8_t *pad = hash_context->tmp + 2 * hash_context->result_size; + unsigned i; + for (i = 0; i < hash_context->result_size; ++i) + pad[i] = K[i] ^ 0x36; + for (; i < hash_context->block_size; ++i) + pad[i] = 0x36; + + hash_context->init_hash(hash_context); + hash_context->update_hash(hash_context, pad, hash_context->block_size); +} + +static void HMAC_update(const uECC_HashContext *hash_context, + const uint8_t *message, + unsigned message_size) { + hash_context->update_hash(hash_context, message, message_size); +} + +static void HMAC_finish(const uECC_HashContext *hash_context, + const uint8_t *K, + uint8_t *result) { + uint8_t *pad = hash_context->tmp + 2 * hash_context->result_size; + unsigned i; + for (i = 0; i < hash_context->result_size; ++i) + pad[i] = K[i] ^ 0x5c; + for (; i < hash_context->block_size; ++i) + pad[i] = 0x5c; + + hash_context->finish_hash(hash_context, result); + + hash_context->init_hash(hash_context); + hash_context->update_hash(hash_context, pad, hash_context->block_size); + hash_context->update_hash(hash_context, result, hash_context->result_size); + hash_context->finish_hash(hash_context, result); +} + +/* V = HMAC_K(V) */ +static void update_V(const uECC_HashContext *hash_context, uint8_t *K, uint8_t *V) { + HMAC_init(hash_context, K); + HMAC_update(hash_context, V, hash_context->result_size); + HMAC_finish(hash_context, K, V); +} + +/* Deterministic signing, similar to RFC 6979. Differences are: + * We just use H(m) directly rather than bits2octets(H(m)) + (it is not reduced modulo curve_n). + * We generate a value for k (aka T) directly rather than converting endianness. + + Layout of hash_context->tmp: | | (1 byte overlapped 0x00 or 0x01) / */ +int uECC_sign_deterministic(const uint8_t *private_key, + const uint8_t *message_hash, + unsigned hash_size, + const uECC_HashContext *hash_context, + uint8_t *signature, + uECC_Curve curve) { + uint8_t *K = hash_context->tmp; + uint8_t *V = K + hash_context->result_size; + wordcount_t num_bytes = curve->num_bytes; + wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits); + bitcount_t num_n_bits = curve->num_n_bits; + uECC_word_t tries; + unsigned i; + for (i = 0; i < hash_context->result_size; ++i) { + V[i] = 0x01; + K[i] = 0; + } + + /* K = HMAC_K(V || 0x00 || int2octets(x) || h(m)) */ + HMAC_init(hash_context, K); + V[hash_context->result_size] = 0x00; + HMAC_update(hash_context, V, hash_context->result_size + 1); + HMAC_update(hash_context, private_key, num_bytes); + HMAC_update(hash_context, message_hash, hash_size); + HMAC_finish(hash_context, K, K); + + update_V(hash_context, K, V); + + /* K = HMAC_K(V || 0x01 || int2octets(x) || h(m)) */ + HMAC_init(hash_context, K); + V[hash_context->result_size] = 0x01; + HMAC_update(hash_context, V, hash_context->result_size + 1); + HMAC_update(hash_context, private_key, num_bytes); + HMAC_update(hash_context, message_hash, hash_size); + HMAC_finish(hash_context, K, K); + + update_V(hash_context, K, V); + + for (tries = 0; tries < uECC_RNG_MAX_TRIES; ++tries) { + uECC_word_t T[uECC_MAX_WORDS]; + uint8_t *T_ptr = (uint8_t *)T; + wordcount_t T_bytes = 0; + for (;;) { + update_V(hash_context, K, V); + for (i = 0; i < hash_context->result_size; ++i) { + T_ptr[T_bytes++] = V[i]; + if (T_bytes >= num_n_words * uECC_WORD_SIZE) { + goto filled; + } + } + } + filled: + if ((bitcount_t)num_n_words * uECC_WORD_SIZE * 8 > num_n_bits) { + uECC_word_t mask = (uECC_word_t)-1; + T[num_n_words - 1] &= + mask >> ((bitcount_t)(num_n_words * uECC_WORD_SIZE * 8 - num_n_bits)); + } + + if (uECC_sign_with_k(private_key, message_hash, hash_size, T, signature, curve)) { + return 1; + } + + /* K = HMAC_K(V || 0x00) */ + HMAC_init(hash_context, K); + V[hash_context->result_size] = 0x00; + HMAC_update(hash_context, V, hash_context->result_size + 1); + HMAC_finish(hash_context, K, K); + + update_V(hash_context, K, V); + } + return 0; +} + +static bitcount_t smax(bitcount_t a, bitcount_t b) { + return (a > b ? a : b); +} + +int uECC_verify(const uint8_t *public_key, + const uint8_t *message_hash, + unsigned hash_size, + const uint8_t *signature, + uECC_Curve curve) { + uECC_word_t u1[uECC_MAX_WORDS], u2[uECC_MAX_WORDS]; + uECC_word_t z[uECC_MAX_WORDS]; + uECC_word_t sum[uECC_MAX_WORDS * 2]; + uECC_word_t rx[uECC_MAX_WORDS]; + uECC_word_t ry[uECC_MAX_WORDS]; + uECC_word_t tx[uECC_MAX_WORDS]; + uECC_word_t ty[uECC_MAX_WORDS]; + uECC_word_t tz[uECC_MAX_WORDS]; + const uECC_word_t *points[4]; + const uECC_word_t *point; + bitcount_t num_bits; + bitcount_t i; +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + uECC_word_t *_public = (uECC_word_t *)public_key; +#else + uECC_word_t _public[uECC_MAX_WORDS * 2]; +#endif + uECC_word_t r[uECC_MAX_WORDS], s[uECC_MAX_WORDS]; + wordcount_t num_words = curve->num_words; + wordcount_t num_n_words = BITS_TO_WORDS(curve->num_n_bits); + + rx[num_n_words - 1] = 0; + r[num_n_words - 1] = 0; + s[num_n_words - 1] = 0; + +#if uECC_VLI_NATIVE_LITTLE_ENDIAN + bcopy((uint8_t *) r, signature, curve->num_bytes); + bcopy((uint8_t *) s, signature + curve->num_bytes, curve->num_bytes); +#else + uECC_vli_bytesToNative(_public, public_key, curve->num_bytes); + uECC_vli_bytesToNative( + _public + num_words, public_key + curve->num_bytes, curve->num_bytes); + uECC_vli_bytesToNative(r, signature, curve->num_bytes); + uECC_vli_bytesToNative(s, signature + curve->num_bytes, curve->num_bytes); +#endif + + /* r, s must not be 0. */ + if (uECC_vli_isZero(r, num_words) || uECC_vli_isZero(s, num_words)) { + return 0; + } + + /* r, s must be < n. */ + if (uECC_vli_cmp_unsafe(curve->n, r, num_n_words) != 1 || + uECC_vli_cmp_unsafe(curve->n, s, num_n_words) != 1) { + return 0; + } + + /* Calculate u1 and u2. */ + uECC_vli_modInv(z, s, curve->n, num_n_words); /* z = 1/s */ + u1[num_n_words - 1] = 0; + bits2int(u1, message_hash, hash_size, curve); + uECC_vli_modMult(u1, u1, z, curve->n, num_n_words); /* u1 = e/s */ + uECC_vli_modMult(u2, r, z, curve->n, num_n_words); /* u2 = r/s */ + + /* Calculate sum = G + Q. */ + uECC_vli_set(sum, _public, num_words); + uECC_vli_set(sum + num_words, _public + num_words, num_words); + uECC_vli_set(tx, curve->G, num_words); + uECC_vli_set(ty, curve->G + num_words, num_words); + uECC_vli_modSub(z, sum, tx, curve->p, num_words); /* z = x2 - x1 */ + XYcZ_add(tx, ty, sum, sum + num_words, curve); + uECC_vli_modInv(z, z, curve->p, num_words); /* z = 1/z */ + apply_z(sum, sum + num_words, z, curve); + + /* Use Shamir's trick to calculate u1*G + u2*Q */ + points[0] = 0; + points[1] = curve->G; + points[2] = _public; + points[3] = sum; + num_bits = smax(uECC_vli_numBits(u1, num_n_words), + uECC_vli_numBits(u2, num_n_words)); + + point = points[(!!uECC_vli_testBit(u1, num_bits - 1)) | + ((!!uECC_vli_testBit(u2, num_bits - 1)) << 1)]; + uECC_vli_set(rx, point, num_words); + uECC_vli_set(ry, point + num_words, num_words); + uECC_vli_clear(z, num_words); + z[0] = 1; + + for (i = num_bits - 2; i >= 0; --i) { + uECC_word_t index; + curve->double_jacobian(rx, ry, z, curve); + + index = (!!uECC_vli_testBit(u1, i)) | ((!!uECC_vli_testBit(u2, i)) << 1); + point = points[index]; + if (point) { + uECC_vli_set(tx, point, num_words); + uECC_vli_set(ty, point + num_words, num_words); + apply_z(tx, ty, z, curve); + uECC_vli_modSub(tz, rx, tx, curve->p, num_words); /* Z = x2 - x1 */ + XYcZ_add(tx, ty, rx, ry, curve); + uECC_vli_modMult_fast(z, z, tz, curve); + } + } + + uECC_vli_modInv(z, z, curve->p, num_words); /* Z = 1/Z */ + apply_z(rx, ry, z, curve); + + /* v = x1 (mod n) */ + if (uECC_vli_cmp_unsafe(curve->n, rx, num_n_words) != 1) { + uECC_vli_sub(rx, rx, curve->n, num_n_words); + } + + /* Accept only if v == r. */ + return (int)(uECC_vli_equal(rx, r, num_words)); +} + +#if uECC_ENABLE_VLI_API + +unsigned uECC_curve_num_words(uECC_Curve curve) { + return curve->num_words; +} + +unsigned uECC_curve_num_bytes(uECC_Curve curve) { + return curve->num_bytes; +} + +unsigned uECC_curve_num_bits(uECC_Curve curve) { + return curve->num_bytes * 8; +} + +unsigned uECC_curve_num_n_words(uECC_Curve curve) { + return BITS_TO_WORDS(curve->num_n_bits); +} + +unsigned uECC_curve_num_n_bytes(uECC_Curve curve) { + return BITS_TO_BYTES(curve->num_n_bits); +} + +unsigned uECC_curve_num_n_bits(uECC_Curve curve) { + return curve->num_n_bits; +} + +const uECC_word_t *uECC_curve_p(uECC_Curve curve) { + return curve->p; +} + +const uECC_word_t *uECC_curve_n(uECC_Curve curve) { + return curve->n; +} + +const uECC_word_t *uECC_curve_G(uECC_Curve curve) { + return curve->G; +} + +const uECC_word_t *uECC_curve_b(uECC_Curve curve) { + return curve->b; +} + +#if uECC_SUPPORT_COMPRESSED_POINT +void uECC_vli_mod_sqrt(uECC_word_t *a, uECC_Curve curve) { + curve->mod_sqrt(a, curve); +} +#endif + +void uECC_vli_mmod_fast(uECC_word_t *result, uECC_word_t *product, uECC_Curve curve) { +#if (uECC_OPTIMIZATION_LEVEL > 0) + curve->mmod_fast(result, product); +#else + uECC_vli_mmod(result, product, curve->p, curve->num_words); +#endif +} + +void uECC_point_mult(uECC_word_t *result, + const uECC_word_t *point, + const uECC_word_t *scalar, + uECC_Curve curve) { + uECC_word_t tmp1[uECC_MAX_WORDS]; + uECC_word_t tmp2[uECC_MAX_WORDS]; + uECC_word_t *p2[2] = {tmp1, tmp2}; + uECC_word_t carry = regularize_k(scalar, tmp1, tmp2, curve); + + EccPoint_mult(result, point, p2[!carry], 0, curve->num_n_bits + 1, curve); +} + +#endif /* uECC_ENABLE_VLI_API */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.h new file mode 100644 index 0000000000..141b4a7a9c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC.h @@ -0,0 +1,364 @@ +/* Copyright 2014, Kenneth MacKay. Licensed under the BSD 2-clause license. */ + +#ifndef _UECC_H_ +#define _UECC_H_ + +#include + +/* Platform selection options. +If uECC_PLATFORM is not defined, the code will try to guess it based on compiler macros. +Possible values for uECC_PLATFORM are defined below: */ +#define uECC_arch_other 0 +#define uECC_x86 1 +#define uECC_x86_64 2 +#define uECC_arm 3 +#define uECC_arm_thumb 4 +#define uECC_arm_thumb2 5 +#define uECC_arm64 6 +#define uECC_avr 7 + +//#define uECC_PLATFORM uECC_arm_thumb2 + +/* If desired, you can define uECC_WORD_SIZE as appropriate for your platform (1, 4, or 8 bytes). +If uECC_WORD_SIZE is not explicitly defined then it will be automatically set based on your +platform. */ + +/* Optimization level; trade speed for code size. + Larger values produce code that is faster but larger. + Currently supported values are 0 - 4; 0 is unusably slow for most applications. + Optimization level 4 currently only has an effect ARM platforms where more than one + curve is enabled. */ +#ifndef uECC_OPTIMIZATION_LEVEL + #define uECC_OPTIMIZATION_LEVEL 2 +#endif + +/* uECC_SQUARE_FUNC - If enabled (defined as nonzero), this will cause a specific function to be +used for (scalar) squaring instead of the generic multiplication function. This can make things +faster somewhat faster, but increases the code size. */ +#ifndef uECC_SQUARE_FUNC + #define uECC_SQUARE_FUNC 1 +#endif + +/* uECC_VLI_NATIVE_LITTLE_ENDIAN - If enabled (defined as nonzero), this will switch to native +little-endian format for *all* arrays passed in and out of the public API. This includes public +and private keys, shared secrets, signatures and message hashes. +Using this switch reduces the amount of call stack memory used by uECC, since less intermediate +translations are required. +Note that this will *only* work on native little-endian processors and it will treat the uint8_t +arrays passed into the public API as word arrays, therefore requiring the provided byte arrays +to be word aligned on architectures that do not support unaligned accesses. */ +#ifndef uECC_VLI_NATIVE_LITTLE_ENDIAN + #define uECC_VLI_NATIVE_LITTLE_ENDIAN 0 +#endif + +/* Curve support selection. Set to 0 to remove that curve. */ +#ifndef uECC_SUPPORTS_secp160r1 + #define uECC_SUPPORTS_secp160r1 0 +#endif +#ifndef uECC_SUPPORTS_secp192r1 + #define uECC_SUPPORTS_secp192r1 1 +#endif +#ifndef uECC_SUPPORTS_secp224r1 + #define uECC_SUPPORTS_secp224r1 0 +#endif +#ifndef uECC_SUPPORTS_secp256r1 + #define uECC_SUPPORTS_secp256r1 0 +#endif +#ifndef uECC_SUPPORTS_secp256k1 + #define uECC_SUPPORTS_secp256k1 0 +#endif + +/* Specifies whether compressed point format is supported. + Set to 0 to disable point compression/decompression functions. */ +#ifndef uECC_SUPPORT_COMPRESSED_POINT + #define uECC_SUPPORT_COMPRESSED_POINT 1 +#endif + +struct uECC_Curve_t; +typedef const struct uECC_Curve_t * uECC_Curve; + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if uECC_SUPPORTS_secp160r1 +uECC_Curve uECC_secp160r1(void); +#endif +#if uECC_SUPPORTS_secp192r1 +uECC_Curve uECC_secp192r1(void); +#endif +#if uECC_SUPPORTS_secp224r1 +uECC_Curve uECC_secp224r1(void); +#endif +#if uECC_SUPPORTS_secp256r1 +uECC_Curve uECC_secp256r1(void); +#endif +#if uECC_SUPPORTS_secp256k1 +uECC_Curve uECC_secp256k1(void); +#endif + +/* uECC_RNG_Function type +The RNG function should fill 'size' random bytes into 'dest'. It should return 1 if +'dest' was filled with random data, or 0 if the random data could not be generated. +The filled-in values should be either truly random, or from a cryptographically-secure PRNG. + +A correctly functioning RNG function must be set (using uECC_set_rng()) before calling +uECC_make_key() or uECC_sign(). + +Setting a correctly functioning RNG function improves the resistance to side-channel attacks +for uECC_shared_secret() and uECC_sign_deterministic(). + +A correct RNG function is set by default when building for Windows, Linux, or OS X. +If you are building on another POSIX-compliant system that supports /dev/random or /dev/urandom, +you can define uECC_POSIX to use the predefined RNG. For embedded platforms there is no predefined +RNG function; you must provide your own. +*/ +typedef int (*uECC_RNG_Function)(uint8_t *dest, unsigned size); + +/* uECC_set_rng() function. +Set the function that will be used to generate random bytes. The RNG function should +return 1 if the random data was generated, or 0 if the random data could not be generated. + +On platforms where there is no predefined RNG function (eg embedded platforms), this must +be called before uECC_make_key() or uECC_sign() are used. + +Inputs: + rng_function - The function that will be used to generate random bytes. +*/ +void uECC_set_rng(uECC_RNG_Function rng_function); + +/* uECC_get_rng() function. + +Returns the function that will be used to generate random bytes. +*/ +uECC_RNG_Function uECC_get_rng(void); + +/* uECC_curve_private_key_size() function. + +Returns the size of a private key for the curve in bytes. +*/ +int uECC_curve_private_key_size(uECC_Curve curve); + +/* uECC_curve_public_key_size() function. + +Returns the size of a public key for the curve in bytes. +*/ +int uECC_curve_public_key_size(uECC_Curve curve); + +/* uECC_make_key() function. +Create a public/private key pair. + +Outputs: + public_key - Will be filled in with the public key. Must be at least 2 * the curve size + (in bytes) long. For example, if the curve is secp256r1, public_key must be 64 + bytes long. + private_key - Will be filled in with the private key. Must be as long as the curve order; this + is typically the same as the curve size, except for secp160r1. For example, if the + curve is secp256r1, private_key must be 32 bytes long. + + For secp160r1, private_key must be 21 bytes long! Note that the first byte will + almost always be 0 (there is about a 1 in 2^80 chance of it being non-zero). + +Returns 1 if the key pair was generated successfully, 0 if an error occurred. +*/ +int uECC_make_key(uint8_t *public_key, uint8_t *private_key, uECC_Curve curve); + +/* uECC_shared_secret() function. +Compute a shared secret given your secret key and someone else's public key. +Note: It is recommended that you hash the result of uECC_shared_secret() before using it for +symmetric encryption or HMAC. + +Inputs: + public_key - The public key of the remote party. + private_key - Your private key. + +Outputs: + secret - Will be filled in with the shared secret value. Must be the same size as the + curve size; for example, if the curve is secp256r1, secret must be 32 bytes long. + +Returns 1 if the shared secret was generated successfully, 0 if an error occurred. +*/ +int uECC_shared_secret(const uint8_t *public_key, + const uint8_t *private_key, + uint8_t *secret, + uECC_Curve curve); + +#if uECC_SUPPORT_COMPRESSED_POINT +/* uECC_compress() function. +Compress a public key. + +Inputs: + public_key - The public key to compress. + +Outputs: + compressed - Will be filled in with the compressed public key. Must be at least + (curve size + 1) bytes long; for example, if the curve is secp256r1, + compressed must be 33 bytes long. +*/ +void uECC_compress(const uint8_t *public_key, uint8_t *compressed, uECC_Curve curve); + +/* uECC_decompress() function. +Decompress a compressed public key. + +Inputs: + compressed - The compressed public key. + +Outputs: + public_key - Will be filled in with the decompressed public key. +*/ +void uECC_decompress(const uint8_t *compressed, uint8_t *public_key, uECC_Curve curve); +#endif /* uECC_SUPPORT_COMPRESSED_POINT */ + +/* uECC_valid_public_key() function. +Check to see if a public key is valid. + +Note that you are not required to check for a valid public key before using any other uECC +functions. However, you may wish to avoid spending CPU time computing a shared secret or +verifying a signature using an invalid public key. + +Inputs: + public_key - The public key to check. + +Returns 1 if the public key is valid, 0 if it is invalid. +*/ +int uECC_valid_public_key(const uint8_t *public_key, uECC_Curve curve); + +/* uECC_compute_public_key() function. +Compute the corresponding public key for a private key. + +Inputs: + private_key - The private key to compute the public key for + +Outputs: + public_key - Will be filled in with the corresponding public key + +Returns 1 if the key was computed successfully, 0 if an error occurred. +*/ +int uECC_compute_public_key(const uint8_t *private_key, uint8_t *public_key, uECC_Curve curve); + +/* uECC_sign() function. +Generate an ECDSA signature for a given hash value. + +Usage: Compute a hash of the data you wish to sign (SHA-2 is recommended) and pass it in to +this function along with your private key. + +Inputs: + private_key - Your private key. + message_hash - The hash of the message to sign. + hash_size - The size of message_hash in bytes. + +Outputs: + signature - Will be filled in with the signature value. Must be at least 2 * curve size long. + For example, if the curve is secp256r1, signature must be 64 bytes long. + +Returns 1 if the signature generated successfully, 0 if an error occurred. +*/ +int uECC_sign(const uint8_t *private_key, + const uint8_t *message_hash, + unsigned hash_size, + uint8_t *signature, + uECC_Curve curve); + +/* uECC_HashContext structure. +This is used to pass in an arbitrary hash function to uECC_sign_deterministic(). +The structure will be used for multiple hash computations; each time a new hash +is computed, init_hash() will be called, followed by one or more calls to +update_hash(), and finally a call to finish_hash() to produce the resulting hash. + +The intention is that you will create a structure that includes uECC_HashContext +followed by any hash-specific data. For example: + +typedef struct SHA256_HashContext { + uECC_HashContext uECC; + SHA256_CTX ctx; +} SHA256_HashContext; + +void init_SHA256(uECC_HashContext *base) { + SHA256_HashContext *context = (SHA256_HashContext *)base; + SHA256_Init(&context->ctx); +} + +void update_SHA256(uECC_HashContext *base, + const uint8_t *message, + unsigned message_size) { + SHA256_HashContext *context = (SHA256_HashContext *)base; + SHA256_Update(&context->ctx, message, message_size); +} + +void finish_SHA256(uECC_HashContext *base, uint8_t *hash_result) { + SHA256_HashContext *context = (SHA256_HashContext *)base; + SHA256_Final(hash_result, &context->ctx); +} + +... when signing ... +{ + uint8_t tmp[32 + 32 + 64]; + SHA256_HashContext ctx = {{&init_SHA256, &update_SHA256, &finish_SHA256, 64, 32, tmp}}; + uECC_sign_deterministic(key, message_hash, &ctx.uECC, signature); +} +*/ +typedef struct uECC_HashContext { + void (*init_hash)(const struct uECC_HashContext *context); + void (*update_hash)(const struct uECC_HashContext *context, + const uint8_t *message, + unsigned message_size); + void (*finish_hash)(const struct uECC_HashContext *context, uint8_t *hash_result); + unsigned block_size; /* Hash function block size in bytes, eg 64 for SHA-256. */ + unsigned result_size; /* Hash function result size in bytes, eg 32 for SHA-256. */ + uint8_t *tmp; /* Must point to a buffer of at least (2 * result_size + block_size) bytes. */ +} uECC_HashContext; + +/* uECC_sign_deterministic() function. +Generate an ECDSA signature for a given hash value, using a deterministic algorithm +(see RFC 6979). You do not need to set the RNG using uECC_set_rng() before calling +this function; however, if the RNG is defined it will improve resistance to side-channel +attacks. + +Usage: Compute a hash of the data you wish to sign (SHA-2 is recommended) and pass it to +this function along with your private key and a hash context. Note that the message_hash +does not need to be computed with the same hash function used by hash_context. + +Inputs: + private_key - Your private key. + message_hash - The hash of the message to sign. + hash_size - The size of message_hash in bytes. + hash_context - A hash context to use. + +Outputs: + signature - Will be filled in with the signature value. + +Returns 1 if the signature generated successfully, 0 if an error occurred. +*/ +int uECC_sign_deterministic(const uint8_t *private_key, + const uint8_t *message_hash, + unsigned hash_size, + const uECC_HashContext *hash_context, + uint8_t *signature, + uECC_Curve curve); + +/* uECC_verify() function. +Verify an ECDSA signature. + +Usage: Compute the hash of the signed data using the same hash as the signer and +pass it to this function along with the signer's public key and the signature values (r and s). + +Inputs: + public_key - The signer's public key. + message_hash - The hash of the signed data. + hash_size - The size of message_hash in bytes. + signature - The signature value. + +Returns 1 if the signature is valid, 0 if it is invalid. +*/ +int uECC_verify(const uint8_t *public_key, + const uint8_t *message_hash, + unsigned hash_size, + const uint8_t *signature, + uECC_Curve curve); + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* _UECC_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC_vli.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC_vli.h new file mode 100644 index 0000000000..b771deec53 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/uECC_vli.h @@ -0,0 +1,173 @@ + +/* Copyright 2015, Kenneth MacKay. Licensed under the BSD 2-clause license. */ + +#ifndef _UECC_VLI_H_ +#define _UECC_VLI_H_ + +#include "uECC.h" +#include "types.h" + +/* Functions for raw large-integer manipulation. These are only available + if uECC.c is compiled with uECC_ENABLE_VLI_API defined to 1. */ +#ifndef uECC_ENABLE_VLI_API + #define uECC_ENABLE_VLI_API 0 +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +#if uECC_ENABLE_VLI_API + +void uECC_vli_clear(uECC_word_t *vli, wordcount_t num_words); + +/* Constant-time comparison to zero - secure way to compare long integers */ +/* Returns 1 if vli == 0, 0 otherwise. */ +uECC_word_t uECC_vli_isZero(const uECC_word_t *vli, wordcount_t num_words); + +/* Returns nonzero if bit 'bit' of vli is set. */ +uECC_word_t uECC_vli_testBit(const uECC_word_t *vli, bitcount_t bit); + +/* Counts the number of bits required to represent vli. */ +bitcount_t uECC_vli_numBits(const uECC_word_t *vli, const wordcount_t max_words); + +/* Sets dest = src. */ +void uECC_vli_set(uECC_word_t *dest, const uECC_word_t *src, wordcount_t num_words); + +/* Constant-time comparison function - secure way to compare long integers */ +/* Returns one if left == right, zero otherwise */ +uECC_word_t uECC_vli_equal(const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +/* Constant-time comparison function - secure way to compare long integers */ +/* Returns sign of left - right, in constant time. */ +cmpresult_t uECC_vli_cmp(const uECC_word_t *left, const uECC_word_t *right, wordcount_t num_words); + +/* Computes vli = vli >> 1. */ +void uECC_vli_rshift1(uECC_word_t *vli, wordcount_t num_words); + +/* Computes result = left + right, returning carry. Can modify in place. */ +uECC_word_t uECC_vli_add(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +/* Computes result = left - right, returning borrow. Can modify in place. */ +uECC_word_t uECC_vli_sub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +/* Computes result = left * right. Result must be 2 * num_words long. */ +void uECC_vli_mult(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + wordcount_t num_words); + +/* Computes result = left^2. Result must be 2 * num_words long. */ +void uECC_vli_square(uECC_word_t *result, const uECC_word_t *left, wordcount_t num_words); + +/* Computes result = (left + right) % mod. + Assumes that left < mod and right < mod, and that result does not overlap mod. */ +void uECC_vli_modAdd(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words); + +/* Computes result = (left - right) % mod. + Assumes that left < mod and right < mod, and that result does not overlap mod. */ +void uECC_vli_modSub(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words); + +/* Computes result = product % mod, where product is 2N words long. + Currently only designed to work for mod == curve->p or curve_n. */ +void uECC_vli_mmod(uECC_word_t *result, + uECC_word_t *product, + const uECC_word_t *mod, + wordcount_t num_words); + +/* Calculates result = product (mod curve->p), where product is up to + 2 * curve->num_words long. */ +void uECC_vli_mmod_fast(uECC_word_t *result, uECC_word_t *product, uECC_Curve curve); + +/* Computes result = (left * right) % mod. + Currently only designed to work for mod == curve->p or curve_n. */ +void uECC_vli_modMult(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + const uECC_word_t *mod, + wordcount_t num_words); + +/* Computes result = (left * right) % curve->p. */ +void uECC_vli_modMult_fast(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *right, + uECC_Curve curve); + +/* Computes result = left^2 % mod. + Currently only designed to work for mod == curve->p or curve_n. */ +void uECC_vli_modSquare(uECC_word_t *result, + const uECC_word_t *left, + const uECC_word_t *mod, + wordcount_t num_words); + +/* Computes result = left^2 % curve->p. */ +void uECC_vli_modSquare_fast(uECC_word_t *result, const uECC_word_t *left, uECC_Curve curve); + +/* Computes result = (1 / input) % mod.*/ +void uECC_vli_modInv(uECC_word_t *result, + const uECC_word_t *input, + const uECC_word_t *mod, + wordcount_t num_words); + +#if uECC_SUPPORT_COMPRESSED_POINT +/* Calculates a = sqrt(a) (mod curve->p) */ +void uECC_vli_mod_sqrt(uECC_word_t *a, uECC_Curve curve); +#endif + +/* Converts an integer in uECC native format to big-endian bytes. */ +void uECC_vli_nativeToBytes(uint8_t *bytes, int num_bytes, const uECC_word_t *native); +/* Converts big-endian bytes to an integer in uECC native format. */ +void uECC_vli_bytesToNative(uECC_word_t *native, const uint8_t *bytes, int num_bytes); + +unsigned uECC_curve_num_words(uECC_Curve curve); +unsigned uECC_curve_num_bytes(uECC_Curve curve); +unsigned uECC_curve_num_bits(uECC_Curve curve); +unsigned uECC_curve_num_n_words(uECC_Curve curve); +unsigned uECC_curve_num_n_bytes(uECC_Curve curve); +unsigned uECC_curve_num_n_bits(uECC_Curve curve); + +const uECC_word_t *uECC_curve_p(uECC_Curve curve); +const uECC_word_t *uECC_curve_n(uECC_Curve curve); +const uECC_word_t *uECC_curve_G(uECC_Curve curve); +const uECC_word_t *uECC_curve_b(uECC_Curve curve); + +int uECC_valid_point(const uECC_word_t *point, uECC_Curve curve); + +/* Multiplies a point by a scalar. Points are represented by the X coordinate followed by + the Y coordinate in the same array, both coordinates are curve->num_words long. Note + that scalar must be curve->num_n_words long (NOT curve->num_words). */ +void uECC_point_mult(uECC_word_t *result, + const uECC_word_t *point, + const uECC_word_t *scalar, + uECC_Curve curve); + +/* Generates a random integer in the range 0 < random < top. + Both random and top have num_words words. */ +int uECC_generate_random_int(uECC_word_t *random, + const uECC_word_t *top, + wordcount_t num_words); + +#endif /* uECC_ENABLE_VLI_API */ + +#ifdef __cplusplus +} /* end of extern "C" */ +#endif + +#endif /* _UECC_VLI_H_ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/v_stdio.c new file mode 100644 index 0000000000..77fd069bcf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/CRYPT/CRYPT_ECC256Signatures/Src/v_stdio.c @@ -0,0 +1,38 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +/** + * @brief fputc. + * @param None + * @retval None + */ +int fputc(int ch, FILE *f) +{ + //while (UART5->STATE&UART_STATE_TXFULL); + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..e312423b12 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 4 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..d969191a6c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 79 + 79 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/main.c new file mode 100644 index 0000000000..6f8d34ae86 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/main.c @@ -0,0 +1,104 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +#define OUT_IOB13 (BIT_BAND((uint32_t)&GPIOB->DAT, 13)) +#define SET_IOB13 (BIT_BAND((uint32_t)&GPIOB->DAT, 13) = 1) +#define CLR_IOB13 (BIT_BAND((uint32_t)&GPIOB->DAT, 13) = 0) + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* IOA13 CMOS output mode */ + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_13; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + test_success = 1; + + WDT_Disable(); + /* Toggle IOB13 with bit-band address */ + while (1) + { + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + SET_IOB13; CLR_IOB13; + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/target_isr.c new file mode 100644 index 0000000000..93adc10d40 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/target_isr.c @@ -0,0 +1,305 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Cortex/BitBand/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/target_flash.icf new file mode 100644 index 0000000000..1de5979f36 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9c449e2afe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..6428304864 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 152 + 152 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 39 + 0 + 200 + 220 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/main.c new file mode 100644 index 0000000000..f0baaa3955 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/main.c @@ -0,0 +1,176 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + DMA_InitType DMA_InitStruct; + DMA_AESInitType AESInitStruct; + uint32_t i; + uint8_t dst[16]; + uint8_t res[16]; + +#ifdef __ICCARM__ + #pragma data_alignment=4 +#endif + uint8_t key[24] +#ifndef __ICCARM__ + __attribute__((aligned (4))) +#endif +; + +#ifdef __ICCARM__ + #pragma data_alignment=4 +#endif + uint8_t src[16] +#ifndef __ICCARM__ + __attribute__((aligned (4))) +#endif +; + + test_success = 0; + + for (i=0; i<24; i++) + key[i] = i; + + for (i=0; i<16; i++) + src[i] = 0x10*i + i; + + Clock_Init(); + Stdio_Init(); + + /* DMA channel3 initialization */ + DMA_DeInit(DMA_CHANNEL_3); + DMA_InitStruct.SrcAddr = (uint32_t)&src[0]; + DMA_InitStruct.DestAddr = (uint32_t)&dst[0]; + DMA_InitStruct.FrameLen = 0; + DMA_InitStruct.PackLen = 4 - 1; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_InitStruct.ReqSrc = DMA_REQSRC_SOFT; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FEND; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_WORD; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_3); + + /* AES configuration, encode */ + DMA_AESDeInit(); + AESInitStruct.Direction = DMA_AESDIRECTION_ENCODE; + AESInitStruct.Mode = DMA_AESMODE_192; + AESInitStruct.KeyStr = (uint32_t *)&key[0]; + DMA_AESInit(&AESInitStruct); + + /* Enable AES and DMA channel3 */ + DMA_AESCmd(ENABLE); + DMA_Cmd(DMA_CHANNEL_3, ENABLE); + + /* Waiting channel3 operation complete */ + while (DMA_GetINTStatus(DMA_INTSTS_C3BUSY)); + printf("encode:\r\n"); + for (i = 0; i < 16; i++) + { + printf("0x%x\t", dst[i]); + } + printf("\r\n"); + + ///////////////////////////// + DMA_DeInit(DMA_CHANNEL_3); + DMA_InitStruct.SrcAddr = (uint32_t)&dst[0]; + DMA_InitStruct.DestAddr = (uint32_t)&res[0]; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_3); + + /* AES configuration, decode */ + DMA_AESDeInit(); + AESInitStruct.Direction = DMA_AESDIRECTION_DECODE; + AESInitStruct.KeyStr = (uint32_t *)&key[0]; + DMA_AESInit(&AESInitStruct); + + /* Enable AES and DMA channel3 */ + DMA_AESCmd(ENABLE); + DMA_Cmd(DMA_CHANNEL_3, ENABLE); + + /* Waiting channel3 operation complete */ + while (DMA_GetINTStatus(DMA_INTSTS_C3BUSY)); + printf("decode:\r\n"); + for (i = 0; i < 16; i++) + { + printf("0x%x\t", res[i]); + } + printf("\r\n"); + + /* Resource release */ + DMA_DeInit(DMA_CHANNEL_3); + DMA_AESDeInit(); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_AES/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/main.h new file mode 100644 index 0000000000..41292f40cb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/main.h @@ -0,0 +1,30 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +extern __IO uint32_t flag_dmaerr; /* Set to 1 if an error transfer is detected */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..6dea49db7e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvoptx @@ -0,0 +1,682 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 102 + 1 +
4954
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + \\template\../Src/main.c\102 +
+ + 1 + 0 + 111 + 1 +
0
+ 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\main.c + + +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + Src_Const_Buffer + + + 2 + 1 + Dst_Buffer + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..b6122b65b5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 118 + 118 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/main.c new file mode 100644 index 0000000000..ea42bce845 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/main.c @@ -0,0 +1,152 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +#define Buffer_Size (16) + +const uint32_t Src_Const_Buffer[Buffer_Size] = +{ + 0x00000000, 0x11111111, 0x22222222, 0x33333333, + 0x44444444, 0x55555555, 0x66666666, 0x77777777, + 0x88888888, 0x99999999, 0xAAAAAAAA, 0xBBBBBBBB, + 0xCCCCCCCC, 0xDDDDDDDD, 0xEEEEEEEE, 0xFFFFFFFF +}; + +uint32_t Dst_Buffer[Buffer_Size] = { 0 }; + +__IO uint32_t flag_dmaerr; /* Set to 1 if an error transfer is detected */ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + DMA_InitType DMA_InitStruct; + uint32_t i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* DMA channel0 initialization */ + DMA_DeInit(DMA_CHANNEL_0); + DMA_InitStruct.DestAddr = (uint32_t)&Dst_Buffer[0]; + DMA_InitStruct.SrcAddr = (uint32_t)&Src_Const_Buffer[0]; + DMA_InitStruct.FrameLen = 1 - 1; + DMA_InitStruct.PackLen = Buffer_Size - 1; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_InitStruct.ReqSrc = DMA_REQSRC_SOFT; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FEND; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_WORD; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_0); + + /* Enable DMA channel0 data abort interrupt */ + DMA_INTConfig(DMA_INT_C0DA, ENABLE); + /* Enable DMA NVIC interrupt */ + CORTEX_SetPriority_ClearPending_EnableIRQ(DMA_IRQn, 0); + + flag_dmaerr = 0;/* Set to 1 if an error transfer is detected */ + /* Enable channel0, start operation */ + DMA_Cmd(DMA_CHANNEL_0, ENABLE); + + /* Waiting for operation complete */ + while (DMA_GetINTStatus(DMA_INTSTS_C0BUSY)); + + /* DMA channel0 resource release */ + DMA_DeInit(DMA_CHANNEL_0); + CORTEX_NVIC_DisableIRQ(DMA_IRQn); + + for (i=0; i<16; i++) + { + if (Dst_Buffer[i] != Src_Const_Buffer[i]) + { + printf("DMA Flash to RAM ERROR!\r\n"); + test_success = 0; + while (1) + { + WDT_Clear(); + } + } + } + + if (flag_dmaerr) + { + printf("DMA Flash to RAM ERROR!\r\n"); + test_success = 0; + } + else + { + printf("DMA Flash to RAM OK!\r\n"); + test_success = 1; + } + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/target_isr.c new file mode 100644 index 0000000000..5b682de0cf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/target_isr.c @@ -0,0 +1,308 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ + if (DMA_GetINTStatus(DMA_INTSTS_C0DA)) + { + flag_dmaerr = 1; + DMA_ClearINTStatus(DMA_INTSTS_C0DA); + } +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_FlashToRAM/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/main.h new file mode 100644 index 0000000000..4636293d9d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/main.h @@ -0,0 +1,29 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +void ISO78160_DMATransmitErrorHandle(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1a25557706 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 132 + 132 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/main.c new file mode 100644 index 0000000000..a48135ca83 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/main.c @@ -0,0 +1,156 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +uint8_t Transmit_Buffer[8] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +void ISO78160_DMATransmitErrorHandle(void) +{ + /* Transmit error handle */ + if (ISO7816_GetINTStatus(ISO78160, ISO7816_INTSTS_TXRTYERR)) + { + ISO7816_ClearINTStatus(ISO78160, ISO7816_INTSTS_TXRTYERR); + + DMA_StopTransmit(DMA_CHANNEL_0, ENABLE); + /* Waiting DMA channel idle */ + while (DMA_GetINTStatus(DMA_INTSTS_C0BUSY)); + DMA_StopTransmit(DMA_CHANNEL_0, DISABLE); + + printf("DMA Transmit error\r\n"); + printf("DMA stop, clear busy, clear stop\r\n"); + } +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ISO7816_InitType ISO7816_InitStruct; + DMA_InitType DMA_InitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* ISO78160 initialization */ + ISO7816_DeInit(ISO78160); + ISO7816_InitStruct.FirstBit = ISO7816_FIRSTBIT_MSB; + ISO7816_InitStruct.Parity = ISO7816_PARITY_EVEN; + ISO7816_InitStruct.Baudrate = 9600; + ISO7816_InitStruct.TXRetry = ISO7816_TXRTY_0; + ISO7816_InitStruct.RXACKLength = ISO7816_RXACKLEN_2; + ISO7816_InitStruct.TXNACKLength = ISO7816_TXNACKLEN_2; + ISO7816_Init(ISO78160, &ISO7816_InitStruct); + + /* Enable ISO78160 transmit error interrupt */ + ISO7816_INTConfig(ISO78160, ISO7816_INT_TXRTYERR, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ISO78160_IRQn, 3); + + /* Channel0 initialization, Transmit_Buffer -> ISO78160->DATA*/ + DMA_DeInit(DMA_CHANNEL_0); + DMA_InitStruct.DestAddr = (uint32_t)&ISO78160->DATA; + DMA_InitStruct.SrcAddr = (uint32_t)&Transmit_Buffer[0]; + DMA_InitStruct.FrameLen = 1 - 1; + DMA_InitStruct.PackLen = 8 - 1; + DMA_InitStruct.ReqSrc = DMA_REQSRC_ISO78160TX; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_BYTE; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FIX; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_0); + + /* Enable ISO78160 */ + ISO7816_Cmd(ISO78160, ENABLE); + /* Enable channel 0 */ + DMA_Cmd(DMA_CHANNEL_0, ENABLE); + + /* Waiting for DMA channel0 frame end */ + while (1) + { + if (DMA_GetINTStatus(DMA_INTSTS_C0FE)) + { + DMA_ClearINTStatus(DMA_INTSTS_C0FE); + break; + } + } + + /* Waiting ISO78160 transmit(via DMA channel) done */ + while (!ISO7816_GetFlag(ISO78160, ISO7816_FLAG_DMATXDONE)); + ISO7816_ClearFlag(ISO78160, ISO7816_FLAG_DMATXDONE); + + /* ISO7816/DMA resource release */ + DMA_DeInit(DMA_CHANNEL_0); + ISO7816_DeInit(ISO78160); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/target_isr.c new file mode 100644 index 0000000000..6f0690fb72 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/target_isr.c @@ -0,0 +1,306 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ + ISO78160_DMATransmitErrorHandle(); +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_ISO7816_Transmit/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..06a4d1e163 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7763b32179 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 121 + 121 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/main.c new file mode 100644 index 0000000000..cebdef5213 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/main.c @@ -0,0 +1,145 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +#define Frame_Size (8) +#define Pack_Size (8) + +uint32_t i; +uint32_t Src_Buffer[Frame_Size*Pack_Size]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + DMA_InitType DMA_InitStruct; + TMR_InitType TMR_InitStruct; + GPIO_InitType GPIO_InitStruct; + uint32_t tmp; + + test_success = 0; + + Clock_Init(); + + /* IOB7, CMOS output mode, output low */ + GPIO_WriteBit(GPIO_B, 7, 0); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + tmp = GPIOBToF_ReadOutputData(GPIOB); + for (i=0; i<(Frame_Size*Pack_Size); i++) + { + tmp ^= GPIO_Pin_7; + Src_Buffer[i] = tmp; + } + + /* Timer1 initialization: + - Clock source: internal clock(APB clock 13107200Hz) + - Overflow interval: 10us */ + TMR_DeInit(TMR1); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 13107200/100000 - 1; + TMR_Init(TMR1, &TMR_InitStruct); + + /* DMA channel0 initialization */ + DMA_DeInit(DMA_CHANNEL_0); + DMA_InitStruct.DestAddr = (uint32_t)&GPIOB->DAT; + DMA_InitStruct.SrcAddr = (uint32_t)&Src_Buffer[0]; + DMA_InitStruct.FrameLen = Frame_Size - 1; + DMA_InitStruct.PackLen = Pack_Size - 1; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_InitStruct.ReqSrc = DMA_REQSRC_TIMER1; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FIX; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_WORD; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_0); + + /* Enable Timer1 */ + TMR_Cmd(TMR1, ENABLE); + /* Enable DMA channel 0 */ + DMA_Cmd(DMA_CHANNEL_0, ENABLE); + + /* Waiting for operation complete */ + while (DMA_GetINTStatus(DMA_INTSTS_C0BUSY)); + + /* Resource release */ + DMA_DeInit(DMA_CHANNEL_0); + TMR_DeInit(TMR1); + /* IOB7, forbidden mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_MemoryToPeripheral_Timer/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..5766e6fe92 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 108 + 108 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/main.c new file mode 100644 index 0000000000..96156ab09d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/main.c @@ -0,0 +1,132 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +#define Buffer_Size (8) + +uint32_t i; +uint8_t Transmit_Buffer[Buffer_Size] = { 0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF }; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + SPI_InitType SPI_InitStruct; + DMA_InitType DMA_InitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* SPI1 initialization, master mode */ + SPI_DeviceInit(SPI1); + SPI_InitStruct.Mode = SPI_MODE_MASTER; + SPI_InitStruct.ClockDivision = SPI_CLKDIV_32; + SPI_InitStruct.CSNSoft = SPI_CSNSOFT_DISABLE; + SPI_InitStruct.SPH = SPI_SPH_0; + SPI_InitStruct.SPO = SPI_SPO_0; + SPI_InitStruct.SWAP = SPI_SWAP_DISABLE; + SPI_Init(SPI1, &SPI_InitStruct); + /* Enable SPI1 smart mode */ + SPI_SmartModeCmd(SPI1, ENABLE); + + /* Channel0 initialization, Transmit_Buffer -> SPI1_TXDAT */ + DMA_DeInit(DMA_CHANNEL_0); + DMA_InitStruct.DestAddr = (uint32_t)&SPI1->TXDAT; + DMA_InitStruct.SrcAddr = (uint32_t)&Transmit_Buffer[0]; + DMA_InitStruct.FrameLen = 1 - 1; + DMA_InitStruct.PackLen = Buffer_Size - 1; + DMA_InitStruct.ReqSrc = DMA_REQSRC_SPI1TX; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_BYTE; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FIX; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_0); + + /* Enable SPI1 */ + SPI_Cmd(SPI1, ENABLE); + /* Enable channel 0 */ + DMA_Cmd(DMA_CHANNEL_0, ENABLE); + + /* Waiting DMA channel's operation done */ + while (DMA_GetINTStatus(DMA_INTSTS_C0BUSY)); + /* Waiting SPI1 transmit(via DMA channel) done */ + while (!SPI_GetStatus(SPI1, SPI_STS_DMATXDONE)); + SPI_ClearStatus(SPI1, SPI_STS_DMATXDONE); + + /* SPI/DMA resource release */ + DMA_DeInit(DMA_CHANNEL_0); + SPI_DeviceInit(SPI1); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_SPI_Transmit/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/main.h new file mode 100644 index 0000000000..747c6ffbb0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/main.h @@ -0,0 +1,30 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +extern __IO uint32_t flag_framend; +extern __IO uint32_t flag_uarterr; + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..81057b9b77 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 129 + 129 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/main.c new file mode 100644 index 0000000000..2fbeda0606 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/main.c @@ -0,0 +1,153 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +uint8_t bsrc[] = "This is a uart5 DMA send test program!\r\n"; +__IO uint32_t flag_framend; +__IO uint32_t flag_uarterr; +__IO uint32_t delay_cycles; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + DMA_InitType DMA_InitStruct; + UART_InitType UART_InitStruct; + uint8_t tx_size; + + test_success = 0; + + Clock_Init(); + + /* UART5 initialization */ + UART_DeInit(UART5); + UART_InitStruct.Baudrate = 115200; + UART_InitStruct.FirstBit = UART_FIRSTBIT_LSB; + UART_InitStruct.Mode = UART_MODE_TX; + UART_InitStruct.Parity = UART_PARITY_NONE; + UART_Init(UART5, &UART_InitStruct); + + /* Enable UART5 transmit error interrupt(transmit overrun) */ + UART_INTConfig(UART5, UART_INT_TXOV, ENABLE); + /* Enable DMA NVIC interrupt */ + NVIC_ClearPendingIRQ(UART5_IRQn); + NVIC_EnableIRQ(UART5_IRQn); + + /* DMA channel2 initialization */ + tx_size = (sizeof(bsrc) / sizeof(bsrc[0])) - 1; + DMA_DeInit(DMA_CHANNEL_2); + DMA_InitStruct.DestAddr = (uint32_t)&UART5->DATA; + DMA_InitStruct.SrcAddr = (uint32_t)&bsrc[0]; + DMA_InitStruct.FrameLen = 1 - 1; + DMA_InitStruct.PackLen = tx_size - 1; + DMA_InitStruct.ContMode = DMA_CONTMODE_DISABLE; + DMA_InitStruct.TransMode = DMA_TRANSMODE_SINGLE; + DMA_InitStruct.ReqSrc = DMA_REQSRC_UART5TX; + DMA_InitStruct.DestAddrMode = DMA_DESTADDRMODE_FIX; + DMA_InitStruct.SrcAddrMode = DMA_SRCADDRMODE_FEND; + DMA_InitStruct.TransSize = DMA_TRANSSIZE_BYTE; + DMA_Init(&DMA_InitStruct, DMA_CHANNEL_2); + + /* Enable DMA channel2 frame end interrupt */ + DMA_INTConfig(DMA_INT_C2FE, ENABLE); + /* Enable DMA NVIC interrupt */ + NVIC_ClearPendingIRQ(DMA_IRQn); + NVIC_EnableIRQ(DMA_IRQn); + + flag_framend = 0; + flag_uarterr = 0; + DMA_Cmd(DMA_CHANNEL_2, ENABLE); + + /* Waiting for DMA channel2 frame end interrupt */ + while (flag_framend == 0); + /* Waiting for UART5 transmit(via DMA channel) complete */ + while(UART_GetFlag(UART5, UART_FLAG_DMATXDONE) == 0); + UART_ClearFlag(UART5, UART_FLAG_DMATXDONE); + + /* DMA channel2, UART5 resource release */ + DMA_DeInit(DMA_CHANNEL_2); + UART_DeInit(UART5); + NVIC_DisableIRQ(DMA_IRQn); + NVIC_DisableIRQ(UART5_IRQn); + + /* Print initialization */ + Stdio_Init(); + if (flag_uarterr) + { + printf("Send finish, transmit error!\r\n"); + test_success = 0; + } + else + { + printf("Send finish, transmit ok!\r\n"); + test_success = 1; + } + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/target_isr.c new file mode 100644 index 0000000000..507eba01f3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/target_isr.c @@ -0,0 +1,313 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ + if (UART_GetINTStatus(UART5, UART_INTSTS_TXOV)) + { + flag_uarterr = 1; + UART_ClearINTStatus(UART5, UART_INTSTS_TXOV); + } +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ + if (DMA_GetINTStatus(DMA_INTSTS_C2FE)) + { + flag_framend = 1; + DMA_ClearINTStatus(DMA_INTSTS_C2FE); + } +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/DMA/DMA_UART_TransmitIT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..4228ef4050 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvoptx @@ -0,0 +1,694 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U00002CB4F9A3 -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 277 + 1 +
2904
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\target_isr.c + + \\template\../Src/target_isr.c\277 +
+ + 1 + 0 + 279 + 1 +
2910
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\target_isr.c + + \\template\../Src/target_isr.c\279 +
+ + 2 + 0 + 127 + 1 +
6290
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + \\template\../Src/main.c\127 +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + System Viewer\FLASH + 35905 + + +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..58eed69439 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 134 + 134 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/main.c new file mode 100644 index 0000000000..bae5ee73c3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/main.c @@ -0,0 +1,158 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + uint32_t i; + uint32_t CheckSum; + uint32_t w_buffer[256]; + uint16_t hw_buffer[512]; + uint8_t b_buffer[1024]; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + + for (i=0; i<1024; i++) + { + b_buffer[i] = i % 256; + if ((i%2) == 0) + hw_buffer[i/2] = 0x1234 + i; + if ((i%4) == 0) + w_buffer[i/4] = 0x12345678 + i; + } + + FLASH_Init(FLASH_CSMODE_DISABLE); + FLASH_CycleInit(); + + FLASH_SectorErase(0x10000); //erase 0x10000~0x103FC + FLASH_ProgramByte(0x10000, b_buffer, 1024); //Byte program + for (i = 0; i < 1024; i++) + { + printf("%2x\t", *((__IO uint8_t *)(i + 0x10000))); + if ((i%10) == 9) + printf("\r\n"); + } + printf("\r\n"); + + FLASH_SectorErase(0x10000); //erase 0x10000~0x103FC + FLASH_ProgramHWord(0x10000, hw_buffer, 512); //Half-word program + for (i = 0; i < 1024; i += 2) + { + printf("%4x\t", *((__IO uint16_t *)(i + 0x10000))); + if ((i%10) == 9) + printf("\r\n"); + } + printf("\r\n"); + + FLASH_SectorErase(0x10000); //erase 0x10000~0x103FC + for (i = 0; i < 1024; i++) + { + printf("%2x\t", *((__IO uint8_t *)(i + 0x10000))); + if ((i%10) == 9) + printf("\r\n"); + } + printf("\r\n"); + + FLASH_ProgramWord(0x10000, w_buffer, 256); //Word program + for (i = 0; i < 1024; i += 4) + { +#ifdef __GNUC__ + printf("%8lx\t", *((__IO uint32_t *)(i + 0x10000))); +#else + printf("%8x\t", *((__IO uint32_t *)(i + 0x10000))); +#endif + if ((i%20) == 16) + printf("\r\n"); + } + printf("\r\n"); + + CheckSum = 0; //CheckSum 0x10000~0x103FC + for (i = 0; i < 256; i++) + { + CheckSum += w_buffer[i]; + } + + /* Enable flash(NVIC) interrupt */ + FLASH_INTConfig(FLASH_INT_CS, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(FLASH_IRQn, 0); + + FLASH_SetCheckSumCompValue(CheckSum); + FLASH_SetCheckSumRange(0x10000, 0x103FC); + FLASH_Init(FLASH_CSMODE_ALWAYSON); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/target_isr.c new file mode 100644 index 0000000000..eec38e087f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ + if (FLASH_GetINTStatus(FLASH_INT_CS)) + { + FLASH_ClearINTStatus(FLASH_INT_CS); + //Flash checksum error handling + printf("Flash checksum error\r\n"); + } +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Program/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/main.h new file mode 100644 index 0000000000..ac19a33680 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/main.h @@ -0,0 +1,29 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +void UART5_InterruptService(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..6fe5e358e9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvoptx @@ -0,0 +1,695 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U0000E6A21FAB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO31 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 65 + 1 +
7992
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + +
+ + 1 + 0 + 64 + 1 +
7986
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + +
+ + 2 + 0 + 249 + 1 +
3322
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + \\template\../../../../Libraries/Lib_Driver/src/lib_flash.c\249 +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + + + 1 + 0 + 0x0007FC00 + 0 + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..903d287c03 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARM/template.uvprojx @@ -0,0 +1,652 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..06f06f7716 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 76 + 76 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/main.c new file mode 100644 index 0000000000..5040c4692f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/main.c @@ -0,0 +1,280 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ +void UART5_ProtocolInit(void); + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + + FLASH_Init(FLASH_CSMODE_DISABLE); + FLASH_CycleInit(); + + UART5_ProtocolInit(); + + test_success = 1; + + printf("This is a Flash protection template\r\n"); + printf("===========================================\r\n"); + printf("1. Enable write protection.\r\n"); + printf("2. Disable write protection.\r\n"); + printf("3. Enable ICE protection.\r\n"); + printf("4. Disable ICE protection.\r\n"); + printf("5. Enable read protection.\r\n"); + printf("6. Disable read protection.\r\n"); + printf("===========================================\r\n"); + printf("Please input 1 ~ 6\r\n"); + printf("\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +void UART5_ProtocolInit(void) +{ + UART_InitType UART_InitStruct; + + UART_DeInit(UART5); + UART_StructInit(&UART_InitStruct); + UART_InitStruct.Mode = UART_MODE_TX | UART_MODE_RX; + UART_InitStruct.Baudrate = 115200; + UART_InitStruct.FirstBit = UART_FIRSTBIT_LSB; + UART_InitStruct.Parity = UART_PARITY_NONE; + UART_Init(UART5, &UART_InitStruct); + + UART_INTConfig(UART5, UART_INT_RX, ENABLE); + UART_ClearINTStatus(UART5, UART_INTSTS_RX); + CORTEX_SetPriority_ClearPending_EnableIRQ(UART5_IRQn, 0); +} + +static void Flash_EnableWriteProtectionTest(void) +{ + uint8_t i; + uint8_t wdata[16], rdata[16]; + + for (i=0; i<16; i++) + { + wdata[i] = 17*i; + rdata[i] = 0; + } + + /* Disable Block-12(0x30000~0x33FFF) */ + FLASH_WriteProtection(FLASH_BLOCK_12, DISABLE); + FLASH_SectorErase(0x30000); + FLASH_ProgramByte(0x30000, wdata, 16); + for (i=0; i<16; i++) + rdata[i] = *(__IO uint8_t *)(0x30000+i); + + printf("Block-12(0x30000~0x33FFF) Write Protection disabled\r\n"); + printf("0x30000 ~ 0x3000F write:\r\n"); + for (i=0; i<16; i++) + printf("0x%x\t", wdata[i]); + printf("\r\n"); + printf("0x30000 ~ 0x3000F read:\r\n"); + for (i=0; i<16; i++) + printf("0x%x\t", rdata[i]); + printf("\r\n"); + + /* Enable Block-12(0x30000~0x33FFF) */ + FLASH_WriteProtection(FLASH_BLOCK_12, ENABLE); + FLASH_SectorErase(0x30000); + for (i=0; i<16; i++) + rdata[i] = *(__IO uint8_t *)(0x30000+i); + + printf("Block-12(0x30000~0x33FFF) Write Protection enabled\r\n"); + printf("Sector Erase(0x30000~0x303FF) fail\r\n"); + printf("0x30000 ~ 0x3000F read:\r\n"); + for (i=0; i<16; i++) + printf("0x%x\t", rdata[i]); + printf("\r\n"); + printf("\r\n"); +} + +static void Flash_DisableWriteProtectionTest(void) +{ + uint8_t i; + uint8_t rdata[16]; + + for (i=0; i<16; i++) + { + rdata[i] = 0; + } + + /* Disable Block-12(0x30000~0x33FFF) */ + FLASH_WriteProtection(FLASH_BLOCK_12, DISABLE); + FLASH_SectorErase(0x30000); + for (i=0; i<16; i++) + rdata[i] = *(__IO uint8_t *)(0x30000+i); + + printf("Block-12(0x30000~0x33FFF) Write Protection disabled\r\n"); + printf("Sector Erase(0x30000~0x303FF) OK\r\n"); + printf("0x30000 ~ 0x3000F read:\r\n"); + for (i=0; i<16; i++) + printf("0x%x\t", rdata[i]); + printf("\r\n"); + printf("\r\n"); +} + +static void Flash_EnableICEProtectionTest(void) +{ + FLASH_ICEProtection(ENABLE); + printf("ICE Protection enabled, can not connect target with SWD\r\n"); + printf("\r\n"); +} + +static void Flash_DisableICEProtectionTest(void) +{ + printf("The last sector be erased\r\n"); + printf("ICE Protection disabled, reset target, can connect target with SWD\r\n"); + printf("\r\n"); + + FLASH_ICEProtection(DISABLE); +} + +static void Flash_EnableReadProtectionTest(void) +{ + uint8_t i; + uint8_t rdata[16]; + + FLASH_SetReadProtection(FLASH_BLOCK_12); + FLASH_SectorErase(0x30000); + for (i=0; i<16; i++) + rdata[i] = *(__IO uint8_t *)(0x30000+i); + + printf("Block-12(0x30000~0x33FFF) Read Protection enabled\r\n"); + printf("Sector Erase(0x30000~0x303FF) OK\r\n"); + printf("0x30000 ~ 0x3000F read:\r\n"); + for (i=0; i<16; i++) + printf("0x%x\t", rdata[i]); + printf("\r\n"); + printf("\r\n"); +} + +static void Flash_DisableReadProtectionTest(void) +{ + printf("Read Protection disabled, Chip erase\r\n"); + FLASH_ChipErase(); +} + +void UART5_InterruptService(void) +{ + uint8_t data = 0U; + + /* Error handle */ + if ((UART_GetINTStatus(UART5, UART_INTSTS_RXPE)) ||\ + (UART_GetINTStatus(UART5, UART_INTSTS_RXOV))) + { + UART_ClearINTStatus(UART5, UART_INTSTS_RXPE); + UART_ClearINTStatus(UART5, UART_INTSTS_RXOV); + printf("Recieved data error, data invalid, input again\r\n"); + } + /* Get data */ + else + { + if (UART_GetINTStatus(UART5, UART_INTSTS_RX)) + { + UART_ClearINTStatus(UART5, UART_INTSTS_RX); + data = UART_ReceiveData(UART5); + } + } + + switch (data) + { + case 1: + printf("[1] Enable write protection.\r\n"); + Flash_EnableWriteProtectionTest(); + break; + case 2: + printf("[2] Disable write protection.\r\n"); + Flash_DisableWriteProtectionTest(); + break; + case 3: + printf("[3] Enable ICE protection.\r\n"); + Flash_EnableICEProtectionTest(); + break; + case 4: + printf("[4] Disable ICE protection.\r\n"); + Flash_DisableICEProtectionTest(); + break; + case 5: + printf("[5] Enable read protection.\r\n"); + Flash_EnableReadProtectionTest(); + break; + case 6: + printf("[6] Disable read protection.\r\n"); + Flash_DisableReadProtectionTest(); + break; + default: + printf("Recieved data invalid, input again\r\n"); + break; + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/target_isr.c new file mode 100644 index 0000000000..aa344c738c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/target_isr.c @@ -0,0 +1,306 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ + UART5_InterruptService(); +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/Flash/Flash_Protection_UARTProtocol/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1fb294b47b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 64 + 64 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..fd25a18c3c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/main.c new file mode 100644 index 0000000000..9aa30ff77a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/main.c @@ -0,0 +1,88 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + PMU_WakeUpPinConfig(GPIO_Pin_6, IOA_EDGEBOTH); + PMU_ClearIOAINTStatus(GPIO_Pin_6); + PMU_INTConfig(PMU_INT_IOAEN, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(PMU_IRQn, 0); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/target_isr.c new file mode 100644 index 0000000000..6dc7c3c683 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/target_isr.c @@ -0,0 +1,308 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ + if (PMU_GetIOAINTStatus(GPIO_Pin_6)) + { + PMU_ClearIOAINTStatus(GPIO_Pin_6); + printf("PMU, IOA6 EXIT\r\n"); + } +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_EXIT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1fb294b47b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 64 + 64 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..fd25a18c3c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/main.c new file mode 100644 index 0000000000..36167d7854 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/main.c @@ -0,0 +1,135 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} +void Print_CurrentTime(void) +{ + RTC_TimeTypeDef rTime; + + /* Get time */ + RTC_GetTime(&rTime, RTC_INACCURATE); +#ifdef __GNUC__ + printf("20%lx-", rTime.Year); + printf("%02lx-", rTime.Month); + printf("%02lx ", rTime.Date); + printf("Weekday %lx ", rTime.WeekDay); + printf("%02lx:", rTime.Hours); + printf("%02lx:", rTime.Minutes); + printf("%02lx\r\n", rTime.Seconds); +#else + printf("20%x-", rTime.Year); + printf("%02x-", rTime.Month); + printf("%02x ", rTime.Date); + printf("Weekday %x ", rTime.WeekDay); + printf("%02x:", rTime.Hours); + printf("%02x:", rTime.Minutes); + printf("%02x\r\n", rTime.Seconds); +#endif +} +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + PMU_WakeUpPinConfig(GPIO_Pin_6, IOA_EDGEBOTH); + PMU_ClearIOAINTStatus(GPIO_Pin_6); + PMU_INTConfig(PMU_INT_IOAEN, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(PMU_IRQn, 0); + + + /* Selects VDCIN hysteresis */ + PMU_VDCINHYSSEL(PMU_VDCINHYSSEL_200MV); + /* Enable VDCIN detector */ + PMU_VDCINDetectorCmd(ENABLE); + + printf("========================\r\n"); + Print_CurrentTime(); + + test_success = 1; + + while (1) + { + /* If VDCIN drop, enter sleep mode*/ + if (PMU_GetVDCINDropStatus()) + { + /* Disable Watch Dog Timer */ + WDT_Disable(); + + PMU_EnterSleepMode(); + } + else + { + printf("VDCIN is not drop!\r\n"); + while (1); + } + WDT_Clear(); + /* Quit sleep mode, configure clocks/UART print */ + Print_CurrentTime(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/target_isr.c new file mode 100644 index 0000000000..679e1ea99d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ + if (PMU_GetIOAINTStatus(GPIO_Pin_6)) + { + PMU_ClearIOAINTStatus(GPIO_Pin_6); + Stdio_Init(); + printf("PMU, IOA6 EXIT\r\n"); + } +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIOA_WakeUp/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..a1ffdee562 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + 72 + 72 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 49681276 + 0 + 0 + 5 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..fd25a18c3c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/main.c new file mode 100644 index 0000000000..7258d16af8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/main.c @@ -0,0 +1,103 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +__IO uint32_t delay_cycles; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* De-initialization UART, UART5 transmit pin(IOB7) as GPIO */ + UART_DeInit(UART5); + + /* Configure IOB7, output CMOS mode */ + GPIO_WriteBit(GPIO_B, 7, 0); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + test_success = 1; + + while (1) + { + /* Uncertain delay, set IOB7 */ + for (delay_cycles=0; delay_cycles<10000; delay_cycles++); + GPIO_WriteBit(GPIO_B, 7, 1); + + /* Uncertain delay, reset IOB7 */ + for (delay_cycles=0; delay_cycles<10000; delay_cycles++); + GPIO_WriteBit(GPIO_B, 7, 0); + + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/GPIO/GPIO_Toggle/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..c10c524977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 59 + 59 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/main.c new file mode 100644 index 0000000000..d6d2cd898a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C1024_100KClock/Src/main.c @@ -0,0 +1,148 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +#define BufferSize 1000 +uint8_t Wr_Buffer[BufferSize]; +uint8_t Rd_Buffer[BufferSize]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 26M (AHB Clock divided by 1) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 1; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + I2C_InitType I2C_InitStruct; + I2C_WRType I2C_WRInitStruct; + uint16_t retval; + uint32_t i; + uint8_t State_OK = 1; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + for (i=0; i +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..6e325f4d46 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 279 + 279 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/main.c new file mode 100644 index 0000000000..1d32dac247 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/main.c @@ -0,0 +1,147 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +uint8_t Wr_Buffer[512]; +uint8_t Rd_Buffer[512]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 26M (AHB Clock divided by 1) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 1; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + I2C_InitType I2C_InitStruct; + I2C_WRType I2C_WRInitStruct; + uint16_t retval; + uint32_t i; + uint8_t State_OK = 1; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + for (i=0; i<512; i++) + { + Wr_Buffer[i] = rand() % 256; + Rd_Buffer[i] = 0; + } + + /* I2C initialization */ + I2C_DeInit(I2C_REMAP_DISABLE); + I2C_StructInit(&I2C_InitStruct); + I2C_Init(&I2C_InitStruct); + + /* Enable I2C */ + I2C_Cmd(ENABLE); + + test_success = 1; + + /* Write the entire EEPROM with random numbers */ + I2C_WRInitStruct.SubAddrType = I2C_SUBADDR_2BYTE; + I2C_WRInitStruct.SlaveAddr = 0xA0; + I2C_WRInitStruct.PageRange = 64; + I2C_WRInitStruct.Length = 512; + I2C_WRInitStruct.pBuffer = Wr_Buffer; + I2C_WRInitStruct.SubAddress = 0; + retval = I2C_MasterWriteBytes(&I2C_WRInitStruct); + if (retval) + { + printf("I2C write error!\r\n"); + State_OK = 0; + } + + /* Read datas from EEPROM */ + I2C_WRInitStruct.pBuffer = Rd_Buffer; + retval = I2C_MasterReadBytes(&I2C_WRInitStruct); + if (retval) + { + printf("I2C read error!\r\n"); + State_OK = 0; + } + + I2C_DeInit(I2C_REMAP_DISABLE); + + /* Compare datas */ + for (i=0; i<512; i++) + { + if (Rd_Buffer[i] != Wr_Buffer[i]) + { + State_OK = 0; + break; + } + } + + if (State_OK) + printf("Write/read EEPROM OK!\r\n"); + else + printf("Write/read EEPROM error!\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_100KClock/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..6e325f4d46 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 279 + 279 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/main.c new file mode 100644 index 0000000000..bf992f57f0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/main.c @@ -0,0 +1,168 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +uint8_t Wr_Buffer[512]; +uint8_t Rd_Buffer[512]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 26M (AHB Clock divided by 1) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 1; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief TMR3_13M + */ +void TMR3_13M(void) +{ + TMR_InitType TMR_InitStruct; + + TMR_DeInit(TMR3); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 2 -1; + TMR_Init(TMR3, &TMR_InitStruct); + + TMR_Cmd(TMR3, ENABLE); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + I2C_InitType I2C_InitStruct; + I2C_WRType I2C_WRInitStruct; + uint16_t retval; + int i; + uint8_t State_OK = 1; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + for (i=0; i<512; i++) + { + Wr_Buffer[i] = rand() % 256; + Rd_Buffer[i] = 0; + } + + /* Start the TMR3 Base generation with overflow frequency equal to 13107200Hz */ + TMR3_13M(); + + /* I2C initialization */ + I2C_DeInit(I2C_REMAP_DISABLE); + I2C_StructInit(&I2C_InitStruct); + I2C_InitStruct.ClockSource = I2C_CLOCKSOURCE_TIM3OFD8; + I2C_Init(&I2C_InitStruct); + + /* Enable I2C */ + I2C_Cmd(ENABLE); + + test_success = 1; + + /* Write the entire EEPROM with random numbers */ + I2C_WRInitStruct.SubAddrType = I2C_SUBADDR_2BYTE; + I2C_WRInitStruct.SlaveAddr = 0xA0; + I2C_WRInitStruct.PageRange = 64; + I2C_WRInitStruct.Length = 512; + I2C_WRInitStruct.pBuffer = Wr_Buffer; + I2C_WRInitStruct.SubAddress = 0; + retval = I2C_MasterWriteBytes(&I2C_WRInitStruct); + if (retval) + { + printf("I2C write error!\r\n"); + State_OK = 0; + } + + /* Read datas from EEPROM */ + I2C_WRInitStruct.pBuffer = Rd_Buffer; + retval = I2C_MasterReadBytes(&I2C_WRInitStruct); + if (retval) + { + printf("I2C read error!\r\n"); + State_OK = 0; + } + + I2C_DeInit(I2C_REMAP_DISABLE); + TMR_DeInit(TMR3); + + /* Compare datas */ + for (i=0; i<512; i++) + { + if (Rd_Buffer[i] != Wr_Buffer[i]) + { + State_OK = 0; + break; + } + } + + if (State_OK) + printf("Write/read EEPROM OK!\r\n"); + else + printf("Write/read EEPROM error!\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/I2C/I2C_EEPROM_AT24C256_1MClock/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/main.h new file mode 100644 index 0000000000..b5ff1a3505 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/main.h @@ -0,0 +1,29 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +void ISO78160_TransmitErrorHandle(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..088664500f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..b7bb72cc76 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 96 + 96 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/main.c new file mode 100644 index 0000000000..58f06b4315 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/main.c @@ -0,0 +1,120 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +void ISO78160_TransmitErrorHandle(void) +{ + /* Transmit error handle */ + if (ISO7816_GetINTStatus(ISO78160, ISO7816_INTSTS_TXRTYERR)) + { + ISO7816_ClearINTStatus(ISO78160, ISO7816_INTSTS_TXRTYERR); + printf("Transmit error\r\n"); + } +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + ISO7816_InitType ISO7816_InitStruct; + uint8_t data[4] = { 0x12, 0x34, 0x56, 0x78 }; + int i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* ISO78160 initialization */ + ISO7816_DeInit(ISO78160); + ISO7816_InitStruct.FirstBit = ISO7816_FIRSTBIT_MSB; + ISO7816_InitStruct.Parity = ISO7816_PARITY_EVEN; + ISO7816_InitStruct.Baudrate = 9600; + ISO7816_InitStruct.TXRetry = ISO7816_TXRTY_5; + ISO7816_InitStruct.RXACKLength = ISO7816_RXACKLEN_2; + ISO7816_InitStruct.TXNACKLength = ISO7816_TXNACKLEN_2; + ISO7816_Init(ISO78160, &ISO7816_InitStruct); + + /* Enable ISO78160 transmit error interrupt */ + ISO7816_INTConfig(ISO78160, ISO7816_INT_TXRTYERR, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ISO78160_IRQn, 3); + + ISO7816_Cmd(ISO78160, ENABLE); + + for (i=0; i<4; i++) + { + ISO7816_SendData(ISO78160, data[i]); + while (!ISO7816_GetINTStatus(ISO78160, ISO7816_INTSTS_TXDONE)); + ISO7816_ClearINTStatus(ISO78160, ISO7816_INTSTS_TXDONE); + } + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/target_isr.c new file mode 100644 index 0000000000..91e4ad66eb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ + ISO78160_TransmitErrorHandle(); +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/ISO7816/ISO7816_Transmit/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..ed45bdeba0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..2ebf86f188 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 171 + 171 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/main.c new file mode 100644 index 0000000000..c45b27a1c1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/main.c @@ -0,0 +1,235 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +#define lcd_a 0x08 +#define lcd_b 0x04 +#define lcd_c 0x02 + +#define lcd_d 0x10 +#define lcd_e 0x20 +#define lcd_g 0x40 +#define lcd_f 0x80 + +void LCD_Clean() +{ + int i; + for( i=0;i<40;i++) + LCD->FB[i] =0x00; +} + +uint32_t LCD_NTOF(uint32_t num1) +{ + switch (num1) + { + case 0: num1=lcd_a+lcd_b+lcd_c+lcd_d+lcd_e+lcd_f; break; + case 1: num1=lcd_b+lcd_c; break; + case 2: num1=lcd_a+lcd_b+lcd_g+lcd_e+lcd_d; break; + case 3: num1=lcd_a+lcd_b+lcd_g+lcd_c+lcd_d; break; + case 4: num1=lcd_f+lcd_g+lcd_b+lcd_c; break; + case 5: num1=lcd_a+lcd_f+lcd_g+lcd_c+lcd_d; break; + case 6: num1=lcd_a+lcd_f+lcd_e+lcd_d+lcd_c+lcd_g;break; + case 7: num1=lcd_a+lcd_b+lcd_c; break; + case 8: num1=lcd_a+lcd_b+lcd_c+lcd_d+lcd_e+lcd_f+lcd_g; break; + case 9: num1=lcd_a+lcd_b+lcd_c+lcd_d+lcd_f+lcd_g; break; + default: num1=lcd_d; + } + num1= ((num1&0xf0)<<4)+(num1&0x0f); + return num1; +} + +uint32_t hextobcd(uint32_t num) +{ + int num_1,num_2,num_3,num_4,num_5,num_6,num_7,num_8; + num_1=num%10; + num_2=num%100/10; + num_3=num%1000/100; + num_4=num%10000/1000; + num_5=num%100000/10000; + num_6=num%1000000/100000; + num_7=num%10000000/1000000; + num_8=num%100000000/10000000; + + num=num_1+(num_2<<4)+(num_3<<8)+(num_4<<12)+ \ + (num_5<<16)+(num_6<<20)+(num_7<<24)+(num_8<<28); + return num; +} + + +void LCD_Number(uint32_t num) +{ + uint32_t num1,num2,num3,num4,num5,num6,num7,num8; + + num=hextobcd(num); + + num1=(num>>28)&0xf; + LCD->FB[5]=LCD_NTOF(num1); //seg20,seg21 + + num2=(num>>24)&0xf; + LCD->FB[3]=LCD_NTOF(num2)<<16;//seg14,seg15 + + num3=(num>>20)&0xf; + LCD->FB[6]=(LCD_NTOF(num3)&0xff00); //seg25 + LCD->FB[6]|=(LCD_NTOF(num3)&0x00ff)<<16; //seg26 + + num4=(num>>16)&0xf; + LCD->FB[6]|=(LCD_NTOF(num4)&0xff00)<<16; //seg27 + LCD->FB[8]=(LCD_NTOF(num4)&0x00ff)<<16; //seg34 + + num5=(num>>12)&0xf; + LCD->FB[11]=(LCD_NTOF(num5)&0xff00)<<16; //seg47 + LCD->FB[12]=(LCD_NTOF(num5)&0x00ff)<<8; //seg49 + + num6=(num>>8)&0xf; + LCD->FB[13]=(LCD_NTOF(num6)&0xff00)>>8; //seg52 + LCD->FB[13]|=(LCD_NTOF(num6)&0x00ff)<<24; //seg55 + + num7=(num>>4)&0xf; + LCD->FB[14]=(LCD_NTOF(num7)&0xff00)>>8; //seg56 + LCD->FB[14]|=(LCD_NTOF(num7)&0x00ff)<<8; //seg57 + + num8=(num>>0)&0xf; + LCD->FB[14]|=(LCD_NTOF(num8)&0xff00)<<8; //seg58 + LCD->FB[14]|=(LCD_NTOF(num8)&0x00ff)<<24; //seg59 +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + LCD_InitType LCD_InitStruct; + TMR_InitType TMR_InitStruct; + LCD_IOInitType LCD_IOInitStruct; + uint32_t tmp0, tmp1; + uint16_t tmp2; + uint32_t ticks_start; + uint32_t i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* LCD initialization, configure with default value */ + LCD_DeInit(); + LCD_StructInit(&LCD_InitStruct); + /* Initialize the BKFILL member */ + LCD_InitStruct.BKFILL = LCD_BKFILL_0; + /* Initialize the Drv member */ + LCD_InitStruct.Drv = LCD_DRV_300; + /* Initialize the FBMODE member */ + LCD_InitStruct.FBMODE = LCD_FBMODE_BUFA; + /* Initialize the FRQ member */ + LCD_InitStruct.FRQ = LCD_FRQ_512H; + /* Initialize the SWPR member */ + LCD_InitStruct.SWPR = 0; + /* Initialize the Type member */ + LCD_InitStruct.Type = LCD_TYPE_4COM; + LCD_Init(&LCD_InitStruct); + + LCD_Clean(); + LCD->FB[3] =0X0f080000; + LCD->FB[5] =0X00000E06; + LCD->FB[6] =0X0B000B00; + LCD->FB[11] =0X0B000000; + LCD->FB[12] =0X00000E00; + + tmp0 = BIT0|BIT1|BIT2|BIT3|BIT8|BIT9|BIT10|BIT11|BIT12|BIT13|BIT14|BIT15| \ + BIT20|BIT21|BIT22|BIT23|BIT24|BIT25|BIT26|BIT27; + tmp1 = BIT2|BIT15|BIT17|BIT18|BIT19|BIT20|BIT23|BIT24|BIT25|BIT26|BIT27; + tmp2 = 0; + + /* Enable LCD, configure LCD COMs and SEGs IO(disable I/O) */ + LCD_IOInitStruct.COMMode = LCD_TYPE_4COM; + LCD_IOInitStruct.SegCtrl0 = tmp0; + LCD_IOInitStruct.SegCtrl1 = tmp1; + LCD_IOInitStruct.SegCtrl2 = tmp2; + LCD_Cmd(&LCD_IOInitStruct, ENABLE); + + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 0xFFFFFFFF; + TMR_Init(TMR0, &TMR_InitStruct); + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + test_success = 1; + + while (1) + { + for (i=0; i<100; i++) + { + LCD_Number(i); + + WDT_Clear(); + + /* Delay 200ms */ + ticks_start = TMR_GetCurrentValue(TMR0); + while ((ticks_start - TMR_GetCurrentValue(TMR0)) < (13107200/5-1)); + } + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_D1135_DisplayNumber/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..edafc82faf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvoptx @@ -0,0 +1,656 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 314 + 1 +
5148
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + \\template\../Src/main.c\314 +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 1 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..2367cbe894 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 320 + 320 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/main.c new file mode 100644 index 0000000000..f2745f92ad --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/main.c @@ -0,0 +1,345 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +#define Const_LCDRAMLen 17 + +uint8_t guc_LCDRAM[Const_LCDRAMLen]; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + + + +void LCD_Clean() +{ + int i; + for( i=0;i<40;i++) + LCD->FB[i] =0x00; +} + + +#define number9H 1 +#define number9L 0 +#define number8H 3 +#define number8L 2 +#define number7H 5 +#define number7L 4 +#define number6H 7 +#define number6L 6 +#define number5H 9 +#define number5L 8 +#define number4H 11 +#define number4L 10 +#define number3H 13 +#define number3L 12 +#define number2H 15 +#define number2L 14 + +const uint8_t NumAddr[16] = {number9H,number9L,number8H,number8L,number7H,number7L,number6H,number6L,number5H, + number5L,number4H,number4L,number3H,number3L,number2H,number2L}; + + +#define NUM1B BIT4 +#define NUM1G BIT5 +#define NUM1C BIT6 + +#define NUM1A BIT4 +#define NUM1F BIT5 +#define NUM1E BIT6 +#define NUM1D BIT7 + + +const uint8_t NUMTABLE_1L[]= +{ + NUM1B+NUM1C, //0 + NUM1B+NUM1C, //1 + NUM1G+NUM1B, //2 + NUM1B+NUM1G+NUM1C, //3 + NUM1B+NUM1C+NUM1G, //4 + NUM1G+NUM1C, //5 + NUM1G+NUM1C, //6 + NUM1B+NUM1C, //7 + NUM1G+NUM1B+NUM1C, //8 + NUM1B+NUM1G+NUM1C, //9 + + NUM1G+NUM1B+NUM1C, //A + NUM1C+NUM1G, //B + 0, //C + NUM1B+NUM1C+NUM1G, //D + NUM1G, //E + NUM1G, //F +}; + +const uint8_t NUMTABLE_1H[]= +{ + NUM1A+NUM1E+NUM1F+NUM1D, //0 + 0, //1 + NUM1D+NUM1E+NUM1A, //2 + NUM1D+NUM1A, //3 + NUM1F, //4 + NUM1D+NUM1F+NUM1A, //5 + NUM1D+NUM1E+NUM1F+NUM1A, //6 + NUM1A, //7 + NUM1D+NUM1E+NUM1F+NUM1A, //8 + NUM1A+NUM1D+NUM1F, //9 + + NUM1E+NUM1F+NUM1A, //A + NUM1D+NUM1E+NUM1F, //B + NUM1A+NUM1D+NUM1E+NUM1F, //C + NUM1D+NUM1E, //D + NUM1D+NUM1E+NUM1F+NUM1A, //E + NUM1E+NUM1F+NUM1A, //F +}; + +#define N_Resd1H 0xf1 +#define N_Resd1L 0xf0 + +#define LCD_CHAR1H_G (NUM1G) //'-' +#define LCD_CHAR1L_G (0) //'-' +#define LCD_CHAR1H_L (NUM1D+NUM1E+NUM1F) //'L' +#define LCD_CHAR1L_L (0) //'L' +#define LCD_CHAR1H_r (NUM1E+NUM1G) //'r' +#define LCD_CHAR1L_r (0) //'r' +#define LCD_CHAR1H_n (NUM1E+NUM1G) //'n' +#define LCD_CHAR1L_n (NUM1C) //'n' +#define LCD_CHAR1H_o (NUM1D+NUM1E+NUM1G) //'o' +#define LCD_CHAR1L_o (NUM1C) //'o' +#define LCD_CHAR1H_C (NUM1D+NUM1E+NUM1F) //'C' +#define LCD_CHAR1L_C (NUM1A) //'C' +#define LCD_CHAR1H_E (NUM1D+NUM1E+NUM1F+NUM1G) //'E' +#define LCD_CHAR1L_E (NUM1A) //'E' + + +void Disp_Numb(uint32_t data1, uint32_t type) +{ + uint8_t tmpdata, tmptype; + uint8_t i; + uint8_t tmpdisph,tmpdispl; + uint8_t *p; + uint8_t *q; + + for(i=0; i<8; i++) + { + tmpdata = (uint8_t)(data1 & 0x0F); //Get the last digit + tmptype = (uint8_t)(type & 0x0F); + data1 >>= 4; //Right shift + type >>= 4; + + tmpdisph = NUMTABLE_1H[tmpdata]; //Get high display code + tmpdispl = NUMTABLE_1L[tmpdata]; //Get low display code + +// + p = guc_LCDRAM + NumAddr[i*2]; //Digital display buffer + q = guc_LCDRAM + NumAddr[i*2+1]; //Digital display buffer + + *p = 0; //Clear only digits + *q = 0; //Clear only digits + + + switch(tmptype) //type + { + case 0: + *p |= tmpdisph; //show number + *q |= tmpdispl; //show number + + break; + case 1: + *p |= LCD_CHAR1H_G; + *q |= LCD_CHAR1L_G; //show '-' + break; + case 2: //show 'L' + *p |= LCD_CHAR1H_L; + *q |= LCD_CHAR1L_L; + break; + case 3: //show 'r' + *p |= LCD_CHAR1H_r; + *q |= LCD_CHAR1L_r; + break; + case 4: //show 'n' + *p |= LCD_CHAR1H_n; + *q |= LCD_CHAR1L_n; + break; + case 5: //show 'o' + *p |= LCD_CHAR1H_o; + *q |= LCD_CHAR1L_o; + break; + case 6: //ÏÔʾ×Öĸ¡®E¡¯ + *p |= LCD_CHAR1H_E; + *q |= LCD_CHAR1L_E; + break; + case 7: //ÏÔʾ×Öĸ¡®C¡¯ + *p |= LCD_CHAR1H_C; + *q |= LCD_CHAR1L_C; + break; + case 0x0a: + *p |= 0x00; //clear + *q |= 0x00; + break; + default: + break; + } + } +} + + void RefreshLCDRAM(uint8_t *p) + { + + LCD->FB[1] = (((uint32_t)(guc_LCDRAM[2]&0xff) << 24) | ((uint32_t)(guc_LCDRAM[1]&0xff) << 8) | ((uint32_t)(guc_LCDRAM[0]&0xff))); + + LCD->FB[2] = ( ((uint32_t)(guc_LCDRAM[4]&0xff) << 8) | ((uint32_t)(guc_LCDRAM[3]&0xff))); + + LCD->FB[6] = (((uint32_t)(guc_LCDRAM[6]&0xff) << 24) | ((uint32_t)(guc_LCDRAM[5]&0xff) << 16)); + + LCD->FB[7] = (((uint32_t)(guc_LCDRAM[9]&0xff) << 24) |((uint32_t)(guc_LCDRAM[8]&0xff) << 16) | ((uint32_t)(guc_LCDRAM[7]&0xff))); + + LCD->FB[8] = (((uint32_t)(guc_LCDRAM[13]&0xff) << 24) | ((uint32_t)(guc_LCDRAM[12]&0xff) << 16) | ((uint32_t)(guc_LCDRAM[11]&0xff) << 8) | ((uint32_t)(guc_LCDRAM[10]&0xff) )); + + LCD->FB[9] = ( ((uint32_t)(guc_LCDRAM[16]&0xff) << 16) + | ((uint32_t)(guc_LCDRAM[15]&0xff) << 8) | (uint32_t)(guc_LCDRAM[14]&0xff)); + + } + + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + LCD_InitType LCD_InitStruct; + TMR_InitType TMR_InitStruct; + LCD_IOInitType LCD_IOInitStruct; + uint32_t tmp0, tmp1; + uint16_t tmp2; + uint32_t ticks_start; + uint32_t i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* LCD initialization, configure with default value */ + LCD_DeInit(); + + for(i=0; i<400000; i++) + { + __NOP(); + } + + LCD_StructInit(&LCD_InitStruct); + /* Initialize the BKFILL member */ + LCD_InitStruct.BKFILL = LCD_BKFILL_0; + /* Initialize the Drv member */ + LCD_InitStruct.Drv = LCD_DRV_600; + /* Initialize the FBMODE member */ + LCD_InitStruct.FBMODE = LCD_FBMODE_BUFA; + /* Initialize the FRQ member */ + LCD_InitStruct.FRQ = LCD_FRQ_256H; + /* Initialize the SWPR member */ + LCD_InitStruct.SWPR = 0; + /* Initialize the Type member */ + LCD_InitStruct.Type = LCD_TYPE_8COM; + LCD_Init(&LCD_InitStruct); + + LCD_Clean(); + LCD->FB[3] =0X0f080000; + LCD->FB[5] =0X00000E06; + LCD->FB[6] =0X0B000B00; + LCD->FB[11] =0X0B000000; + LCD->FB[12] =0X00000E00; + + tmp0 = 0xDC0003B0; //PUMA + tmp1 = 0x0000007F; + tmp2 = 0x00000000; + + /* Enable LCD, configure LCD COMs and SEGs IO(disable I/O) */ + LCD_IOInitStruct.COMMode = LCD_TYPE_8COM; + LCD_IOInitStruct.SegCtrl0 = tmp0; + LCD_IOInitStruct.SegCtrl1 = tmp1; + LCD_IOInitStruct.SegCtrl2 = tmp2; + LCD_Cmd(&LCD_IOInitStruct, ENABLE); + + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 0xFFFFFFFF; + TMR_Init(TMR0, &TMR_InitStruct); + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + test_success = 1; + + while (1) + { + for (i=000; i<200; i++) + { + Disp_Numb(0x12345678+i, 0x00000000); + RefreshLCDRAM(guc_LCDRAM); + WDT_Clear(); + + /* Delay 200ms */ + ticks_start = TMR_GetCurrentValue(TMR0); + while ((ticks_start - TMR_GetCurrentValue(TMR0)) < (13107200/5-1)); + } + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/LCD/LCD_TS_DH_3541_DisplayNumber/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..03ac330afe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400*(n)/1024-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f3574d0a12 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,638 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..903d287c03 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,652 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..d34bf48793 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 72 + 72 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/main.c new file mode 100644 index 0000000000..4b405a36f4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/main.c @@ -0,0 +1,107 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* AVCC Lower Power Detector ENABLE */ + PMU_AVCCCmd(ENABLE); + PMU_AVCCLVDetectorCmd(ENABLE); + + /* Clear AVCCLV interrupt flag */ + ANA_ClearINTStatus(ANA_INT_AVCCLV); + /* Enable AVCCLV interrupt, ANA NVIC interrupt */ + ANA_INTConfig(ANA_INT_AVCCLV, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + test_success = 1; + + /* Disable WDT, enter sleep mode */ + printf("Enter sleep mode\r\n"); + WDT_Disable(); + if (PMU_EnterSleepMode()) + { + printf("Enter sleep fail\r\n"); + while (1); + } + + /* Quit sleep mode, Clock initialization */ + Clock_Init(); + Stdio_Init(); + printf("Exit sleep mode\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/target_isr.c new file mode 100644 index 0000000000..a25a1c3826 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if (ANA_GetINTStatus(ANA_INT_AVCCLV)) + { + ANA_ClearINTStatus(ANA_INT_AVCCLV); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/AVCCLV_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..d34bf48793 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 72 + 72 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/main.c new file mode 100644 index 0000000000..741b63b250 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/main.c @@ -0,0 +1,106 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /*VDD alarm threshole is 3.6v, Check every 30us */ + PMU_VDDAlarmConfig(PMU_VDDALARM_3_6V, PMU_VDDALARM_CHKFRE_30US); + + /* Clear VDDALARM interrupt flag */ + ANA_ClearINTStatus(ANA_INT_VDDALARM); + /* Enable VDDALARM interrupt, ANA NVIC interrupt */ + ANA_INTConfig(ANA_INT_VDDALARM, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 0); + + test_success = 1; + + /* Disable WDT, enter sleep mode */ + printf("Enter sleep mode\r\n"); + WDT_Disable(); + if (PMU_EnterSleepMode()) + { + printf("Enter sleep fail\r\n"); + while (1); + } + + /* Quit sleep mode, Clock initialization */ + Clock_Init(); + Stdio_Init(); + printf("Exit sleep mode\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/target_isr.c new file mode 100644 index 0000000000..06e1dfb1a3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if (ANA_GetINTStatus(ANA_INT_VDDALARM)) + { + ANA_ClearINTStatus(ANA_INT_VDDALARM); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/POWER/VDDAlarm_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..4b2dfcb207 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1896d9045c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 86 + 86 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/main.c new file mode 100644 index 0000000000..a0e4c8ef7f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/main.c @@ -0,0 +1,110 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + PWM_BaseInitType PWM_BaseInitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* De-initialization UART, UART5 transmit pin(IOB7) as GPIO */ + UART_DeInit(UART5); + /* Configure IOB7, output CMOS mode, output low */ + GPIO_WriteBit(GPIO_B, 7, 0); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + /* Enable PWM0 base interrupt, PWM0 NVIC interrupt */ + PWM_BaseINTConfig(PWM0, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(PWM0_IRQn, 0); + + /* Configure PWM0 CCR0 */ + PWM_CCRConfig(PWM0, PWM_CHANNEL_0, 32768-1); + PWM_ClearCounter(PWM0); + /* PWM0 base initialization + - PWM0 clock: 3276800Hz + - Count Mode: Up + Interrupt interval period = 32768/3276800 = 10ms */ + PWM_BaseInitStruct.ClockDivision = PWM_CLKDIV_4; + PWM_BaseInitStruct.ClockSource = PWM_CLKSRC_APB; + PWM_BaseInitStruct.Mode = PWM_MODE_UPCOUNT; + PWM_BaseInit(PWM0, &PWM_BaseInitStruct); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/target_isr.c new file mode 100644 index 0000000000..f125dba92f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/target_isr.c @@ -0,0 +1,310 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ + if (PWM_GetBaseINTStatus(PWM0)) + { + /* Toggle IOB7 */ + GPIOBToF_Write(GPIOB, GPIOB->DAT ^ GPIO_Pin_7); + /* Clear PWM0 base interrupt */ + PWM_ClearBaseINTStatus(PWM0); + } +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_16BitsBaseTimer_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7b3590403e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 99 + 99 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/main.c new file mode 100644 index 0000000000..48e0cdc3ac --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/main.c @@ -0,0 +1,138 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +__IO uint16_t CapData[10] = { 0 }; +__IO uint8_t count; + + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + PWM_BaseInitType PWM_BaseInitStruct; + PWM_ICInitType PWM_ICInitStruct; + GPIO_InitType GPIO_InitStruct; + uint8_t i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* PWM3 base initialization */ + PWM_BaseStructInit(&PWM_BaseInitStruct); + PWM_BaseInitStruct.ClockDivision = PWM_CLKDIV_2; + PWM_BaseInitStruct.ClockSource = PWM_CLKSRC_APB; + PWM_BaseInitStruct.Mode = PWM_MODE_CONTINUOUS; + PWM_BaseInit(PWM3, &PWM_BaseInitStruct); + + /* PWM3 Channel 0 capture(falling) configuration */ + PWM_ICStructInit(&PWM_ICInitStruct); + PWM_ICInitStruct.Channel = PWM_CHANNEL_0; + PWM_ICInitStruct.CaptureMode = PWM_CM_FALLING; + PWM_ICInit(PWM3, &PWM_ICInitStruct); + + /* IOB0 input mode */ + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_0; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_INPUT; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + /* Configure PWM3 capture input line: PWM0(IOB0) */ + PWM_ILineConfig(PWM3_IN0, PWM_ILINE_0); + + PWM_ClearCounter(PWM3); + + count = 0; + + MISC_IRQLATConfig(15); + + /* Enable PWM3 Channel capture interrupt, PWM3 NVIC interrupt */ + PWM_ClearChannelINTStatus(PWM3, PWM_CHANNEL_0, PWM_INT_CCIFG); + PWM_ChannelINTConfig(PWM3, PWM_CHANNEL_0, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(PWM3_IRQn, 3); + + test_success = 1; + + while (count < 10) + { + WDT_Clear(); + } + + /* Disable PWM3 timer */ + PWM_BaseStructInit(&PWM_BaseInitStruct); + PWM_BaseInitStruct.Mode = PWM_MODE_STOP; + PWM_BaseInit(PWM3, &PWM_BaseInitStruct); + PWM_ChannelINTConfig(PWM3, PWM_CHANNEL_0, DISABLE); + CORTEX_NVIC_DisableIRQ(PWM3_IRQn); + + for (i=0; i<10; i++) + printf("CapData[%d]\t%d\r\n", i, CapData[i]); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/target_isr.c new file mode 100644 index 0000000000..7f4198934c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/target_isr.c @@ -0,0 +1,319 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern __IO uint8_t count; +extern __IO uint16_t CapData[10]; + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ + /* Error(capture overflow) handle */ + if(PWM_GetChannelINTStatus(PWM3, PWM_CHANNEL_0, PWM_INT_COV)) + { + PWM_ClearChannelINTStatus(PWM3, PWM_CHANNEL_0, PWM_INT_COV); + printf("Capture overflow!\r\n"); + } + + /* Capture handle */ + if(PWM_GetChannelINTStatus(PWM3, PWM_CHANNEL_0, PWM_INT_CCIFG)) + { + PWM_ClearChannelINTStatus(PWM3, PWM_CHANNEL_0, PWM_INT_CCIFG); + CapData[count++] = PWM_GetCapture(PWM3, PWM_CHANNEL_0); + } +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_Capture/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..c82e526df1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 115 + 115 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/main.c new file mode 100644 index 0000000000..ac5d886195 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/main.c @@ -0,0 +1,139 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + PWM_BaseInitType PWM_BaseInitStruct; + PWM_OCInitType PWM_OCInitStruct; + + test_success = 0; + + Clock_Init(); + + /* PWM0 base initialization + - Count mode : CONTINUOUS mode + - Clock source : PCLK 13M + - Clock Divide : divide by 16 */ + PWM_BaseInitStruct.ClockDivision = PWM_CLKDIV_16; + PWM_BaseInitStruct.ClockSource = PWM_CLKSRC_APB; + PWM_BaseInitStruct.Mode = PWM_MODE_CONTINUOUS; + PWM_BaseInit(PWM0, &PWM_BaseInitStruct); + + /** PWM0 channel 0 Initialize: + - Mode : compare mode + - Out Mode : TOGGLE + - Out line : PWM0 output (IOB0) + Output: 6.25Hz + High/Low = 1/1 + */ + PWM_OLineConfig(PWM0_OUT0, PWM_OLINE_0); + PWM_OCInitStruct.Channel = PWM_CHANNEL_0; + PWM_OCInitStruct.OutMode = PWM_OUTMOD_TOGGLE; + PWM_OCInitStruct.Period = 0x8000; + PWM_OCInit(PWM0, &PWM_OCInitStruct); + + /** PWM0 channel 1 Initialize: + - Mode : compare mode + - Out Mode : TOGGLE_RESET + - Out line : PWM1 output (IOB6) + Output: 12.5Hz + High/Low = (0x8000-0x2000)/(0xFFFF-0x6000) = 3/5 + */ + PWM_OLineConfig(PWM0_OUT1, PWM_OLINE_1); + PWM_OCInitStruct.Channel = PWM_CHANNEL_1; + PWM_OCInitStruct.OutMode = PWM_OUTMOD_TOGGLE_RESET; + PWM_OCInitStruct.Period = 0x2000; + PWM_OCInit(PWM0, &PWM_OCInitStruct); + + /** PWM0 channel 2 Initialize: + - Mode : compare mode + - Out Mode : TOGGLE_RESET + - Out line : PWM2 output (IOB13) + Output: 12.5Hz + High/Low = = (0x8000-0x4000)/(0xFFFF-0x4000) = 1/3 + */ + PWM_OLineConfig(PWM0_OUT2, PWM_OLINE_2); + PWM_OCInitStruct.Channel = PWM_CHANNEL_2; + PWM_OCInitStruct.OutMode = PWM_OUTMOD_TOGGLE_RESET; + PWM_OCInitStruct.Period = 0x4000; + PWM_OCInit(PWM0, &PWM_OCInitStruct); + + PWM_ClearCounter(PWM0); + /* Enable PWM0 channel 0/1/2 output */ + PWM_OutputCmd(PWM0, PWM_CHANNEL_0, ENABLE); + PWM_OutputCmd(PWM0, PWM_CHANNEL_1, ENABLE); + PWM_OutputCmd(PWM0, PWM_CHANNEL_2, ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PWM/PWM_CompareOutput/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..510b2ab2c5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 112 + 112 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/main.c new file mode 100644 index 0000000000..499102e5c6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/main.c @@ -0,0 +1,136 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + + +#ifdef __GNUC__ + +extern void PMU_EnterIdle_FlashDSTB(void) __attribute__((section(".ram_exec"))); + +/** + * @brief Flash deep standby, enter idle mode. + * @note This function is executed in RAM. + * @param None + * @retval None + */ +void PMU_EnterIdle_FlashDSTB(void) +{ + /* Flash deep standby */ + FLASH->PASS = 0x55AAAA55; + FLASH->DSTB = 0xAA5555AA; + /* Enter Idle mode */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + __WFI(); +} + +#endif + + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStructure; + CLK_InitTypeDef CLK_Struct; + + test_success = 0; + +/* Normal mode */ +if (PMU_GetModeStatus() == 1U) +{ + WDT_Disable(); + + /* Forbidden all GPIOs */ + GPIO_InitStructure.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All; + GPIOA_Init(GPIOA, &GPIO_InitStructure); + GPIOBToF_Init(GPIOB, &GPIO_InitStructure); + GPIOBToF_Init(GPIOC, &GPIO_InitStructure); + GPIOBToF_Init(GPIOD, &GPIO_InitStructure); + GPIOBToF_Init(GPIOE, &GPIO_InitStructure); + GPIOBToF_Init(GPIOF, &GPIO_InitStructure); + + /* System clock be switched to RTC clock(32768Hz) */ + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_RTCCLK \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_RTCCLK; + CLK_Struct.RTCCLK.Source = CLK_RTCCLKSRC_XTALL; + CLK_Struct.RTCCLK.Divider = CLK_RTCCLKDIV_1; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 1; + CLK_ClockConfig(&CLK_Struct); + + /* Power down BGP/RCH */ + ANA->REG3 |= (ANA_REG3_BGPPD | ANA_REG3_RCHPD); + /* Disable AVCC output */ + ANA->REGF &= ~ANA_REGF_AVCCOEN; + /* Power down ADC */ + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + /* Comparator 1 power control */ + ANA->REG3 &= ~ANA_REG3_CMP1PDN; + /* Comparator 2 power control */ + ANA->REG3 &= ~ANA_REG3_CMP2PDN; + /* Power down Tiny ADC */ + ANA->REGF &= ~ANA_REGF_ADTPDN; + /* AVCC power down */ + ANA->REG8 &= ~ANA_REG8_AVCCLDOPD; + /* Power ON LCD */ + LCD->CTRL |= LCD_CTRL_EN; + ANA->REG7 |= BIT1; + /* VDCIN detector control */ + ANA->REGA |= ANA_REGA_VDCINDETPD; + /* VDD detector control */ + ANA->REG9 |= ANA_REG9_VDDDETPD; + + CLK_APBPeriphralCmd(CLK_APBPERIPHRAL_ALL, DISABLE); + CLK_AHBPeriphralCmd(CLK_AHBPERIPHRAL_ALL, DISABLE); + + /* Enter Idle mode */ + PMU_EnterIdle_FlashDSTB(); +} + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Idle_RTCCLK/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..6adb6f1903 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..583c72130e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 87 + 87 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/main.c new file mode 100644 index 0000000000..ca1bde7728 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/main.c @@ -0,0 +1,111 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + PMU_LowPWRTypeDef LowPower_InitStruct; + + test_success = 0; + + /* Clock initialization */ + Clock_Init(); + + /* Disable WDT */ + WDT_Disable(); + + /*------------------ Forbidden all GPIOs ------------------*/ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_All; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + GPIOBToF_Init(GPIOC, &GPIO_InitStruct); + GPIOBToF_Init(GPIOD, &GPIO_InitStruct); + GPIOBToF_Init(GPIOE, &GPIO_InitStruct); + GPIOBToF_Init(GPIOF, &GPIO_InitStruct); + + test_success = 1; + + /*------------------ Low power configuration ------------------*/ + LowPower_InitStruct.AHBPeriphralDisable = PMU_AHB_ALL; + LowPower_InitStruct.APBPeriphralDisable = PMU_APB_ALL; + LowPower_InitStruct.BGPPower = PMU_BGPPWR_OFF; + LowPower_InitStruct.CMP1Power = PMU_CMP1PWR_OFF; + LowPower_InitStruct.CMP2Power = PMU_CMP2PWR_OFF; + LowPower_InitStruct.AVCCPower = PMU_AVCCPWR_ON; + LowPower_InitStruct.TADCPower = PMU_TADCPWR_OFF; + LowPower_InitStruct.VDCINDetector = PMU_VDCINDET_DISABLE; + LowPower_InitStruct.VDDDetector = PMU_VDDDET_DISABLE; + PMU_EnterSleep_LowPower(&LowPower_InitStruct); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/PowerConsumption/PowerConsumption_Sleep/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/lib_conf.h new file mode 100644 index 0000000000..1016be9f02 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/lib_conf.h @@ -0,0 +1,67 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..b991f9c6ee --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvoptx @@ -0,0 +1,680 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + 1 + 1 + ktemp0,0x0A + + + 2 + 1 + ack_used,0x0A + + + 3 + 1 + RTCData,0x0A + + + 4 + 1 + rtcplldivsrc + + + 5 + 1 + PPMx10,0x0A + + + 6 + 1 + cal_value,0x10 + + + 7 + 1 + div_value,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + System Viewer\RTC + 35905 + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..4bc2feaf23 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 59 + 59 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 119 + 119 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/main.c new file mode 100644 index 0000000000..e60fe438fb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/main.c @@ -0,0 +1,265 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} +/** + * @brief Get_Temperature: + * @param [out]T: The pointer of temperature value got by this function + * @retval 1 Function error. + 0 Function successed. + + */ +uint32_t Get_Temperature(int16_t *T) +{ + ADC_InitType ADC_InitStruct; + int16_t adc_data; + + /* ADC interface initialization */ + ADC_StructInit(&ADC_InitStruct); + ADC_InitStruct.Mode = ADC_MODE_TEMP; + ADC_InitStruct.ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct.ClockFrq = ADC_CLKFRQ_LOW; + ADC_InitStruct.SkipSample = ADC_SKIP_0; + ADC_InitStruct.AverageSample = ADC_AVERAGE_64; + ADC_InitStruct.TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct.Channel = ADC_CHANNEL_TEMP; + ADC_InitStruct.AverageEnable = ADC_CHANNEL_TEMP; + ADC_InitStruct.ResDivEnable = ADC_CHANNEL_NONE; + ADC_Init(&ADC_InitStruct); + + /* Enable ADC */ + ADC_Cmd(ENABLE); + + + /* Start Manual ADC conversion */ + ADC_StartManual(); + /* Waiting Manual ADC conversion done */ + if(ADC_WaitForManual(DELAY_MS(100))) + { + /*Reset ADC*/ + ADC_SoftReset(&ADC_InitStruct); + } + else + { + /* Get ADC data */ + adc_data = ADC_GetADCConversionValue(ADC_CHANNEL_TEMP); + + /*-------------------------- Manual calibration -----------------------------*/ + /* Get temperature original data */ + if (ADC_CalculateValue(ADC_TEMP, adc_data, T)) + { + return 1; + } + } + + /* Disable ADC */ + ADC_Cmd(DISABLE); + + return 0; +} + +void CalRTC(uint32_t rtcplldivsrc, int16_t T) +{ + uint32_t cal_value, div_value; + int16_t ack_used, PPMx10; + int16_t ktemp0, ktemp1, ktemp2, ktemp3; + int16_t Ti; + + /* Get section x temperature */ + ktemp0 = (int16_t)(RTC->ACKTEMP<<8 & 0xFF00); + ktemp1 = (int16_t)((RTC->ACKTEMP ) & 0xFF00); + ktemp2 = (int16_t)((RTC->ACKTEMP >> 8) & 0xFF00); + ktemp3 = (int16_t)((RTC->ACKTEMP >> 16) & 0xFF00); + + /* Calculate temperature(float) */ + Ti = RTC->ACTI; + + /* Get ACK(K parameter) */ + if (T < ktemp0) + ack_used = RTC->ACK[0]; + else if ((T >= ktemp0) && (T < ktemp1)) + ack_used = RTC->ACK[1]; + else if ((T >= ktemp1) && (T < ktemp2)) + ack_used = RTC->ACK[2]; + else if ((T >= ktemp2) && (T < ktemp3)) + ack_used = RTC->ACK[3]; + else + ack_used = RTC->ACK[4]; + + /* Calculate 10*PPM */ + PPMx10 = (int16_t)((((ack_used)*(((T-Ti)*(T-Ti))>>16))>>16) + (int16_t)(RTC->ACP4)); + /* Calculate the value of RTC_CAL, RTC_DIV */ + cal_value = (uint32_t)((((PPMx10*(int16_t)(RTC->ACP5))>>16)) + 1); + div_value = (uint32_t)((rtcplldivsrc>>1) - ((PPMx10*(int16_t)(RTC->ACP6))>>12) - 1); + + /* Write RTC_CAL/RTC_DIV register */ + RTC_WriteRegisters((uint32_t)&RTC->CAL, &cal_value, 1); + RTC->DIV = div_value; +} +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + NVR_RTCINFO RTCData; + TMR_InitType TMR_InitStruct; + uint32_t retval; + int16_t T; + uint32_t nCount; + uint32_t rtcplldivsrc = 26214400UL; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + +/*------------------------- RTC PLL divider output ---------------------------*/ + /* Enable RTC PLL divider output, IOA3 IOA7 */ + GPIOA_AFConfig(PMUIO7_AF_PLLDIV | PMUIO3_AF_PLLDIV, ENABLE); + RTC_PLLDIVConfig(RTC_PLLDIVSOURCE_PLLL, 1); + RTC_PLLDIVOutputCmd(ENABLE); + + /* Ensure AVCC is higher than 2.5V */ + nCount = 0; + while(1) + { + if(!PMU_GetAVCCLVStatus()) + { + nCount++; + } + else + { + nCount = 0; + } + if(nCount>=10) + { + break; + } + /* delay 1ms */ + CORTEX_Delay_nSysClock(DELAY_MS(1)); + } + + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* Get/load RTC NVR information */ + retval = NVR_GetInfo_LoadRTCData(&RTCData, rtcplldivsrc); + if (retval) + { +#ifdef __GNUC__ + printf("Get/load RTC NVR information error, return value 0x%lx\r\n", retval); +#else + printf("Get/load RTC NVR information error, return value 0x%x\r\n", retval); +#endif + } + else + { + printf("Get/load RTC NVR information OK!\r\n"); + } + + /* Timer0 initialization: + - Clock source: internal clock(APB clock 13107200Hz) + - Overflow interval: 5s */ + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 13107200*5 - 1; + TMR_Init(TMR0, &TMR_InitStruct); + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + while (1) + { +/*-------------------------- Manual calibration -----------------------------*/ + /* Get temperature */ + if (Get_Temperature(&T)) + { + printf("Calculate temperature, checksum error\r\n"); + } + /* Calibrate RTC_CAL RTC_DIV */ + CalRTC(rtcplldivsrc, T); + + printf("Temperature is %2.3f\r\n", (float)T/256.0); +#ifdef __GNUC__ + printf("DIV 0x%lx\r\n", RTC->DIV); + printf("CAL 0x%lx\r\n", RTC->CAL); +#else + printf("DIV 0x%x\r\n", RTC->DIV); + printf("CAL 0x%x\r\n", RTC->CAL); +#endif + printf("\r\n"); + + test_success = 1; + + /* Delay 5s */ + while (TMR_GetINTStatus(TMR0) == 0) + { + WDT_Clear(); + } + TMR_ClearINTStatus(TMR0); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/target_isr.c new file mode 100644 index 0000000000..93adc10d40 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/target_isr.c @@ -0,0 +1,305 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_ManualCalibration/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..63a5848153 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 126 + 126 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/main.c new file mode 100644 index 0000000000..3f2d1cf0cb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/main.c @@ -0,0 +1,157 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +void Print_CurrentTime(void) +{ + RTC_TimeTypeDef rTime; + + /* Get time */ + RTC_GetTime(&rTime, RTC_INACCURATE); +#ifdef __GNUC__ + printf("20%lx-", rTime.Year); + printf("%02lx-", rTime.Month); + printf("%02lx ", rTime.Date); + printf("Weekday %lx ", rTime.WeekDay); + printf("%02lx:", rTime.Hours); + printf("%02lx:", rTime.Minutes); + printf("%02lx\r\n", rTime.Seconds); +#else + printf("20%x-", rTime.Year); + printf("%02x-", rTime.Month); + printf("%02x ", rTime.Date); + printf("Weekday %x ", rTime.WeekDay); + printf("%02x:", rTime.Hours); + printf("%02x:", rTime.Minutes); + printf("%02x\r\n", rTime.Seconds); +#endif +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + RTC_TimeTypeDef Time_Struct; + + test_success = 0; + + Clock_Init(); + /* Initializes FLASH 1USCYCLE. */ + FLASH_CycleInit(); + + Stdio_Init(); + + /* Set time */ + /* 2017-10-10 10:10:10 Tuesday */ + Time_Struct.Year = 0x17; + Time_Struct.Month = 0x10; + Time_Struct.Date = 0x10; + Time_Struct.Hours = 0x10; + Time_Struct.Minutes = 0x10; + Time_Struct.Seconds = 0x10; + Time_Struct.WeekDay = 0x02; + RTC_SetTime(&Time_Struct, RTC_INACCURATE); + + /* Configure RTC multi-second/multi-minute wake-up(sleep) function: + These two functions(interrupts) are independent. + - Multi-second, 3sec + - Multi-minute, 1min */ + RTC_WKUMinutesConfig(1); + RTC_WKUSecondsConfig(1); + RTC_WKUSecondsConfig(3); + PMU_SleepWKUSRCConfig_RTC(PMU_RTCEVT_WKUMIN | PMU_RTCEVT_WKUSEC, 0); + + /* Selects VDCIN hysteresis */ + PMU_VDCINHYSSEL(PMU_VDCINHYSSEL_200MV); + /* Enable VDCIN detector */ + PMU_VDCINDetectorCmd(ENABLE); + + test_success = 1; + + printf("========================\r\n"); + Print_CurrentTime(); + + while (1) + { + /* If VDCIN drop, enter sleep mode*/ + if (PMU_GetVDCINDropStatus()) + { + /* Disable Watch Dog Timer */ + WDT_Disable(); + + PMU_EnterSleepMode(); + } + else + { + printf("VDCIN is not drop!\r\n"); + while (1); + } + WDT_Clear(); + /* Quit sleep mode, configure clocks/UART print */ + Stdio_Init(); + Print_CurrentTime(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/target_isr.c new file mode 100644 index 0000000000..2d8c9abd00 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ + RTC_ClearINTStatus(RTC_INTSTS_WKUSEC | RTC_INTSTS_WKUMIN); +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_MulSecMin_WakeUpSleep/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..15b4dd33ff --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 66 + 66 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/main.c new file mode 100644 index 0000000000..817857c4ad --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/main.c @@ -0,0 +1,90 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + + RTC_PLLDIVConfig(RTC_PLLDIVSOURCE_PLLL, 0); + /* Enable IOA3 special function PLLDIV output */ + GPIOA_AFConfig(PMUIO3_AF_PLLDIV, ENABLE); + /* PLLDIV output frequency 1 Hz */ + RTC_PLLDIVConfig(RTC_PLLDIVSOURCE_PLLL, 1); + /* Enable RTC PLLDIV output */ + RTC_PLLDIVOutputCmd(ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_PLLDividerOutput_1Hz/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..fae1519d0c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000014A8F3A5 -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1ba6457fd7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 131 + 131 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/main.c new file mode 100644 index 0000000000..6b25cece25 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/main.c @@ -0,0 +1,155 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +void Print_CurrentTime(void) +{ + RTC_TimeTypeDef rTime; + + /* Get time */ + RTC_GetTime(&rTime, RTC_ACCURATE); +#ifdef __GNUC__ + printf("20%lx-", rTime.Year); + printf("%02lx-", rTime.Month); + printf("%02lx ", rTime.Date); + printf("Weekday %lx ", rTime.WeekDay); + printf("%02lx:", rTime.Hours); + printf("%02lx:", rTime.Minutes); + printf("%02lx\t", rTime.Seconds); + printf("%02lx\r\n", rTime.SubSeconds); +#else + printf("20%x-", rTime.Year); + printf("%02x-", rTime.Month); + printf("%02x ", rTime.Date); + printf("Weekday %x ", rTime.WeekDay); + printf("%02x:", rTime.Hours); + printf("%02x:", rTime.Minutes); + printf("%02x\t", rTime.Seconds); + printf("%02x\r\n", rTime.SubSeconds); +#endif +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + RTC_TimeTypeDef Time_Struct; + RTC_AlarmTypeDef RTC_AlarmStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + if(PMU_GetResetSource(PMU_RSTSRC_DPORST)) + { + PMU_ClearResetSource(PMU_RSTSRC_DPORST); + /* Set time */ + /* 2017-10-10 10:10:10 0ms */ + Time_Struct.Year = 0x17; + Time_Struct.Month = 0x10; + Time_Struct.Date = 0x10; + Time_Struct.Hours = 0x10; + Time_Struct.Minutes = 0x10; + Time_Struct.Seconds = 0x10; + Time_Struct.WeekDay = 0x02; + Time_Struct.SubSeconds = 0; + RTC_SetTime(&Time_Struct, RTC_ACCURATE); + } + + /* Alarm: 10:20:10 100ms */ + RTC_AlarmStruct.AlarmHours = 0x10; + RTC_AlarmStruct.AlarmMinutes = 0x10; + RTC_AlarmStruct.AlarmSeconds = 0x20; + RTC_AlarmStruct.AlarmSubSeconds = 0x100; + RTC_SetAlarm(&RTC_AlarmStruct, RTC_ACCURATE); + + /* Configure RTC Alarm sleep wakeup source */ + PMU_SleepWKUSRCConfig_RTC(PMU_RTCEVT_ALARM, 0); + + /* Enable RTC Alarm */ + RTC_AlarmCmd(ENABLE); + + test_success = 1; + + printf("========================\r\n"); + Print_CurrentTime(); + + WDT_Disable(); + if(PMU_EnterSleepMode() == 0) + { + printf("Wake up!\r\n"); + } + else + { + printf("MODE is low, Error!\r\n"); + } + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/target_isr.c new file mode 100644 index 0000000000..3dd39b4592 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern void Print_CurrentTime(void); + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ + RTC_ClearINTStatus(RTC_INTSTS_ALARM); + Stdio_Init(); + Print_CurrentTime(); + +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/RTC/RTC_SubSecAlarm/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..1f306b70c2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvoptx @@ -0,0 +1,656 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 126 + 1 +
2858
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + \\template\../Src/main.c\126 +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..c7323fc8dd --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 211 + 211 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/main.c new file mode 100644 index 0000000000..41226590ef --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/main.c @@ -0,0 +1,235 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +const unsigned int nCrcTab_Crc32Poly0x4C11DB7Ref1[256] = +{ + 0x00000000, 0x77073096, 0xEE0E612C, 0x990951BA, 0x076DC419, 0x706AF48F, 0xE963A535, 0x9E6495A3, 0x0EDB8832, 0x79DCB8A4, 0xE0D5E91E, 0x97D2D988, 0x09B64C2B, 0x7EB17CBD, 0xE7B82D07, 0x90BF1D91, + 0x1DB71064, 0x6AB020F2, 0xF3B97148, 0x84BE41DE, 0x1ADAD47D, 0x6DDDE4EB, 0xF4D4B551, 0x83D385C7, 0x136C9856, 0x646BA8C0, 0xFD62F97A, 0x8A65C9EC, 0x14015C4F, 0x63066CD9, 0xFA0F3D63, 0x8D080DF5, + 0x3B6E20C8, 0x4C69105E, 0xD56041E4, 0xA2677172, 0x3C03E4D1, 0x4B04D447, 0xD20D85FD, 0xA50AB56B, 0x35B5A8FA, 0x42B2986C, 0xDBBBC9D6, 0xACBCF940, 0x32D86CE3, 0x45DF5C75, 0xDCD60DCF, 0xABD13D59, + 0x26D930AC, 0x51DE003A, 0xC8D75180, 0xBFD06116, 0x21B4F4B5, 0x56B3C423, 0xCFBA9599, 0xB8BDA50F, 0x2802B89E, 0x5F058808, 0xC60CD9B2, 0xB10BE924, 0x2F6F7C87, 0x58684C11, 0xC1611DAB, 0xB6662D3D, + 0x76DC4190, 0x01DB7106, 0x98D220BC, 0xEFD5102A, 0x71B18589, 0x06B6B51F, 0x9FBFE4A5, 0xE8B8D433, 0x7807C9A2, 0x0F00F934, 0x9609A88E, 0xE10E9818, 0x7F6A0DBB, 0x086D3D2D, 0x91646C97, 0xE6635C01, + 0x6B6B51F4, 0x1C6C6162, 0x856530D8, 0xF262004E, 0x6C0695ED, 0x1B01A57B, 0x8208F4C1, 0xF50FC457, 0x65B0D9C6, 0x12B7E950, 0x8BBEB8EA, 0xFCB9887C, 0x62DD1DDF, 0x15DA2D49, 0x8CD37CF3, 0xFBD44C65, + 0x4DB26158, 0x3AB551CE, 0xA3BC0074, 0xD4BB30E2, 0x4ADFA541, 0x3DD895D7, 0xA4D1C46D, 0xD3D6F4FB, 0x4369E96A, 0x346ED9FC, 0xAD678846, 0xDA60B8D0, 0x44042D73, 0x33031DE5, 0xAA0A4C5F, 0xDD0D7CC9, + 0x5005713C, 0x270241AA, 0xBE0B1010, 0xC90C2086, 0x5768B525, 0x206F85B3, 0xB966D409, 0xCE61E49F, 0x5EDEF90E, 0x29D9C998, 0xB0D09822, 0xC7D7A8B4, 0x59B33D17, 0x2EB40D81, 0xB7BD5C3B, 0xC0BA6CAD, + 0xEDB88320, 0x9ABFB3B6, 0x03B6E20C, 0x74B1D29A, 0xEAD54739, 0x9DD277AF, 0x04DB2615, 0x73DC1683, 0xE3630B12, 0x94643B84, 0x0D6D6A3E, 0x7A6A5AA8, 0xE40ECF0B, 0x9309FF9D, 0x0A00AE27, 0x7D079EB1, + 0xF00F9344, 0x8708A3D2, 0x1E01F268, 0x6906C2FE, 0xF762575D, 0x806567CB, 0x196C3671, 0x6E6B06E7, 0xFED41B76, 0x89D32BE0, 0x10DA7A5A, 0x67DD4ACC, 0xF9B9DF6F, 0x8EBEEFF9, 0x17B7BE43, 0x60B08ED5, + 0xD6D6A3E8, 0xA1D1937E, 0x38D8C2C4, 0x4FDFF252, 0xD1BB67F1, 0xA6BC5767, 0x3FB506DD, 0x48B2364B, 0xD80D2BDA, 0xAF0A1B4C, 0x36034AF6, 0x41047A60, 0xDF60EFC3, 0xA867DF55, 0x316E8EEF, 0x4669BE79, + 0xCB61B38C, 0xBC66831A, 0x256FD2A0, 0x5268E236, 0xCC0C7795, 0xBB0B4703, 0x220216B9, 0x5505262F, 0xC5BA3BBE, 0xB2BD0B28, 0x2BB45A92, 0x5CB36A04, 0xC2D7FFA7, 0xB5D0CF31, 0x2CD99E8B, 0x5BDEAE1D, + 0x9B64C2B0, 0xEC63F226, 0x756AA39C, 0x026D930A, 0x9C0906A9, 0xEB0E363F, 0x72076785, 0x05005713, 0x95BF4A82, 0xE2B87A14, 0x7BB12BAE, 0x0CB61B38, 0x92D28E9B, 0xE5D5BE0D, 0x7CDCEFB7, 0x0BDBDF21, + 0x86D3D2D4, 0xF1D4E242, 0x68DDB3F8, 0x1FDA836E, 0x81BE16CD, 0xF6B9265B, 0x6FB077E1, 0x18B74777, 0x88085AE6, 0xFF0F6A70, 0x66063BCA, 0x11010B5C, 0x8F659EFF, 0xF862AE69, 0x616BFFD3, 0x166CCF45, + 0xA00AE278, 0xD70DD2EE, 0x4E048354, 0x3903B3C2, 0xA7672661, 0xD06016F7, 0x4969474D, 0x3E6E77DB, 0xAED16A4A, 0xD9D65ADC, 0x40DF0B66, 0x37D83BF0, 0xA9BCAE53, 0xDEBB9EC5, 0x47B2CF7F, 0x30B5FFE9, + 0xBDBDF21C, 0xCABAC28A, 0x53B39330, 0x24B4A3A6, 0xBAD03605, 0xCDD70693, 0x54DE5729, 0x23D967BF, 0xB3667A2E, 0xC4614AB8, 0x5D681B02, 0x2A6F2B94, 0xB40BBE37, 0xC30C8EA1, 0x5A05DF1B, 0x2D02EF8D, +}; + +const uint8_t SelfTest_Table[16] = \ +{ + 0x00, 0x11, 0x22, 0x33, + 0x44, 0x55, 0x66, 0x77, + 0x88, 0x99, 0xAA, 0xBB, + 0xCC, 0xDD, 0xEE, 0xFF +}; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief CRC-32 Calculation. + */ +static unsigned int nCrc32Calculation(const unsigned char *data, \ + unsigned int length, \ + unsigned int poly, \ + unsigned int init, \ + unsigned int xorout, \ + unsigned char reversed) +{ + unsigned int crc = init; + unsigned char i; + + if (reversed == 0) + { + while (length--) + { + crc ^= *data << 24; + data++; + for (i=0; i<8; ++i) + { + if (crc & 0x80000000) + crc = (crc << 1) ^ poly; + else + crc <<= 1; + } + } + } + else + { + poly = (poly & 0x55555555) << 1 | (poly & 0xAAAAAAAA) >> 1; + poly = (poly & 0x33333333) << 2 | (poly & 0xCCCCCCCC) >> 2; + poly = (poly & 0x0F0F0F0F) << 4 | (poly & 0xF0F0F0F0) >> 4; + poly = (poly & 0x00FF00FF) << 8 | (poly & 0xFF00FF00) >> 8; + poly = (poly & 0x0000FFFF) << 16 | (poly & 0xFFFF0000) >> 16; + while (length--) + { + crc ^= *data++; + for (i=0; i<8; ++i) + { + if (crc & 0x00000001) + crc = (crc >> 1) ^ poly; + else + crc = (crc >> 1); + } + } + } + + crc ^= xorout; + return crc; +} +/** + * @brief CRC-32 Calculation by table. + */ +unsigned int nCrc32CalculationByTab(const unsigned char* data, unsigned int length) +{ + unsigned int crc = 0xFFFFFFFF; + unsigned int i; + + for(i=0; i>8)^nCrcTab_Crc32Poly0x4C11DB7Ref1[(crc&0xFF)^(*data)]; + data++; + } + crc = crc^0xFFFFFFFF; + + return crc; +} +/** + * @brief Verify Flash(programmed) CRC-32 value. + * @retval 0: Function succeeded. + * 1: Programmed Flash size error. + * 2: CRC-32 vlaue error. + */ +static unsigned int VerifyFlashProCRC32(void) +{ + uint32_t flash_len, flash_crc32; + uint32_t crc32; + + /* Get CRC-32 informations from flash */ + flash_len = *((__IO uint32_t *)(0x7FFF8)); + flash_crc32 = *((__IO uint32_t *)(0x7FFFC)); + + /* Error: flash_len > Flash max-size */ + if (flash_len > (512*1024)) + { + return 1; + } + + /* Calculate CRC-32 value */ + //crc32 = nCrc32Calculation((const unsigned char *)0, flash_len, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, 1); + crc32 = nCrc32CalculationByTab((const unsigned char *)0, flash_len); + if (crc32 != flash_crc32) + { + return 2; + } + + return 0; +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + uint32_t crc32_value, retval; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* CRC-32 self-test */ + crc32_value = nCrc32Calculation(SelfTest_Table, 16, 0x04C11DB7, 0xFFFFFFFF, 0xFFFFFFFF, 1); + if (crc32_value == 0x8407759B) + printf("CRC-32 Calculation self-test passed\r\n"); + else + printf("CRC-32 Calculation self-test failed\r\n"); + + /* Verify Flash(programmed) CRC-32 value */ + retval = VerifyFlashProCRC32(); + if (retval == 0) + { + printf("Verify CRC-32 passed\r\n"); + } + else if (retval == 1) + { + printf("Programmed Flash size error\r\n"); + } + else + { + printf("CRC-32 value error\r\n"); + } + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SD612/SD612_CRC_Test/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.project new file mode 100644 index 0000000000..f551f59e3c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/.project @@ -0,0 +1,188 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/FM25Q32.c + 1 + PARENT-2-PROJECT_LOC/Src/FM25Q32.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewp new file mode 100644 index 0000000000..eb77edb3ce --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.ewp @@ -0,0 +1,2010 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Src\FM25Q32.c + + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/FM25Q32.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/FM25Q32.h new file mode 100644 index 0000000000..c78dede2f9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/FM25Q32.h @@ -0,0 +1,65 @@ + +#ifndef __FM25Q32 +#define __FM25Q32 + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +extern __IO uint32_t nTicks; + +// SPIx be used +#define SPI_Flash SPI3 + +#define CSN_GPIO GPIOD +#define CSN_GPIO_DAT GPIO_D +#define CSN_Pin GPIO_Pin_4 +#define CSN_PinNum 4 + +//FM25Q command +#define FM25Q_WriteEnable 0x06 +#define FM25Q_WriteDisable 0x04 +#define FM25Q_ReadStatusReg_1 0x05 +#define FM25Q_ReadStatusReg_2 0x35 +#define FM25Q_Volatile_SR_WriteEnable 0x50 +#define FM25Q_WriteStatusReg 0x01 +#define FM25Q_SectorErase_4KB 0x20 +#define FM25Q_BlockErase_32KB 0x52 +#define FM25Q_BlockErase_64KB 0xD8 +#define FM25Q_ChipErase 0xC7 +#define FM25Q_ReadData 0x03 +#define FM25Q_PageProgram 0x02 + +void FlashMemory_Test(void); + + +uint32_t System_GetTick(void); +void FlashMem_SPI_Init(void); +void FlashMem_SPI_DeInit(void); +void FlashMem_SPI_SetCSN(uint8_t level); +int32_t FlashMem_SPI_Transfer(uint8_t *w_data, uint8_t *r_data, uint32_t len, uint32_t Timeout); + +int32_t FlashMem_WriteEnable(void); +int32_t FlashMem_WriteDisable(void); + +int32_t FlashMem_WaitForIdle(uint32_t Tickstart, uint32_t Timeout); + +int32_t FlashMem_ReadStaReg_1(uint8_t *data); +int32_t FlashMem_ReadStaReg_2(uint8_t *data); +int32_t FlashMem_WriteStaReg(uint8_t StaReg1, uint8_t StaReg2); + +int32_t FlashMem_SectorErase_4KB(uint32_t addr); +int32_t FlashMem_BlockErase_32KB(uint32_t addr); +int32_t FlashMem_BlockErase_64KB(uint32_t addr); +int32_t FlashMem_ChipErase(void); + +int32_t FlashMem_Read(uint8_t *data, uint32_t addr, uint16_t num, uint32_t Timeout); +int32_t FlashMem_PageWrite(uint8_t *data, uint32_t addr, uint16_t num, uint32_t Timeout); + +#ifdef __cplusplus +} +#endif + +#endif /* __FM25Q32 */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/main.h new file mode 100644 index 0000000000..4c06a51a46 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/main.h @@ -0,0 +1,29 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include +#include "FM25Q32.h" + + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..f59ce08361 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvoptx @@ -0,0 +1,633 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + ..\Src\FM25Q32.c + FM25Q32.c + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 6 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..9fa4598091 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARM/template.uvprojx @@ -0,0 +1,639 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + FM25Q32.c + 1 + ..\Src\FM25Q32.c + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..40bd6a62d8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvopt @@ -0,0 +1,721 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + 1 + 5 + 1 + 0 + 0 + 0 + 0 + 141 + 141 + 0 + ..\Src\FM25Q32.c + FM25Q32.c + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 6 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 32 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..bd63d6fc61 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/MDK-ARMv4/template.uvproj @@ -0,0 +1,589 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + FM25Q32.c + 1 + ..\Src\FM25Q32.c + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/FM25Q32.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/FM25Q32.c new file mode 100644 index 0000000000..bb754caed1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/FM25Q32.c @@ -0,0 +1,723 @@ +/** + ****************************************************************************** + * @file FM25Q32.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +#include "FM25Q32.h" +#include + +__IO uint32_t nTicks; + +/** + * @brief Get current ticks. + * @param None + * @retval None + */ +uint32_t System_GetTick(void) +{ + return nTicks; +} + +/** + * @brief SPI initialization for flash memory device. + * @param None + * @retval None + */ +void FlashMem_SPI_Init(void) +{ + SPI_InitType SPI_InitStruct; + GPIO_InitType GPIO_InitStruct; + + CORTEX_SystemTick_Config(26214400/1000 - 1); + + /* CSN pin output high */ + GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 1); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = CSN_Pin; + GPIOBToF_Init(CSN_GPIO, &GPIO_InitStruct); + + SPI_DeviceInit(SPI_Flash); + SPI_StructInit(&SPI_InitStruct); + SPI_InitStruct.ClockDivision = SPI_CLKDIV_2; + SPI_InitStruct.CSNSoft = SPI_CSNSOFT_ENABLE; + SPI_Init(SPI_Flash, &SPI_InitStruct); + + SPI_Cmd(SPI_Flash, ENABLE); +} + +/** + * @brief SPI De-Initialization for flash memory device. + * @param None + * @retval None + */ +void FlashMem_SPI_DeInit(void) +{ + GPIO_InitType GPIO_InitStruct; + + SysTick->CTRL = 0; + + SPI_DeviceInit(SPI_Flash); + + /* CSN pin forbidden */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = CSN_Pin; + GPIOBToF_Init(CSN_GPIO, &GPIO_InitStruct); +} + +/** + * @brief SPI configure CSN pin. + */ +void FlashMem_SPI_SetCSN(uint8_t level) +{ + if (level) GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 1); + else GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 0); +} + +/** + * @brief SPI transfer + * @param + * @retval + */ +int32_t FlashMem_SPI_Transfer(uint8_t *w_data, uint8_t *r_data, uint32_t len, uint32_t Timeout) +{ + uint32_t tick_cur, Tickstart; + uint32_t i; + + Tickstart = System_GetTick(); + + for (i=0; i= Tickstart) + { + if ((tick_cur-Tickstart) > Timeout) return -1; + } + else + { + if ((0xFFFFFFFFUL-Tickstart+tick_cur) > Timeout) return -1; + } + } + } + if (w_data == NULL) + SPI_SendData(SPI_Flash, 0x00); + else + SPI_SendData(SPI_Flash, w_data[i]); + + /* Wait until receive FIFO is not empty, receive one byte data */ + while (SPI_GetStatus(SPI_Flash, SPI_STS_RNE) == 0U) + { + if (Timeout == 0UL) return -1; + else + { + tick_cur = System_GetTick(); + if (tick_cur >= Tickstart) + { + if ((tick_cur-Tickstart) > Timeout) return -1; + } + else + { + if ((0xFFFFFFFFUL-Tickstart+tick_cur) > Timeout) return -1; + } + } + } + if (r_data == NULL) + SPI_ReceiveData(SPI_Flash); + else + r_data[i] = SPI_ReceiveData(SPI_Flash); + } + + while (SPI_GetStatus(SPI_Flash, SPI_STS_BSY) == 1U) + { + if (Timeout == 0UL) return -1; + else + { + tick_cur = System_GetTick(); + if (tick_cur >= Tickstart) + { + if ((tick_cur-Tickstart) > Timeout) return -1; + } + else + { + if ((0xFFFFFFFFUL-Tickstart+tick_cur) > Timeout) return -1; + } + } + } + + return 0; +} + +/** + * @brief Write enable + * @param None + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_WriteEnable(void) +{ + uint8_t tmp; + int32_t retval; + + tmp = FM25Q_WriteEnable; + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(&tmp, NULL, 1, 2); + FlashMem_SPI_SetCSN(1); + + return retval; +} + +/** + * @brief Write disbale + * @param None + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_WriteDisable(void) +{ + uint8_t tmp; + int32_t retval; + + tmp = FM25Q_WriteDisable; + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(&tmp, NULL, 1, 2); + FlashMem_SPI_SetCSN(1); + + return retval; +} + +/** + * @brief Read status register 1 + * @param [out]data: The pointer of read data + * @note S7 S6 S5 S4 S3 S2 S1 S0 + * SRP0 SEC TB BP2 BP1 BP0 WEL WIP + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_ReadStaReg_1(uint8_t *data) +{ + uint8_t wBuffer[2] = { FM25Q_ReadStatusReg_1, 0x00 }; + uint8_t rBuffer[2]; + int32_t retval; + + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, rBuffer, 2, 2); + FlashMem_SPI_SetCSN(1); + + *data = rBuffer[1]; + return retval; +} + +/** + * @brief Read status register 2 + * @param [out]data: The pointer of read data + * @note S15 S14 S13 S12 S11 S10 S9 S8 + * SUS CMP LB3 LB2 LB1 LB0 QE SRP1 + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_ReadStaReg_2(uint8_t *data) +{ + uint8_t wBuffer[2] = { FM25Q_ReadStatusReg_2, 0x00 }; + uint8_t rBuffer[2]; + int32_t retval; + + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, rBuffer, 2, 2); + FlashMem_SPI_SetCSN(1); + + *data = rBuffer[1]; + return retval; +} + +/** + * @brief Wait for idle + */ +int32_t FlashMem_WaitForIdle(uint32_t Tickstart, uint32_t Timeout) +{ + uint8_t data; + uint32_t tick_cur; + + do + { + FlashMem_ReadStaReg_1(&data); + + if (Timeout == 0UL) + { + return -1; + } + else + { + tick_cur = System_GetTick(); + if (tick_cur >= Tickstart) + { + if ((tick_cur-Tickstart) > Timeout) + { + return -1; + } + } + else + { + if ((0xFFFFFFFFUL-Tickstart+tick_cur) > Timeout) + { + return -1; + } + } + } + + } while((data & 0x01) == 0x01); + + return 0; +} + +/** + * @brief Write status register 1 and 2 + * @param StaReg1: The value write status register 1 + * StaReg2: The value write status register 2 + * @note register 1 + * S7 S6 S5 S4 S3 S2 S1 S0 + * SRP0 SEC TB BP2 BP1 BP0 WEL WIP + * register 2 + * S15 S14 S13 S12 S11 S10 S9 S8 + * SUS CMP LB3 LB2 LB1 LB0 QE SRP1 + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_WriteStaReg(uint8_t StaReg1, uint8_t StaReg2) +{ + int32_t retval; + uint8_t wBuffer[3]; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer[0] = FM25Q_Volatile_SR_WriteEnable; + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 1, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + wBuffer[0] = FM25Q_WriteStatusReg; + wBuffer[1] = StaReg1; + wBuffer[2] = StaReg2; + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 3, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, 2); +} + +/** + * @brief Sector erase(4K-bytes) + * @param addr: The address of specified sector to the erased state of all 1s + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_SectorErase_4KB(uint32_t addr) +{ + int32_t retval; + uint8_t wBuffer[4]; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer[0] = FM25Q_SectorErase_4KB; + wBuffer[1] = (uint8_t)(addr>>16); + wBuffer[2] = (uint8_t)(addr>>8); + wBuffer[3] = (uint8_t)(addr); + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 4, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, 300); +} + +/** + * @brief Block erase(32K-bytes) + * @param addr: The address of specified block to the erased state of all 1s + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_BlockErase_32KB(uint32_t addr) +{ + int32_t retval; + uint8_t wBuffer[4]; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer[0] = FM25Q_BlockErase_32KB; + wBuffer[1] = (uint8_t)(addr>>16); + wBuffer[2] = (uint8_t)(addr>>8); + wBuffer[3] = (uint8_t)(addr); + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 4, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, 1800); +} + +/** + * @brief Block erase(64K-bytes) + * @param addr: The address of specified block to the erased state of all 1s + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_BlockErase_64KB(uint32_t addr) +{ + int32_t retval; + uint8_t wBuffer[4]; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer[0] = FM25Q_BlockErase_64KB; + wBuffer[1] = (uint8_t)(addr>>16); + wBuffer[2] = (uint8_t)(addr>>8); + wBuffer[3] = (uint8_t)(addr); + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 4, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, 2000); +} + +/** + * @brief Chip erase + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_ChipErase(void) +{ + int32_t retval; + uint8_t wBuffer; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer = FM25Q_ChipErase; + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(&wBuffer, NULL, 1, 2); + FlashMem_SPI_SetCSN(1); + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, 128000); +} + +/** + * @brief Read + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_Read(uint8_t *data, uint32_t addr, uint16_t num, uint32_t Timeout) +{ + int32_t retval; + uint8_t wBuffer[4]; + + wBuffer[0] = FM25Q_ReadData; + wBuffer[1] = (uint8_t)(addr>>16); + wBuffer[2] = (uint8_t)(addr>>8); + wBuffer[3] = (uint8_t)(addr); + + FlashMem_SPI_SetCSN(0); + + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 4, 2); + if (retval) + { + FlashMem_SPI_SetCSN(1); + return retval; + } + + retval = FlashMem_SPI_Transfer(NULL, data, num, Timeout); + FlashMem_SPI_SetCSN(1); + + return retval; +} + +/** + * @brief Page write + * @note This function allows from one byte to 256 bytes (a page) of data to be + * programmed at previously erased (FFh) memory locations + * @retval ARM_DRIVER_OK or Error code(<0) + */ +int32_t FlashMem_PageWrite(uint8_t *data, uint32_t addr, uint16_t num, uint32_t Timeout) +{ + int32_t retval; + uint8_t wBuffer[4]; + uint32_t Tickstart; + + retval = FlashMem_WriteEnable(); + if (retval) return retval; + + wBuffer[0] = FM25Q_PageProgram; + wBuffer[1] = (uint8_t)(addr>>16); + wBuffer[2] = (uint8_t)(addr>>8); + wBuffer[3] = (uint8_t)(addr); + + FlashMem_SPI_SetCSN(0); + retval = FlashMem_SPI_Transfer(wBuffer, NULL, 4, 2); + if (retval) + { + FlashMem_SPI_SetCSN(1); + return retval; + } + + retval = FlashMem_SPI_Transfer(data, NULL, num, 5); + FlashMem_SPI_SetCSN(1); + + if (retval) return retval; + + Tickstart = System_GetTick(); + return FlashMem_WaitForIdle(Tickstart, Timeout); +} + +/////////////////////////////////////////////////////////////////////////////////////////////////////// + +/** + * @brief Error_Handler + */ +void Error_Handler(void) +{ + printf("Errors ocuur!!!\r\n"); + while (1); +} + +uint8_t rData[1024]; +uint8_t wData[1024]; + +/** + * @brief This is a flash memory device test program + */ +void FlashMemory_Test(void) +{ + int32_t retval; + uint32_t i, j; + __IO uint8_t err; + uint32_t Start_Addr; + + /* SPI clock is 6553600 */ + FlashMem_SPI_Init(); + + for (i=0; i<1024; i++) + wData[i] = (uint8_t)(0x33); + + /*- Sector Erase ------------------------------------------------------------------------------------------*/ + Start_Addr = 5*4096; + retval = FlashMem_SectorErase_4KB(Start_Addr); + if (retval) Error_Handler(); + + err = 0; + for (i=0; i<4; i++) + { + retval = FlashMem_Read(rData, 1024*i+Start_Addr, 1024, 15); + if (retval) Error_Handler(); + + for (j=0; j<1024; j++) + { + if (rData[i] != 0xFF) + err = 1; + } + } + if (err) printf("FlashMem_SectorErase_4KB error!\r\n"); + else printf("FlashMem_SectorErase_4KB OK!\r\n"); + + /*- Page write ------------------------------------------------------------------------------------------*/ + err = 0; + retval = FlashMem_PageWrite(wData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256, Start_Addr+256, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256*2, Start_Addr+256*2, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256*3, Start_Addr+256*3, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 1024, 10); + if (retval) Error_Handler(); + + for (i=0; i<1024; i++) + { + if (rData[i] != wData[i]) + err = 1; + } + if (err) printf("FlashMem_PageWrite error!\r\n"); + else printf("FlashMem_PageWrite OK!\r\n"); + + /*- Sector Erase ------------------------------------------------------------------------------------------*/ + retval = FlashMem_SectorErase_4KB(Start_Addr); + if (retval) Error_Handler(); + + err = 0; + for (i=0; i<4; i++) + { + retval = FlashMem_Read(rData, 1024*i+Start_Addr, 1024, 15); + if (retval) Error_Handler(); + + for (j=0; j<1024; j++) + { + if (rData[i] != 0xFF) + err = 1; + } + } + if (err) printf("FlashMem_SectorErase_4KB error!\r\n"); + else printf("FlashMem_SectorErase_4KB OK!\r\n"); + + /*- Block Erase 32KB ------------------------------------------------------------------------------------------*/ + Start_Addr = 55*32*1024; + err = 0; + retval = FlashMem_BlockErase_32KB(Start_Addr); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256, Start_Addr+32*1024-256, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+32*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != wData[i]) + err = 1; + } + + if (err) printf("FlashMem_BlockErase_32KB[0] error!\r\n"); + else printf("FlashMem_BlockErase_32KB[0] OK!\r\n"); + + retval = FlashMem_BlockErase_32KB(Start_Addr); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+32*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != 0xFF) + err = 1; + } + + if (err) printf("FlashMem_BlockErase_32KB[1] error!\r\n"); + else printf("FlashMem_BlockErase_32KB[1] OK!\r\n"); + + /*- Block Erase 64KB ------------------------------------------------------------------------------------------*/ + Start_Addr = 13*64*1024; + err = 0; + retval = FlashMem_BlockErase_64KB(Start_Addr); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256, Start_Addr+64*1024-256, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 10); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+64*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != wData[i]) + err = 1; + } + + if (err) printf("FlashMem_BlockErase_64KB[0] error!\r\n"); + else printf("FlashMem_BlockErase_64KB[0] OK!\r\n"); + + retval = FlashMem_BlockErase_64KB(Start_Addr); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+64*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != 0xFF) + err = 1; + } + + if (err) printf("FlashMem_BlockErase_64KB[1] error!\r\n"); + else printf("FlashMem_BlockErase_64KB[1] OK!\r\n"); + + /*- Chip Erase ------------------------------------------------------------------------------------------*/ + err = 0; + retval = FlashMem_ChipErase(); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_PageWrite(wData+256, Start_Addr+4*1024*1024-256, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+4*1024*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != wData[i]) + err = 1; + } + + if (err) printf("FlashMem_ChipErase[0] error!\r\n"); + else printf("FlashMem_ChipErase[0] OK!\r\n"); + + + retval = FlashMem_ChipErase(); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData, Start_Addr, 256, 15); + if (retval) Error_Handler(); + + retval = FlashMem_Read(rData+256, Start_Addr+4*1024*1024-256, 256, 15); + if (retval) Error_Handler(); + + for (i=0; i<512; i++) + { + if (rData[i] != 0xFF) + err = 1; + } + + if (err) printf("FlashMem_ChipErase[1] error!\r\n"); + else printf("FlashMem_ChipErase[1] OK!\r\n"); + + + FlashMem_SPI_DeInit(); + printf("============================ Flash memory device test end! ============================\r\n"); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/main.c new file mode 100644 index 0000000000..cde9617533 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/main.c @@ -0,0 +1,89 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + test_success = 1; + + PMU_AVCCOutputCmd(ENABLE); + + /* Flash memory device test */ + printf("============================ Flash memory device test start! ============================\r\n"); + FlashMemory_Test(); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/target_isr.c new file mode 100644 index 0000000000..5f7af1af14 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + nTicks++; +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_FlashMem_FM25Q32_6MClock_TimeoutDetect/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/main.h new file mode 100644 index 0000000000..c0b9433e44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/main.h @@ -0,0 +1,36 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#define Buffer_Size (256) + +extern __IO uint32_t Transmit_Cnt; +extern __IO uint32_t Receive_Cnt; + +extern uint8_t Transmit_Buffer[Buffer_Size]; +extern uint8_t Receive_Buffer[Buffer_Size]; + + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..6adb6f1903 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..9342264cae --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 113 + 113 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/main.c new file mode 100644 index 0000000000..c664fe775a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/main.c @@ -0,0 +1,143 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ +uint32_t i; +uint8_t Transmit_Buffer[Buffer_Size]; +uint8_t Receive_Buffer[Buffer_Size]; +__IO uint32_t Transmit_Cnt; /* Increased by 1 when transmit a byte data */ +__IO uint32_t Receive_Cnt; /* Increased by 1 when receive a byte data */ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + SPI_InitType SPI_InitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + for (i=0; i 0 */ + SPI_ReceiveFIFOLevelConfig(SPI1, SPI_RXFLEV_0); + + Transmit_Cnt = 0; + Receive_Cnt = 0; + + /* Reset SS, slave be selected, active */ + GPIO_WriteBit(GPIO_B, 6, 0); + + /*Enable SPI1*/ + SPI_Cmd(SPI1, ENABLE); + + /* Enable SPI1 transmit interrupt, enter SPI1 Interrupt Service Routine */ + SPI_INTConfig(SPI1, SPI_INT_TX, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(SPI1_IRQn, 0); + + test_success = 1; + + /* Waiting receive operation done */ + while (Receive_Cnt < Buffer_Size) + { + if(SPI_GetStatus(SPI1, SPI_STS_RNE)) + Receive_Buffer[Receive_Cnt++] = SPI_ReceiveData(SPI1); + } + + /* Set SS, slave be not selected, inactive */ + GPIO_WriteBit(GPIO_B, 6, 1); + + /* SPI resource release */ + SPI_DeviceInit(SPI1); + CORTEX_NVIC_DisableIRQ(SPI1_IRQn); + printf("SPI1 send finish!\r\n"); + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/target_isr.c new file mode 100644 index 0000000000..d40839b8b1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/target_isr.c @@ -0,0 +1,315 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ + if (SPI_GetStatus(SPI1, SPI_STS_TXIF)) + { + while ((Transmit_Cnt < Buffer_Size) && SPI_GetStatus(SPI1, SPI_STS_TNF)) + { + SPI_SendData(SPI1, Transmit_Buffer[Transmit_Cnt++]); + } + if (Transmit_Cnt == Buffer_Size) + { + SPI_INTConfig(SPI1, SPI_INT_TX, DISABLE); + } + SPI_ClearStatus(SPI1, SPI_STS_TXIF); + } +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_TransmitIT_SSUnused/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..1028c49ff5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 141 + 141 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/main.c new file mode 100644 index 0000000000..57ed651ec9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/main.c @@ -0,0 +1,165 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +#define CSN_GPIO GPIOB +#define CSN_GPIO_DAT GPIO_B +#define CSN_Pin GPIO_Pin_9 +#define CSN_PinNum 9 + +uint32_t Transmit_Buffer_32b[4] = { 0x11111111, 0x22222222, 0x33333333, 0x44444444 }; +uint32_t Transmit_Buffer_16b[4] = { 0x1111, 0x2222, 0x3333, 0x4444 }; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Configure SPI CSN pin level. + * @param None + * @retval None + */ +void SPI_CSNConfig(uint8_t level) +{ + if (level) GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 1); + else GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 0); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + SPI_InitType SPI_InitStruct; + GPIO_InitType GPIO_InitStruct; + uint8_t i; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* CSN pin output high, inactive */ + GPIO_WriteBit(CSN_GPIO_DAT, CSN_PinNum, 1); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = CSN_Pin; + GPIOBToF_Init(CSN_GPIO, &GPIO_InitStruct); + + /* SPI1 initialization, master mode */ + SPI_DeviceInit(SPI1); + SPI_InitStruct.ClockDivision = SPI_CLKDIV_32; + SPI_InitStruct.Mode = SPI_MODE_MASTER; + SPI_InitStruct.CSNSoft = SPI_CSNSOFT_ENABLE; + SPI_InitStruct.SPH = SPI_SPH_0; + SPI_InitStruct.SPO = SPI_SPO_0; + SPI_InitStruct.SWAP = SPI_SWAP_DISABLE; + SPI_Init(SPI1, &SPI_InitStruct); + + /*Enable SPI1 */ + SPI_Cmd(SPI1, ENABLE); + + /* Send 4 32-Bits datas */ + for (i=0; i<4; i++) + { + /* CSN active */ + SPI_CSNConfig(0); + /* Loop while until TXFIFO is empty */ + while (SPI_GetStatus(SPI1, SPI_STS_TFE) == 0); + SPI_SendData(SPI1, (Transmit_Buffer_32b[i]>>24)&0xff); + SPI_SendData(SPI1, (Transmit_Buffer_32b[i]>>16)&0xff); + SPI_SendData(SPI1, (Transmit_Buffer_32b[i]>>8)&0xff); + SPI_SendData(SPI1, (Transmit_Buffer_32b[i])&0xff); + /* While loop until idle */ + while (SPI_GetStatus(SPI1, SPI_STS_BSY) == 1); + /* CSN inactive */ + SPI_CSNConfig(1); + } + printf("SPI1 send 4*32Bits datas finish!\r\n"); + + /* Send 4 16-Bits datas */ + for (i=0; i<4; i++) + { + /* CSN active */ + SPI_CSNConfig(0); + /* Loop while until TXFIFO is empty */ + while (SPI_GetStatus(SPI1, SPI_STS_TFE) == 0); + SPI_SendData(SPI1, (Transmit_Buffer_16b[i]>>8)&0xff); + SPI_SendData(SPI1, (Transmit_Buffer_16b[i])&0xff); + /* While loop until idle */ + while (SPI_GetStatus(SPI1, SPI_STS_BSY) == 1); + /* CSN inactive */ + SPI_CSNConfig(1); + } + printf("SPI1 send 4*16Bits datas finish!\r\n"); + + /* SPI1 and CSN pin release */ + SPI_DeviceInit(SPI1); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = CSN_Pin; + GPIOBToF_Init(CSN_GPIO, &GPIO_InitStruct); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/target_isr.c new file mode 100644 index 0000000000..206935d6c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SPI/SPI_Transmit_16BitsData_32BitsData/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..077860369a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 77 + 77 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/main.c new file mode 100644 index 0000000000..e441ac1f34 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/main.c @@ -0,0 +1,101 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief SysTick interrupt service. + * @param None + * @retval None + */ +void SysTick_IntService(void) +{ + GPIOB->DAT ^= GPIO_Pin_7; +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* IOB7 CMOS-Output mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + /* Enable SysTick timer and its interrupt to generate interrupt(1ms) */ + CORTEX_SystemTick_Config(26214400/1000 - 1); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/target_isr.c new file mode 100644 index 0000000000..00b5712ff1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/target_isr.c @@ -0,0 +1,306 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern void SysTick_IntService(void); +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + SysTick_IntService(); +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_24BitsBaseTimer_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..517e05aeb8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 65 + 65 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/main.c new file mode 100644 index 0000000000..eff17ef56d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/main.c @@ -0,0 +1,122 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +__IO uint32_t nTick; + +/** + * @brief SysTick interrupt service. + * @param None + * @retval None + */ +void SysTick_IntService(void) +{ + nTick++; +} + +/** + * @brief Delay N ms. + * @param None + * @retval None + */ +void Delay_ms(uint32_t n) +{ + uint32_t Ticks_start; + + Ticks_start = nTick; + while ((nTick - Ticks_start) < n); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* IOB7 CMOS-Output mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + /* Enable SysTick timer and its interrupt to generate interrupt(1ms) */ + CORTEX_SystemTick_Config(26214400/1000 - 1); + + test_success = 1; + + while (1) + { + /* Toggle IOB7, 5ms */ + Delay_ms(5); + GPIO_WriteBit(GPIO_B, 7, 1); + Delay_ms(5); + GPIO_WriteBit(GPIO_B, 7, 0); + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/target_isr.c new file mode 100644 index 0000000000..6dad605ee0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/target_isr.c @@ -0,0 +1,307 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V4.4.0 + * @date 2018-09-27 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern __IO uint32_t nTick; +extern void SysTick_IntService(void); + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ + SysTick_IntService(); +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..a2f48e09a4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvoptx @@ -0,0 +1,639 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 1 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 1 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 1 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 1 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 1 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..d82341b33d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARM/template.uvprojx @@ -0,0 +1,658 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + + 0 + 12 + + + + + + ..\..\..\test.ini + + + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..c386f78345 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 61 + 61 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/main.c new file mode 100644 index 0000000000..baddfedcd0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/main.c @@ -0,0 +1,117 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Delay N system-clock cycle. + * @param nClock < 0x1000000 + * @retval None + */ +void Delay_nSysClock(__IO uint32_t nClock) +{ + uint32_t tmp; + + SysTick->LOAD = nClock - 1; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk \ + |SysTick_CTRL_ENABLE_Msk; + + do + { + tmp = SysTick->CTRL; + } + while (!(tmp & SysTick_CTRL_COUNTFLAG_Msk)); + + SysTick->CTRL = 0; +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* IOB7 CMOS-Output mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + test_success = 1; + + while (1) + { + /* Toggle IOB7, 10ms */ + Delay_nSysClock(26214400/100); + GPIO_WriteBit(GPIO_B, 7, 1); + Delay_nSysClock(26214400/100); + GPIO_WriteBit(GPIO_B, 7, 0); + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/target_isr.c new file mode 100644 index 0000000000..d700a63a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/target_isr.c @@ -0,0 +1,303 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/SysTick/SysTick_Delay_Polling/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..f3c82d1f38 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 83 + 83 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/main.c new file mode 100644 index 0000000000..167c5452a2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/main.c @@ -0,0 +1,107 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + TMR_InitType TMR_InitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* IOB7, CMOS output mode, output low */ + GPIO_WriteBit(GPIO_B, 7, 0); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + /* Timer0 initialization: + - Clock source: internal clock(APB clock 13107200Hz) + - Overflow interval: 10ms */ + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_INTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 13107200/100 - 1; + TMR_Init(TMR0, &TMR_InitStruct); + + /* Enable Timer0 interrupt */ + TMR_INTConfig(TMR0, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(TMR0_IRQn, 0); + + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/target_isr.c new file mode 100644 index 0000000000..5f30538fda --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ + if (TMR_GetINTStatus(TMR0)) + { + TMR_ClearINTStatus(TMR0); + /* Toggle IOB7 */ + GPIO_WriteBit(GPIO_B, 7, !GPIOBToF_ReadOutputDataBit(GPIOB, GPIO_Pin_7)); + } +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_32BitsBaseTimer_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7f3b2bc20f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 88 + 88 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/main.c new file mode 100644 index 0000000000..fdfc3ad811 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/main.c @@ -0,0 +1,112 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + TMR_InitType TMR_InitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* Toggle IOB7 in interrupt, CMOS output mode, output low */ + GPIO_WriteBit(GPIO_B, 7, 0); + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_7; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + /* Timer external clock input pin(IOB15), input mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_15; + GPIOBToF_Init(GPIOB, &GPIO_InitStruct); + + /* Timer0 initialization: + - Clock source: external clock + - Overflow interval: (4+1)/(external clock) */ + TMR_DeInit(TMR0); + TMR_InitStruct.ClockSource = TMR_CLKSRC_EXTERNAL; + TMR_InitStruct.EXTGT = TMR_EXTGT_DISABLE; + TMR_InitStruct.Period = 5 - 1; + TMR_Init(TMR0, &TMR_InitStruct); + + /* Enable Timer0 interrupt */ + TMR_INTConfig(TMR0, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(TMR0_IRQn, 0); + + /* Enable Timer0 */ + TMR_Cmd(TMR0, ENABLE); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/target_isr.c new file mode 100644 index 0000000000..25e0f8dee3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/target_isr.c @@ -0,0 +1,310 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ + if (TMR_GetINTStatus(TMR0)) + { + TMR_ClearINTStatus(TMR0); + /* Toggle IOB7 */ + GPIO_WriteBit(GPIO_B, 7, !GPIOBToF_ReadOutputDataBit(GPIOB, GPIO_Pin_7)); + } +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TIMER/TMR_ExternalClockSource_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/lib_conf.h new file mode 100644 index 0000000000..1016be9f02 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/lib_conf.h @@ -0,0 +1,67 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7dee5a1e23 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 93 + 93 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 48 + 48 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/main.c new file mode 100644 index 0000000000..79527a2dde --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/main.c @@ -0,0 +1,135 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; +volatile uint32_t g_nCount; +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + TADCInitType TADC_InitStruct; + GPIO_InitType GPIO_InitStruct; + uint32_t i; + + test_success = 0; + + g_nCount = 0; + + Clock_Init(); + Stdio_Init(); + printf("ADCTiny test. \r\n"); + + TADC_INTConfig(DISABLE); + + /* Forbidden Tiny ADC input pin, IOE6 */ + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_6; + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIOBToF_Init(GPIOE, &GPIO_InitStruct); + + /* Tiny ADC initialization */ + TADC_DeInit(); + TADC_InitStruct.SignalSel = ADCTINY_SIGNALSEL_IOE6; + TADC_InitStruct.ADTREF1 = ADCTINY_REF1_0_9; + TADC_InitStruct.ADTREF2 = ADCTINY_REF2_1_8; + TADC_InitStruct.ADTREF3 = ADCTINY_REF3_2_7; + TADC_Init(&TADC_InitStruct); + + + /* Enable Tiny ADC */ + TADC_Cmd(ENABLE); + for(i=0; i<800; i++) + { + __NOP(); + } + + TADC_IntTHConfig(ADCTINY_THSEL_1); + for(i=0; i<800; i++) + { + __NOP(); + } + TADC_ClearINTStatus(); + TADC_INTConfig(ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(ANA_IRQn, 3); + + test_success = 1; + + while(1) + { + WDT_Disable(); + Stdio_Init(); + printf("Tiny ADC interrupt, nCount: %d\r\n", (int32_t)g_nCount); + printf("CMPOUT: %d. \r\n", TADC_GetOutput()); + // CORTEX_Delay_nSysClock(26214400/2); + if (PMU_EnterSleepMode()) + { + printf("Current mode is debug mode, failed\r\n"); + } + else + { + printf("Quit sleep mode\r\n"); + } + } + +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/target_isr.c new file mode 100644 index 0000000000..af9bbd985a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/target_isr.c @@ -0,0 +1,309 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern volatile uint32_t g_nCount; +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ + if (TADC_GetINTStatus()) + { + g_nCount++; + TADC_ClearINTStatus(); + } +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/TinyADC/TinyADC/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..864f6d83a0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 67 + 67 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/main.c new file mode 100644 index 0000000000..5d6092ef79 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/main.c @@ -0,0 +1,91 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* How to use printf() via UART. + Compiler Compiler-symbol Description + MDK_ARM __CC_ARM Selects [Use MicroLib], use fputc() to support + EWARM __ICCARM__ Selects [Full] in [Library configuration]->[Library], use fputc() to support + Eclipse __GNUC__ Selects [Do not use syscalls](--specs=nosys.specs), use _write() to support + */ + printf("printf to UART OK!!!\r\n"); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_StdPrint/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..4ff0bbdb69 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 81 + 81 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/main.c new file mode 100644 index 0000000000..2b292d197c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/main.c @@ -0,0 +1,105 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +int i; +uint8_t Transmit_Buffer[4] = { 0x12, 0x34, 0x56, 0x78 }; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + UART_InitType UART_InitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + + /* UART0 initialization */ + UART_DeInit(UART0); + UART_InitStruct.Baudrate = 300; + UART_InitStruct.FirstBit = UART_FIRSTBIT_LSB; + UART_InitStruct.Mode = UART_MODE_TX; + UART_InitStruct.Parity = UART_PARITY_ODD; + UART_Init(UART0, &UART_InitStruct); + + for (i=0; i<4; i++) + { + UART_SendData(UART0, Transmit_Buffer[i]); + while (UART_GetFlag(UART0, UART_FLAG_TXDONE) == 0U); + UART_ClearFlag(UART0, UART_FLAG_TXDONE); + } + + printf("UART0 send(300bps) datas finish!\r\n"); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_300bps/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..2d0cd6f6c2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,638 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + 0 + 0 + 88 + 1 +
4694
+ 0 + 0 + 0 + 0 + 0 + 1 + ..\Src\main.c + + \\template\../Src/main.c\88 +
+
+ + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + +
+
+ + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..35b81dcfdd --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 98 + 98 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/main.c new file mode 100644 index 0000000000..0568f07dc1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/main.c @@ -0,0 +1,122 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + + +/* Private functions ---------------------------------------------------------*/ +uint8_t TX_Buffer[4] = { 0x12, 0x34, 0x56, 0x78 }; +uint32_t nTXLen; +uint8_t RX_Buffer[4] = { 0x00, 0x00, 0x00, 0x00 }; +uint32_t nRXLen; +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + UART_InitType UART_InitStruct; + uint32_t i; + + test_success = 0; + nTXLen = 0; + nRXLen = 0; + + Clock_Init(); + Stdio_Init(); + + /* UART0 initialization */ + UART_DeInit(UART0); + UART_InitStruct.Baudrate = 9600; + UART_InitStruct.FirstBit = UART_FIRSTBIT_LSB; + UART_InitStruct.Mode = UART_MODE_TX|UART_MODE_RX; + UART_InitStruct.Parity = UART_PARITY_ODD; + UART_Init(UART0, &UART_InitStruct); + + UART_INTConfig(UART0,UART_INT_TXDONE, ENABLE); + UART_INTConfig(UART0,UART_INT_RX, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(UART0_IRQn, 0); + + UART_SendData(UART0, TX_Buffer[0]); + nTXLen++; + + while(nTXLen<4) + { + WDT_Clear(); + } + + printf("UART0 send datas finish!\r\n"); + + test_success = 1; + + for(i=0; i<4; i++) + { + if(TX_Buffer[i] != RX_Buffer[i]) + { + printf("UART0 Receive datas error!\r\n"); + } + } + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/target_isr.c new file mode 100644 index 0000000000..9aa8646e5c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/target_isr.c @@ -0,0 +1,328 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +extern uint8_t TX_Buffer[4]; +extern uint32_t nTXLen; +extern uint8_t RX_Buffer[4]; +extern uint32_t nRXLen; +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ + if(UART_GetINTStatus(UART0,UART_INTSTS_TXDONE)) + { + UART_ClearINTStatus(UART0,UART_INTSTS_TXDONE); + + if(nTXLen<4) + { + UART_SendData(UART0, TX_Buffer[nTXLen]); + nTXLen++; + } + } + if(UART_GetINTStatus(UART0,UART_INTSTS_RX)) + { + UART_ClearINTStatus(UART0,UART_INTSTS_RX); + + if(nRXLen<4) + { + RX_Buffer[nRXLen] = UART_ReceiveData(UART0); + nRXLen++; + } + } +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Tranmit_IT/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..821a7784ba --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 71 + 71 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/main.c new file mode 100644 index 0000000000..69322e588f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/main.c @@ -0,0 +1,95 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + UART_InitType UART_InitStruct; + + test_success = 0; + + Clock_Init(); + + /* UART5 initialization */ + UART_DeInit(UART5); + UART_InitStruct.Baudrate = 4800; + UART_InitStruct.FirstBit = UART_FIRSTBIT_LSB; + UART_InitStruct.Mode = UART_MODE_TX; + UART_InitStruct.Parity = UART_PARITY_ODD; + UART_Init(UART5, &UART_InitStruct); + + /* Send data 0x55 */ + UART_SendData(UART5, 0x55); + + test_success = 1; + + while (1) + { + WDT_Clear(); + } +} + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/target_isr.c new file mode 100644 index 0000000000..1960a41dec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/target_isr.c @@ -0,0 +1,304 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +void HardFault_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +void PendSV_Handler(void) +{ +} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +void SysTick_Handler(void) +{ +} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART/UART_Transmit_IrDA/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/main.h new file mode 100644 index 0000000000..8b3102180a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/main.h @@ -0,0 +1,32 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#define Buffer_Size (4) + +extern __IO uint32_t Receive_Cnt; +extern uint8_t Receive_Buffer[Buffer_Size]; + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..7f3b2bc20f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 88 + 88 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/main.c new file mode 100644 index 0000000000..1704ff2a2a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_Receive_IT/Src/main.c @@ -0,0 +1,127 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +int i; +__IO uint32_t Receive_Cnt; /* Increased by 1 when receive a byte data */ +uint8_t Receive_Buffer[Buffer_Size]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + U32K_InitType U32K_InitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + UART5->BAUDDIV = CLK_GetPCLKFreq()/9600; + UART5->CTRL = UART_CTRL_TXEN; + + /* U32K0 receive line RX0(IOA12), input mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + /* U32K0 initialization */ + U32K_DeInit(U32K0); + U32K_InitStruct.AutoCal = U32K_AUTOCAL_ON; + U32K_InitStruct.Debsel = U32K_DEBSEL_0; + U32K_InitStruct.Baudrate = 9600; + U32K_InitStruct.FirstBit = U32K_FIRSTBIT_LSB; + U32K_InitStruct.LineSel = U32K_LINE_RX0; + U32K_InitStruct.Parity = U32K_PARITY_EVEN; + U32K_Init(U32K0, &U32K_InitStruct); + + /* Enable U32K0 receive interrupt */ + U32K_INTConfig(U32K0, U32K_INT_RX, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(U32K0_IRQn, 0); + + /* Enable U32K0 */ + Receive_Cnt = 0; + U32K_Cmd(U32K0, ENABLE); + + test_success = 1; + + while (Receive_Cnt < Buffer_Size); + + /* U32K0 resource release */ + U32K_DeInit(U32K0); + CORTEX_NVIC_DisableIRQ(U32K0_IRQn); + /* U32K0 receive line RX0(IOA12), forbidden mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + for (i=0; i +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewp new file mode 100644 index 0000000000..d26f9ac566 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.ewp @@ -0,0 +1,2007 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/main.h new file mode 100644 index 0000000000..4fc7d7f091 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/main.h @@ -0,0 +1,33 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#define Buffer_MaxSize (64) + +extern __IO uint32_t Receive_Done; +extern __IO uint32_t Receive_Cnt; /* Increased by 1 when receive a byte data */ +extern uint8_t Receive_Buffer[Buffer_MaxSize]; + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..9ea487fcb6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvoptx @@ -0,0 +1,621 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3cc6e900a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARM/template.uvprojx @@ -0,0 +1,634 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.0.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..ab3bade849 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000021C216BB -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 107 + 107 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 104 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 53 + 53 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/main.c new file mode 100644 index 0000000000..9f5724fff0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Examples/UART32K/U32K_WakeUpSleep/Src/main.c @@ -0,0 +1,151 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" + +volatile unsigned char test_success; + +/* Private functions ---------------------------------------------------------*/ + +int i; +__IO uint32_t Receive_Done; +__IO uint32_t Receive_Cnt; /* Increased by 1 when receive a byte data */ +uint8_t Receive_Buffer[Buffer_MaxSize]; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_6_5MRC; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + +/** + * @brief Main program. + * @param None + * @retval None + */ +int main(void) +{ + U32K_InitType U32K_InitStruct; + GPIO_InitType GPIO_InitStruct; + + test_success = 0; + + Clock_Init(); + FLASH_CycleInit(); + + UART5->BAUDDIV = CLK_GetPCLKFreq()/9600; + UART5->CTRL = UART_CTRL_TXEN; + + /* U32K0 receive line RX0(IOA12), input mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_INPUT; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + /* U32K0 initialization */ + U32K_DeInit(U32K0); + U32K_InitStruct.AutoCal = U32K_AUTOCAL_ON; + U32K_InitStruct.Debsel = U32K_DEBSEL_0; + U32K_InitStruct.Baudrate = 9600; + U32K_InitStruct.FirstBit = U32K_FIRSTBIT_LSB; + U32K_InitStruct.LineSel = U32K_LINE_RX0; + U32K_InitStruct.Parity = U32K_PARITY_NONE; + U32K_Init(U32K0, &U32K_InitStruct); + + /* Wake-up when when receive data */ + U32K_WKUModeConfig(U32K0, U32K_WKUMOD_RX); + + /* Enable U32K0 receive interrupt */ + U32K_INTConfig(U32K0, U32K_INT_RX, ENABLE); + CORTEX_SetPriority_ClearPending_EnableIRQ(U32K0_IRQn, 0); + + /* Enable U32K0 */ + Receive_Cnt = 0; + Receive_Done = 0; + U32K_Cmd(U32K0, ENABLE); + + test_success = 1; + + /* Disable watch dog timer */ + WDT_Disable(); + /* Enter sleep mode */ + if (PMU_EnterSleepMode()) + { + printf("Debug Mode, enter sleep mode fail.\r\n"); + } + + /* Quit sleep mode */ + + /* Waiting receive 0xFE */ + while (Receive_Done == 0) + { + WDT_Clear(); + } + + UART5->BAUDDIV = CLK_GetPCLKFreq()/9600; + UART5->CTRL = UART_CTRL_TXEN; + + /* U32K0 resource release */ + U32K_DeInit(U32K0); + CORTEX_NVIC_DisableIRQ(U32K0_IRQn); + /* U32K0 receive line RX0(IOA12), forbidden mode */ + GPIO_InitStruct.GPIO_Mode = GPIO_MODE_FORBIDDEN; + GPIO_InitStruct.GPIO_Pin = GPIO_Pin_12; + GPIOA_Init(GPIOA, &GPIO_InitStruct); + + for (i=0; i +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/IAR_Kill.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/IAR_Kill.bat new file mode 100644 index 0000000000..a6e07b0aa7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/IAR_Kill.bat @@ -0,0 +1,8 @@ +@echo off + +del /s /a *.lst *.pbi *.cout *.pbd *.browse *.wsdt *.map *.dni *.dep *.ewt *.dbgdt *.tmp 2>nul +for /r . %%d in (.) do rd /s /q "%%d\Debug" 2>nul +for /r . %%d in (.) do rd /s /q "%%d\Release" 2>nul +for /r . %%d in (.) do rd /s /q "%%d\settings" 2>nul + +exit \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armcc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armcc.h new file mode 100644 index 0000000000..4d9d0645d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armcc.h @@ -0,0 +1,865 @@ +/**************************************************************************//** + * @file cmsis_armcc.h + * @brief CMSIS compiler ARMCC (Arm Compiler 5) header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_ARMCC_H +#define __CMSIS_ARMCC_H + + +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 400677) + #error "Please use Arm Compiler Toolchain V4.0.677 or later!" +#endif + +/* CMSIS compiler control architecture macros */ +#if ((defined (__TARGET_ARCH_6_M ) && (__TARGET_ARCH_6_M == 1)) || \ + (defined (__TARGET_ARCH_6S_M ) && (__TARGET_ARCH_6S_M == 1)) ) + #define __ARM_ARCH_6M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7_M ) && (__TARGET_ARCH_7_M == 1)) + #define __ARM_ARCH_7M__ 1 +#endif + +#if (defined (__TARGET_ARCH_7E_M) && (__TARGET_ARCH_7E_M == 1)) + #define __ARM_ARCH_7EM__ 1 +#endif + + /* __ARM_ARCH_8M_BASE__ not applicable */ + /* __ARM_ARCH_8M_MAIN__ not applicable */ + + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE static __forceinline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __declspec(noreturn) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed)) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT __packed struct +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION __packed union +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #define __UNALIGNED_UINT32(x) (*((__packed uint32_t *)(x))) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #define __UNALIGNED_UINT16_WRITE(addr, val) ((*((__packed uint16_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #define __UNALIGNED_UINT16_READ(addr) (*((const __packed uint16_t *)(addr))) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #define __UNALIGNED_UINT32_WRITE(addr, val) ((*((__packed uint32_t *)(addr))) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #define __UNALIGNED_UINT32_READ(addr) (*((const __packed uint32_t *)(addr))) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); */ + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_INLINE uint32_t __get_CONTROL(void) +{ + register uint32_t __regControl __ASM("control"); + return(__regControl); +} + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_INLINE void __set_CONTROL(uint32_t control) +{ + register uint32_t __regControl __ASM("control"); + __regControl = control; +} + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_INLINE uint32_t __get_IPSR(void) +{ + register uint32_t __regIPSR __ASM("ipsr"); + return(__regIPSR); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_INLINE uint32_t __get_APSR(void) +{ + register uint32_t __regAPSR __ASM("apsr"); + return(__regAPSR); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_INLINE uint32_t __get_xPSR(void) +{ + register uint32_t __regXPSR __ASM("xpsr"); + return(__regXPSR); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_INLINE uint32_t __get_PSP(void) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + return(__regProcessStackPointer); +} + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_INLINE void __set_PSP(uint32_t topOfProcStack) +{ + register uint32_t __regProcessStackPointer __ASM("psp"); + __regProcessStackPointer = topOfProcStack; +} + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_INLINE uint32_t __get_MSP(void) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + return(__regMainStackPointer); +} + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_INLINE void __set_MSP(uint32_t topOfMainStack) +{ + register uint32_t __regMainStackPointer __ASM("msp"); + __regMainStackPointer = topOfMainStack; +} + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_INLINE uint32_t __get_PRIMASK(void) +{ + register uint32_t __regPriMask __ASM("primask"); + return(__regPriMask); +} + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_INLINE void __set_PRIMASK(uint32_t priMask) +{ + register uint32_t __regPriMask __ASM("primask"); + __regPriMask = (priMask); +} + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_INLINE uint32_t __get_BASEPRI(void) +{ + register uint32_t __regBasePri __ASM("basepri"); + return(__regBasePri); +} + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI(uint32_t basePri) +{ + register uint32_t __regBasePri __ASM("basepri"); + __regBasePri = (basePri & 0xFFU); +} + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_INLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + register uint32_t __regBasePriMax __ASM("basepri_max"); + __regBasePriMax = (basePri & 0xFFU); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_INLINE uint32_t __get_FAULTMASK(void) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + return(__regFaultMask); +} + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_INLINE void __set_FAULTMASK(uint32_t faultMask) +{ + register uint32_t __regFaultMask __ASM("faultmask"); + __regFaultMask = (faultMask & (uint32_t)1U); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_INLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + return(__regfpscr); +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_INLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + register uint32_t __regfpscr __ASM("fpscr"); + __regfpscr = (fpscr); +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __nop + + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() do {\ + __schedule_barrier();\ + __isb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() do {\ + __schedule_barrier();\ + __dsb(0xF);\ + __schedule_barrier();\ + } while (0U) + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() do {\ + __schedule_barrier();\ + __dmb(0xF);\ + __schedule_barrier();\ + } while (0U) + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV __rev + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rev16_text"))) __STATIC_INLINE __ASM uint32_t __REV16(uint32_t value) +{ + rev16 r0, r0 + bx lr +} +#endif + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".revsh_text"))) __STATIC_INLINE __ASM int16_t __REVSH(int16_t value) +{ + revsh r0, r0 + bx lr +} +#endif + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +#define __ROR __ror + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __breakpoint(value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + #define __RBIT __rbit +#else +__attribute__((always_inline)) __STATIC_INLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ + return result; +} +#endif + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ __clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXB(ptr) ((uint8_t ) __ldrex(ptr)) +#else + #define __LDREXB(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint8_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXH(ptr) ((uint16_t) __ldrex(ptr)) +#else + #define __LDREXH(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint16_t) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __LDREXW(ptr) ((uint32_t ) __ldrex(ptr)) +#else + #define __LDREXW(ptr) _Pragma("push") _Pragma("diag_suppress 3731") ((uint32_t ) __ldrex(ptr)) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXB(value, ptr) __strex(value, ptr) +#else + #define __STREXB(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXH(value, ptr) __strex(value, ptr) +#else + #define __STREXH(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#if defined(__ARMCC_VERSION) && (__ARMCC_VERSION < 5060020) + #define __STREXW(value, ptr) __strex(value, ptr) +#else + #define __STREXW(value, ptr) _Pragma("push") _Pragma("diag_suppress 3731") __strex(value, ptr) _Pragma("pop") +#endif + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __clrex + + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +#ifndef __NO_EMBEDDED_ASM +__attribute__((section(".rrx_text"))) __STATIC_INLINE __ASM uint32_t __RRX(uint32_t value) +{ + rrx r0, r0 + bx lr +} +#endif + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDRBT(ptr) ((uint8_t ) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDRHT(ptr) ((uint16_t) __ldrt(ptr)) + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDRT(ptr) ((uint32_t ) __ldrt(ptr)) + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRBT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRHT(value, ptr) __strt(value, ptr) + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +#define __STRT(value, ptr) __strt(value, ptr) + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__attribute__((always_inline)) __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) + +#define __SADD8 __sadd8 +#define __QADD8 __qadd8 +#define __SHADD8 __shadd8 +#define __UADD8 __uadd8 +#define __UQADD8 __uqadd8 +#define __UHADD8 __uhadd8 +#define __SSUB8 __ssub8 +#define __QSUB8 __qsub8 +#define __SHSUB8 __shsub8 +#define __USUB8 __usub8 +#define __UQSUB8 __uqsub8 +#define __UHSUB8 __uhsub8 +#define __SADD16 __sadd16 +#define __QADD16 __qadd16 +#define __SHADD16 __shadd16 +#define __UADD16 __uadd16 +#define __UQADD16 __uqadd16 +#define __UHADD16 __uhadd16 +#define __SSUB16 __ssub16 +#define __QSUB16 __qsub16 +#define __SHSUB16 __shsub16 +#define __USUB16 __usub16 +#define __UQSUB16 __uqsub16 +#define __UHSUB16 __uhsub16 +#define __SASX __sasx +#define __QASX __qasx +#define __SHASX __shasx +#define __UASX __uasx +#define __UQASX __uqasx +#define __UHASX __uhasx +#define __SSAX __ssax +#define __QSAX __qsax +#define __SHSAX __shsax +#define __USAX __usax +#define __UQSAX __uqsax +#define __UHSAX __uhsax +#define __USAD8 __usad8 +#define __USADA8 __usada8 +#define __SSAT16 __ssat16 +#define __USAT16 __usat16 +#define __UXTB16 __uxtb16 +#define __UXTAB16 __uxtab16 +#define __SXTB16 __sxtb16 +#define __SXTAB16 __sxtab16 +#define __SMUAD __smuad +#define __SMUADX __smuadx +#define __SMLAD __smlad +#define __SMLADX __smladx +#define __SMLALD __smlald +#define __SMLALDX __smlaldx +#define __SMUSD __smusd +#define __SMUSDX __smusdx +#define __SMLSD __smlsd +#define __SMLSDX __smlsdx +#define __SMLSLD __smlsld +#define __SMLSLDX __smlsldx +#define __SEL __sel +#define __QADD __qadd +#define __QSUB __qsub + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +#define __SMMLA(ARG1,ARG2,ARG3) ( (int32_t)((((int64_t)(ARG1) * (ARG2)) + \ + ((int64_t)(ARG3) << 32U) ) >> 32U)) + +#endif /* ((defined (__ARM_ARCH_7EM__) && (__ARM_ARCH_7EM__ == 1)) ) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCC_H */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armclang.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armclang.h new file mode 100644 index 0000000000..162a400ea1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_armclang.h @@ -0,0 +1,1869 @@ +/**************************************************************************//** + * @file cmsis_armclang.h + * @brief CMSIS compiler armclang (Arm Compiler 6) header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/*lint -esym(9058, IRQn)*/ /* disable MISRA 2012 Rule 2.4 for IRQn */ + +#ifndef __CMSIS_ARMCLANG_H +#define __CMSIS_ARMCLANG_H + +#pragma clang system_header /* treat file as system include file */ + +#ifndef __ARM_COMPAT_H +#include /* Compatibility header for Arm Compiler 5 intrinsics */ +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE __inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static __inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static __inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32 */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_WRITE */ + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT16_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT16_READ */ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_WRITE)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_WRITE */ + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma clang diagnostic push + #pragma clang diagnostic ignored "-Wpacked" +/*lint -esym(9058, T_UINT32_READ)*/ /* disable MISRA 2012 Rule 2.4 for T_UINT32_READ */ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma clang diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __enable_irq(); see arm_compat.h */ + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +/* intrinsic void __disable_irq(); see arm_compat.h */ + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __enable_fault_irq __enable_fiq /* see arm_compat.h */ + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +#define __disable_fault_irq __disable_fiq /* see arm_compat.h */ + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __get_FPSCR (uint32_t)__builtin_arm_get_fpscr +#else +#define __get_FPSCR() ((uint32_t)0U) +#endif + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#define __set_FPSCR __builtin_arm_set_fpscr +#else +#define __set_FPSCR(x) ((void)(x)) +#endif + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP __builtin_arm_nop + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI __builtin_arm_wfi + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE __builtin_arm_wfe + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV __builtin_arm_sev + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +#define __ISB() __builtin_arm_isb(0xF); + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +#define __DSB() __builtin_arm_dsb(0xF); + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +#define __DMB() __builtin_arm_dmb(0xF); + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV(value) __builtin_bswap32(value) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REV16(value) __ROR(__REV(value), 16) + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +#define __REVSH(value) (int16_t)__builtin_bswap16(value) + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +#define __RBIT __builtin_arm_rbit + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDREXB (uint8_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDREXH (uint16_t)__builtin_arm_ldrex + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDREXW (uint32_t)__builtin_arm_ldrex + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXB (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXH (uint32_t)__builtin_arm_strex + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STREXW (uint32_t)__builtin_arm_strex + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +#define __CLREX __builtin_arm_clrex + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT __builtin_arm_ssat + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT __builtin_arm_usat + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +#define __LDAEXB (uint8_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +#define __LDAEXH (uint16_t)__builtin_arm_ldaex + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +#define __LDAEX (uint32_t)__builtin_arm_ldaex + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXB (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEXH (uint32_t)__builtin_arm_stlex + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +#define __STLEX (uint32_t)__builtin_arm_stlex + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) +#endif + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#endif /* __CMSIS_ARMCLANG_H */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_compiler.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_compiler.h new file mode 100644 index 0000000000..94212eb87a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_compiler.h @@ -0,0 +1,266 @@ +/**************************************************************************//** + * @file cmsis_compiler.h + * @brief CMSIS compiler generic header file + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_COMPILER_H +#define __CMSIS_COMPILER_H + +#include + +/* + * Arm Compiler 4/5 + */ +#if defined ( __CC_ARM ) + #include "cmsis_armcc.h" + + +/* + * Arm Compiler 6 (armclang) + */ +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #include "cmsis_armclang.h" + + +/* + * GNU Compiler + */ +#elif defined ( __GNUC__ ) + #include "cmsis_gcc.h" + + +/* + * IAR Compiler + */ +#elif defined ( __ICCARM__ ) + #include + + +/* + * TI Arm Compiler + */ +#elif defined ( __TI_ARM__ ) + #include + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __attribute__((packed)) + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed)) + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed)) + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void*)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * TASKING Compiler + */ +#elif defined ( __TASKING__ ) + /* + * The CMSIS functions have been implemented as intrinsics in the compiler. + * Please use "carm -?i" to get an up to date list of all intrinsics, + * Including the CMSIS ones. + */ + + #ifndef __ASM + #define __ASM __asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + #define __NO_RETURN __attribute__((noreturn)) + #endif + #ifndef __USED + #define __USED __attribute__((used)) + #endif + #ifndef __WEAK + #define __WEAK __attribute__((weak)) + #endif + #ifndef __PACKED + #define __PACKED __packed__ + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __packed__ + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION union __packed__ + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + struct __packed__ T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #define __ALIGNED(x) __align(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +/* + * COSMIC Compiler + */ +#elif defined ( __CSMC__ ) + #include + + #ifndef __ASM + #define __ASM _asm + #endif + #ifndef __INLINE + #define __INLINE inline + #endif + #ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline + #endif + #ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __STATIC_INLINE + #endif + #ifndef __NO_RETURN + // NO RETURN is automatically detected hence no warning here + #define __NO_RETURN + #endif + #ifndef __USED + #warning No compiler specific solution for __USED. __USED is ignored. + #define __USED + #endif + #ifndef __WEAK + #define __WEAK __weak + #endif + #ifndef __PACKED + #define __PACKED @packed + #endif + #ifndef __PACKED_STRUCT + #define __PACKED_STRUCT @packed struct + #endif + #ifndef __PACKED_UNION + #define __PACKED_UNION @packed union + #endif + #ifndef __UNALIGNED_UINT32 /* deprecated */ + @packed struct T_UINT32 { uint32_t v; }; + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) + #endif + #ifndef __UNALIGNED_UINT16_WRITE + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT16_READ + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) + #endif + #ifndef __UNALIGNED_UINT32_WRITE + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) + #endif + #ifndef __UNALIGNED_UINT32_READ + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) + #endif + #ifndef __ALIGNED + #warning No compiler specific solution for __ALIGNED. __ALIGNED is ignored. + #define __ALIGNED(x) + #endif + #ifndef __RESTRICT + #warning No compiler specific solution for __RESTRICT. __RESTRICT is ignored. + #define __RESTRICT + #endif + + +#else + #error Unknown compiler. +#endif + + +#endif /* __CMSIS_COMPILER_H */ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_gcc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_gcc.h new file mode 100644 index 0000000000..2d9db15a5d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_gcc.h @@ -0,0 +1,2085 @@ +/**************************************************************************//** + * @file cmsis_gcc.h + * @brief CMSIS compiler GCC header file + * @version V5.0.4 + * @date 09. April 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CMSIS_GCC_H +#define __CMSIS_GCC_H + +/* ignore some GCC warnings */ +#pragma GCC diagnostic push +#pragma GCC diagnostic ignored "-Wsign-conversion" +#pragma GCC diagnostic ignored "-Wconversion" +#pragma GCC diagnostic ignored "-Wunused-parameter" + +/* Fallback for __has_builtin */ +#ifndef __has_builtin + #define __has_builtin(x) (0) +#endif + +/* CMSIS compiler specific defines */ +#ifndef __ASM + #define __ASM __asm +#endif +#ifndef __INLINE + #define __INLINE inline +#endif +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __attribute__((always_inline)) static inline +#endif +#ifndef __NO_RETURN + #define __NO_RETURN __attribute__((__noreturn__)) +#endif +#ifndef __USED + #define __USED __attribute__((used)) +#endif +#ifndef __WEAK + #define __WEAK __attribute__((weak)) +#endif +#ifndef __PACKED + #define __PACKED __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_STRUCT + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) +#endif +#ifndef __PACKED_UNION + #define __PACKED_UNION union __attribute__((packed, aligned(1))) +#endif +#ifndef __UNALIGNED_UINT32 /* deprecated */ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + struct __attribute__((packed)) T_UINT32 { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32(x) (((struct T_UINT32 *)(x))->v) +#endif +#ifndef __UNALIGNED_UINT16_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_WRITE { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_WRITE(addr, val) (void)((((struct T_UINT16_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT16_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT16_READ { uint16_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT16_READ(addr) (((const struct T_UINT16_READ *)(const void *)(addr))->v) +#endif +#ifndef __UNALIGNED_UINT32_WRITE + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_WRITE { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_WRITE(addr, val) (void)((((struct T_UINT32_WRITE *)(void *)(addr))->v) = (val)) +#endif +#ifndef __UNALIGNED_UINT32_READ + #pragma GCC diagnostic push + #pragma GCC diagnostic ignored "-Wpacked" + #pragma GCC diagnostic ignored "-Wattributes" + __PACKED_STRUCT T_UINT32_READ { uint32_t v; }; + #pragma GCC diagnostic pop + #define __UNALIGNED_UINT32_READ(addr) (((const struct T_UINT32_READ *)(const void *)(addr))->v) +#endif +#ifndef __ALIGNED + #define __ALIGNED(x) __attribute__((aligned(x))) +#endif +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + + +/* ########################### Core Function Access ########################### */ +/** \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_RegAccFunctions CMSIS Core Register Access Functions + @{ + */ + +/** + \brief Enable IRQ Interrupts + \details Enables IRQ interrupts by clearing the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_irq(void) +{ + __ASM volatile ("cpsie i" : : : "memory"); +} + + +/** + \brief Disable IRQ Interrupts + \details Disables IRQ interrupts by setting the I-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_irq(void) +{ + __ASM volatile ("cpsid i" : : : "memory"); +} + + +/** + \brief Get Control Register + \details Returns the content of the Control Register. + \return Control Register value + */ +__STATIC_FORCEINLINE uint32_t __get_CONTROL(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Control Register (non-secure) + \details Returns the content of the non-secure Control Register when in secure mode. + \return non-secure Control Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_CONTROL_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, control_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Control Register + \details Writes the given value to the Control Register. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __set_CONTROL(uint32_t control) +{ + __ASM volatile ("MSR control, %0" : : "r" (control) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Control Register (non-secure) + \details Writes the given value to the non-secure Control Register when in secure state. + \param [in] control Control Register value to set + */ +__STATIC_FORCEINLINE void __TZ_set_CONTROL_NS(uint32_t control) +{ + __ASM volatile ("MSR control_ns, %0" : : "r" (control) : "memory"); +} +#endif + + +/** + \brief Get IPSR Register + \details Returns the content of the IPSR Register. + \return IPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_IPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, ipsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get APSR Register + \details Returns the content of the APSR Register. + \return APSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_APSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, apsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get xPSR Register + \details Returns the content of the xPSR Register. + \return xPSR Register value + */ +__STATIC_FORCEINLINE uint32_t __get_xPSR(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, xpsr" : "=r" (result) ); + return(result); +} + + +/** + \brief Get Process Stack Pointer + \details Returns the current value of the Process Stack Pointer (PSP). + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer (non-secure) + \details Returns the current value of the non-secure Process Stack Pointer (PSP) when in secure state. + \return PSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, psp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Process Stack Pointer + \details Assigns the given value to the Process Stack Pointer (PSP). + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_PSP(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp, %0" : : "r" (topOfProcStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Process Stack Pointer (PSP) when in secure state. + \param [in] topOfProcStack Process Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSP_NS(uint32_t topOfProcStack) +{ + __ASM volatile ("MSR psp_ns, %0" : : "r" (topOfProcStack) : ); +} +#endif + + +/** + \brief Get Main Stack Pointer + \details Returns the current value of the Main Stack Pointer (MSP). + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSP(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer (non-secure) + \details Returns the current value of the non-secure Main Stack Pointer (MSP) when in secure state. + \return MSP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, msp_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Main Stack Pointer + \details Assigns the given value to the Main Stack Pointer (MSP). + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __set_MSP(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp, %0" : : "r" (topOfMainStack) : ); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Main Stack Pointer (MSP) when in secure state. + \param [in] topOfMainStack Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSP_NS(uint32_t topOfMainStack) +{ + __ASM volatile ("MSR msp_ns, %0" : : "r" (topOfMainStack) : ); +} +#endif + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Stack Pointer (non-secure) + \details Returns the current value of the non-secure Stack Pointer (SP) when in secure state. + \return SP Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_SP_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, sp_ns" : "=r" (result) ); + return(result); +} + + +/** + \brief Set Stack Pointer (non-secure) + \details Assigns the given value to the non-secure Stack Pointer (SP) when in secure state. + \param [in] topOfStack Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_SP_NS(uint32_t topOfStack) +{ + __ASM volatile ("MSR sp_ns, %0" : : "r" (topOfStack) : ); +} +#endif + + +/** + \brief Get Priority Mask + \details Returns the current state of the priority mask bit from the Priority Mask Register. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __get_PRIMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask" : "=r" (result) :: "memory"); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Priority Mask (non-secure) + \details Returns the current state of the non-secure priority mask bit from the Priority Mask Register when in secure state. + \return Priority Mask value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PRIMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, primask_ns" : "=r" (result) :: "memory"); + return(result); +} +#endif + + +/** + \brief Set Priority Mask + \details Assigns the given value to the Priority Mask Register. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __set_PRIMASK(uint32_t priMask) +{ + __ASM volatile ("MSR primask, %0" : : "r" (priMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Priority Mask (non-secure) + \details Assigns the given value to the non-secure Priority Mask Register when in secure state. + \param [in] priMask Priority Mask + */ +__STATIC_FORCEINLINE void __TZ_set_PRIMASK_NS(uint32_t priMask) +{ + __ASM volatile ("MSR primask_ns, %0" : : "r" (priMask) : "memory"); +} +#endif + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Enable FIQ + \details Enables FIQ interrupts by clearing the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __enable_fault_irq(void) +{ + __ASM volatile ("cpsie f" : : : "memory"); +} + + +/** + \brief Disable FIQ + \details Disables FIQ interrupts by setting the F-bit in the CPSR. + Can only be executed in Privileged modes. + */ +__STATIC_FORCEINLINE void __disable_fault_irq(void) +{ + __ASM volatile ("cpsid f" : : : "memory"); +} + + +/** + \brief Get Base Priority + \details Returns the current value of the Base Priority register. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __get_BASEPRI(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Base Priority (non-secure) + \details Returns the current value of the non-secure Base Priority register when in secure state. + \return Base Priority register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_BASEPRI_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, basepri_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Base Priority + \details Assigns the given value to the Base Priority register. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI(uint32_t basePri) +{ + __ASM volatile ("MSR basepri, %0" : : "r" (basePri) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Base Priority (non-secure) + \details Assigns the given value to the non-secure Base Priority register when in secure state. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __TZ_set_BASEPRI_NS(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_ns, %0" : : "r" (basePri) : "memory"); +} +#endif + + +/** + \brief Set Base Priority with condition + \details Assigns the given value to the Base Priority register only if BASEPRI masking is disabled, + or the new value increases the BASEPRI priority level. + \param [in] basePri Base Priority value to set + */ +__STATIC_FORCEINLINE void __set_BASEPRI_MAX(uint32_t basePri) +{ + __ASM volatile ("MSR basepri_max, %0" : : "r" (basePri) : "memory"); +} + + +/** + \brief Get Fault Mask + \details Returns the current value of the Fault Mask register. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __get_FAULTMASK(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask" : "=r" (result) ); + return(result); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Fault Mask (non-secure) + \details Returns the current value of the non-secure Fault Mask register when in secure state. + \return Fault Mask register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_FAULTMASK_NS(void) +{ + uint32_t result; + + __ASM volatile ("MRS %0, faultmask_ns" : "=r" (result) ); + return(result); +} +#endif + + +/** + \brief Set Fault Mask + \details Assigns the given value to the Fault Mask register. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __set_FAULTMASK(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask, %0" : : "r" (faultMask) : "memory"); +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Fault Mask (non-secure) + \details Assigns the given value to the non-secure Fault Mask register when in secure state. + \param [in] faultMask Fault Mask value to set + */ +__STATIC_FORCEINLINE void __TZ_set_FAULTMASK_NS(uint32_t faultMask) +{ + __ASM volatile ("MSR faultmask_ns, %0" : : "r" (faultMask) : "memory"); +} +#endif + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + +/** + \brief Get Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Process Stack Pointer Limit (PSPLIM). + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_PSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim" : "=r" (result) ); + return result; +#endif +} + +#if (defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Process Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \return PSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_PSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, psplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Process Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Process Stack Pointer Limit (PSPLIM). + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_PSPLIM(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim, %0" : : "r" (ProcStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Process Stack Pointer (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Process Stack Pointer Limit (PSPLIM) when in secure state. + \param [in] ProcStackPtrLimit Process Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __TZ_set_PSPLIM_NS(uint32_t ProcStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)ProcStackPtrLimit; +#else + __ASM volatile ("MSR psplim_ns, %0\n" : : "r" (ProcStackPtrLimit)); +#endif +} +#endif + + +/** + \brief Get Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always in non-secure + mode. + + \details Returns the current value of the Main Stack Pointer Limit (MSPLIM). + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __get_MSPLIM(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim" : "=r" (result) ); + return result; +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Get Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence zero is returned always. + + \details Returns the current value of the non-secure Main Stack Pointer Limit(MSPLIM) when in secure state. + \return MSPLIM Register value + */ +__STATIC_FORCEINLINE uint32_t __TZ_get_MSPLIM_NS(void) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + return 0U; +#else + uint32_t result; + __ASM volatile ("MRS %0, msplim_ns" : "=r" (result) ); + return result; +#endif +} +#endif + + +/** + \brief Set Main Stack Pointer Limit + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored in non-secure + mode. + + \details Assigns the given value to the Main Stack Pointer Limit (MSPLIM). + \param [in] MainStackPtrLimit Main Stack Pointer Limit value to set + */ +__STATIC_FORCEINLINE void __set_MSPLIM(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim, %0" : : "r" (MainStackPtrLimit)); +#endif +} + + +#if (defined (__ARM_FEATURE_CMSE ) && (__ARM_FEATURE_CMSE == 3)) +/** + \brief Set Main Stack Pointer Limit (non-secure) + Devices without ARMv8-M Main Extensions (i.e. Cortex-M23) lack the non-secure + Stack Pointer Limit register hence the write is silently ignored. + + \details Assigns the given value to the non-secure Main Stack Pointer Limit (MSPLIM) when in secure state. + \param [in] MainStackPtrLimit Main Stack Pointer value to set + */ +__STATIC_FORCEINLINE void __TZ_set_MSPLIM_NS(uint32_t MainStackPtrLimit) +{ +#if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)MainStackPtrLimit; +#else + __ASM volatile ("MSR msplim_ns, %0" : : "r" (MainStackPtrLimit)); +#endif +} +#endif + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +/** + \brief Get FPSCR + \details Returns the current value of the Floating Point Status/Control register. + \return Floating Point Status/Control register value + */ +__STATIC_FORCEINLINE uint32_t __get_FPSCR(void) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_get_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + return __builtin_arm_get_fpscr(); +#else + uint32_t result; + + __ASM volatile ("VMRS %0, fpscr" : "=r" (result) ); + return(result); +#endif +#else + return(0U); +#endif +} + + +/** + \brief Set FPSCR + \details Assigns the given value to the Floating Point Status/Control register. + \param [in] fpscr Floating Point Status/Control value to set + */ +__STATIC_FORCEINLINE void __set_FPSCR(uint32_t fpscr) +{ +#if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) +#if __has_builtin(__builtin_arm_set_fpscr) +// Re-enable using built-in when GCC has been fixed +// || (__GNUC__ > 7) || (__GNUC__ == 7 && __GNUC_MINOR__ >= 2) + /* see https://gcc.gnu.org/ml/gcc-patches/2017-04/msg00443.html */ + __builtin_arm_set_fpscr(fpscr); +#else + __ASM volatile ("VMSR fpscr, %0" : : "r" (fpscr) : "vfpcc", "memory"); +#endif +#else + (void)fpscr; +#endif +} + + +/*@} end of CMSIS_Core_RegAccFunctions */ + + +/* ########################## Core Instruction Access ######################### */ +/** \defgroup CMSIS_Core_InstructionInterface CMSIS Core Instruction Interface + Access to dedicated instructions + @{ +*/ + +/* Define macros for porting to both thumb1 and thumb2. + * For thumb1, use low register (r0-r7), specified by constraint "l" + * Otherwise, use general registers, specified by constraint "r" */ +#if defined (__thumb__) && !defined (__thumb2__) +#define __CMSIS_GCC_OUT_REG(r) "=l" (r) +#define __CMSIS_GCC_RW_REG(r) "+l" (r) +#define __CMSIS_GCC_USE_REG(r) "l" (r) +#else +#define __CMSIS_GCC_OUT_REG(r) "=r" (r) +#define __CMSIS_GCC_RW_REG(r) "+r" (r) +#define __CMSIS_GCC_USE_REG(r) "r" (r) +#endif + +/** + \brief No Operation + \details No Operation does nothing. This instruction can be used for code alignment purposes. + */ +#define __NOP() __ASM volatile ("nop") + +/** + \brief Wait For Interrupt + \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. + */ +#define __WFI() __ASM volatile ("wfi") + + +/** + \brief Wait For Event + \details Wait For Event is a hint instruction that permits the processor to enter + a low-power state until one of a number of events occurs. + */ +#define __WFE() __ASM volatile ("wfe") + + +/** + \brief Send Event + \details Send Event is a hint instruction. It causes an event to be signaled to the CPU. + */ +#define __SEV() __ASM volatile ("sev") + + +/** + \brief Instruction Synchronization Barrier + \details Instruction Synchronization Barrier flushes the pipeline in the processor, + so that all instructions following the ISB are fetched from cache or memory, + after the instruction has been completed. + */ +__STATIC_FORCEINLINE void __ISB(void) +{ + __ASM volatile ("isb 0xF":::"memory"); +} + + +/** + \brief Data Synchronization Barrier + \details Acts as a special kind of Data Memory Barrier. + It completes when all explicit memory accesses before this instruction complete. + */ +__STATIC_FORCEINLINE void __DSB(void) +{ + __ASM volatile ("dsb 0xF":::"memory"); +} + + +/** + \brief Data Memory Barrier + \details Ensures the apparent order of the explicit memory operations before + and after the instruction, without ensuring their completion. + */ +__STATIC_FORCEINLINE void __DMB(void) +{ + __ASM volatile ("dmb 0xF":::"memory"); +} + + +/** + \brief Reverse byte order (32 bit) + \details Reverses the byte order in unsigned integer value. For example, 0x12345678 becomes 0x78563412. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV(uint32_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) + return __builtin_bswap32(value); +#else + uint32_t result; + + __ASM volatile ("rev %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order within each halfword of a word. For example, 0x12345678 becomes 0x34127856. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __REV16(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rev16 %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +} + + +/** + \brief Reverse byte order (16 bit) + \details Reverses the byte order in a 16-bit value and returns the signed 16-bit result. For example, 0x0080 becomes 0x8000. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE int16_t __REVSH(int16_t value) +{ +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + return (int16_t)__builtin_bswap16(value); +#else + int16_t result; + + __ASM volatile ("revsh %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return result; +#endif +} + + +/** + \brief Rotate Right in unsigned value (32 bit) + \details Rotate Right (immediate) provides the value of the contents of a register rotated by a variable number of bits. + \param [in] op1 Value to rotate + \param [in] op2 Number of Bits to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __ROR(uint32_t op1, uint32_t op2) +{ + op2 %= 32U; + if (op2 == 0U) + { + return op1; + } + return (op1 >> op2) | (op1 << (32U - op2)); +} + + +/** + \brief Breakpoint + \details Causes the processor to enter Debug state. + Debug tools can use this to investigate system state when the instruction at a particular address is reached. + \param [in] value is ignored by the processor. + If required, a debugger can use it to store additional information about the breakpoint. + */ +#define __BKPT(value) __ASM volatile ("bkpt "#value) + + +/** + \brief Reverse bit order of value + \details Reverses the bit order of the given value. + \param [in] value Value to reverse + \return Reversed value + */ +__STATIC_FORCEINLINE uint32_t __RBIT(uint32_t value) +{ + uint32_t result; + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) + __ASM volatile ("rbit %0, %1" : "=r" (result) : "r" (value) ); +#else + uint32_t s = (4U /*sizeof(v)*/ * 8U) - 1U; /* extra shift needed at end */ + + result = value; /* r will be reversed bits of v; first get LSB of v */ + for (value >>= 1U; value != 0U; value >>= 1U) + { + result <<= 1U; + result |= value & 1U; + s--; + } + result <<= s; /* shift when v's highest bits are zero */ +#endif + return result; +} + + +/** + \brief Count leading zeros + \details Counts the number of leading zeros of a data value. + \param [in] value Value to count the leading zeros + \return number of leading zeros in value + */ +#define __CLZ (uint8_t)__builtin_clz + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief LDR Exclusive (8 bit) + \details Executes a exclusive LDR instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDREXB(volatile uint8_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexb %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexb %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (16 bit) + \details Executes a exclusive LDR instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDREXH(volatile uint16_t *addr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrexh %0, %1" : "=r" (result) : "Q" (*addr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrexh %0, [%1]" : "=r" (result) : "r" (addr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDR Exclusive (32 bit) + \details Executes a exclusive LDR instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDREXW(volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("ldrex %0, %1" : "=r" (result) : "Q" (*addr) ); + return(result); +} + + +/** + \brief STR Exclusive (8 bit) + \details Executes a exclusive STR instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXB(uint8_t value, volatile uint8_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexb %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (16 bit) + \details Executes a exclusive STR instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXH(uint16_t value, volatile uint16_t *addr) +{ + uint32_t result; + + __ASM volatile ("strexh %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief STR Exclusive (32 bit) + \details Executes a exclusive STR instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STREXW(uint32_t value, volatile uint32_t *addr) +{ + uint32_t result; + + __ASM volatile ("strex %0, %2, %1" : "=&r" (result), "=Q" (*addr) : "r" (value) ); + return(result); +} + + +/** + \brief Remove the exclusive lock + \details Removes the exclusive lock which is created by LDREX. + */ +__STATIC_FORCEINLINE void __CLREX(void) +{ + __ASM volatile ("clrex" ::: "memory"); +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (1..32) + \return Saturated value + */ +#define __SSAT(ARG1,ARG2) \ +__extension__ \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] ARG1 Value to be saturated + \param [in] ARG2 Bit position to saturate to (0..31) + \return Saturated value + */ +#define __USAT(ARG1,ARG2) \ + __extension__ \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + + +/** + \brief Rotate Right with Extend (32 bit) + \details Moves each bit of a bitstring right by one bit. + The carry input is shifted in at the left end of the bitstring. + \param [in] value Value to rotate + \return Rotated value + */ +__STATIC_FORCEINLINE uint32_t __RRX(uint32_t value) +{ + uint32_t result; + + __ASM volatile ("rrx %0, %1" : __CMSIS_GCC_OUT_REG (result) : __CMSIS_GCC_USE_REG (value) ); + return(result); +} + + +/** + \brief LDRT Unprivileged (8 bit) + \details Executes a Unprivileged LDRT instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDRBT(volatile uint8_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrbt %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrbt %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint8_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (16 bit) + \details Executes a Unprivileged LDRT instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDRHT(volatile uint16_t *ptr) +{ + uint32_t result; + +#if (__GNUC__ > 4) || (__GNUC__ == 4 && __GNUC_MINOR__ >= 8) + __ASM volatile ("ldrht %0, %1" : "=r" (result) : "Q" (*ptr) ); +#else + /* Prior to GCC 4.8, "Q" will be expanded to [rx, #0] which is not + accepted by assembler. So has to use following less efficient pattern. + */ + __ASM volatile ("ldrht %0, [%1]" : "=r" (result) : "r" (ptr) : "memory" ); +#endif + return ((uint16_t) result); /* Add explicit type cast here */ +} + + +/** + \brief LDRT Unprivileged (32 bit) + \details Executes a Unprivileged LDRT instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDRT(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldrt %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief STRT Unprivileged (8 bit) + \details Executes a Unprivileged STRT instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRBT(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("strbt %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (16 bit) + \details Executes a Unprivileged STRT instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRHT(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("strht %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief STRT Unprivileged (32 bit) + \details Executes a Unprivileged STRT instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STRT(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("strt %1, %0" : "=Q" (*ptr) : "r" (value) ); +} + +#else /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + +/** + \brief Signed Saturate + \details Saturates a signed value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (1..32) + \return Saturated value + */ +__STATIC_FORCEINLINE int32_t __SSAT(int32_t val, uint32_t sat) +{ + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; +} + +/** + \brief Unsigned Saturate + \details Saturates an unsigned value. + \param [in] value Value to be saturated + \param [in] sat Bit position to saturate to (0..31) + \return Saturated value + */ +__STATIC_FORCEINLINE uint32_t __USAT(int32_t val, uint32_t sat) +{ + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; +} + +#endif /* ((defined (__ARM_ARCH_7M__ ) && (__ARM_ARCH_7M__ == 1)) || \ + (defined (__ARM_ARCH_7EM__ ) && (__ARM_ARCH_7EM__ == 1)) || \ + (defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) ) */ + + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) +/** + \brief Load-Acquire (8 bit) + \details Executes a LDAB instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldab %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire (16 bit) + \details Executes a LDAH instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldah %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire (32 bit) + \details Executes a LDA instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDA(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("lda %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release (8 bit) + \details Executes a STLB instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLB(uint8_t value, volatile uint8_t *ptr) +{ + __ASM volatile ("stlb %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (16 bit) + \details Executes a STLH instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STLH(uint16_t value, volatile uint16_t *ptr) +{ + __ASM volatile ("stlh %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Store-Release (32 bit) + \details Executes a STL instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + */ +__STATIC_FORCEINLINE void __STL(uint32_t value, volatile uint32_t *ptr) +{ + __ASM volatile ("stl %1, %0" : "=Q" (*ptr) : "r" ((uint32_t)value) ); +} + + +/** + \brief Load-Acquire Exclusive (8 bit) + \details Executes a LDAB exclusive instruction for 8 bit value. + \param [in] ptr Pointer to data + \return value of type uint8_t at (*ptr) + */ +__STATIC_FORCEINLINE uint8_t __LDAEXB(volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexb %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint8_t) result); +} + + +/** + \brief Load-Acquire Exclusive (16 bit) + \details Executes a LDAH exclusive instruction for 16 bit values. + \param [in] ptr Pointer to data + \return value of type uint16_t at (*ptr) + */ +__STATIC_FORCEINLINE uint16_t __LDAEXH(volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaexh %0, %1" : "=r" (result) : "Q" (*ptr) ); + return ((uint16_t) result); +} + + +/** + \brief Load-Acquire Exclusive (32 bit) + \details Executes a LDA exclusive instruction for 32 bit values. + \param [in] ptr Pointer to data + \return value of type uint32_t at (*ptr) + */ +__STATIC_FORCEINLINE uint32_t __LDAEX(volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("ldaex %0, %1" : "=r" (result) : "Q" (*ptr) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (8 bit) + \details Executes a STLB exclusive instruction for 8 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexb %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (16 bit) + \details Executes a STLH exclusive instruction for 16 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlexh %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + + +/** + \brief Store-Release Exclusive (32 bit) + \details Executes a STL exclusive instruction for 32 bit values. + \param [in] value Value to store + \param [in] ptr Pointer to location + \return 0 Function succeeded + \return 1 Function failed + */ +__STATIC_FORCEINLINE uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) +{ + uint32_t result; + + __ASM volatile ("stlex %0, %2, %1" : "=&r" (result), "=Q" (*ptr) : "r" ((uint32_t)value) ); + return(result); +} + +#endif /* ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) */ + +/*@}*/ /* end of group CMSIS_Core_InstructionInterface */ + + +/* ################### Compiler specific Intrinsics ########################### */ +/** \defgroup CMSIS_SIMD_intrinsics CMSIS SIMD Intrinsics + Access to dedicated SIMD instructions + @{ +*/ + +#if (defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1)) + +__STATIC_FORCEINLINE uint32_t __SADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + + +__STATIC_FORCEINLINE uint32_t __SADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHADD16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhadd16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSUB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsub16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHASX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhasx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("ssax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __QSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("qsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("shsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UQSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uqsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UHSAX(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uhsax %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USAD8(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("usad8 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __USADA8(uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("usada8 %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#define __SSAT16(ARG1,ARG2) \ +({ \ + int32_t __RES, __ARG1 = (ARG1); \ + __ASM ("ssat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +#define __USAT16(ARG1,ARG2) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1); \ + __ASM ("usat16 %0, %1, %2" : "=r" (__RES) : "I" (ARG2), "r" (__ARG1) ); \ + __RES; \ + }) + +__STATIC_FORCEINLINE uint32_t __UXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("uxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __UXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("uxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTB16(uint32_t op1) +{ + uint32_t result; + + __ASM volatile ("sxtb16 %0, %1" : "=r" (result) : "r" (op1)); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SXTAB16(uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sxtab16 %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUAD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuad %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUADX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smuadx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLAD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlad %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLADX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smladx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLALD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlald %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLALDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlaldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SMUSD (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMUSDX (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("smusdx %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSD (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsd %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint32_t __SMLSDX (uint32_t op1, uint32_t op2, uint32_t op3) +{ + uint32_t result; + + __ASM volatile ("smlsdx %0, %1, %2, %3" : "=r" (result) : "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLD (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsld %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint64_t __SMLSLDX (uint32_t op1, uint32_t op2, uint64_t acc) +{ + union llreg_u{ + uint32_t w32[2]; + uint64_t w64; + } llr; + llr.w64 = acc; + +#ifndef __ARMEB__ /* Little endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[0]), "=r" (llr.w32[1]): "r" (op1), "r" (op2) , "0" (llr.w32[0]), "1" (llr.w32[1]) ); +#else /* Big endian */ + __ASM volatile ("smlsldx %0, %1, %2, %3" : "=r" (llr.w32[1]), "=r" (llr.w32[0]): "r" (op1), "r" (op2) , "0" (llr.w32[1]), "1" (llr.w32[0]) ); +#endif + + return(llr.w64); +} + +__STATIC_FORCEINLINE uint32_t __SEL (uint32_t op1, uint32_t op2) +{ + uint32_t result; + + __ASM volatile ("sel %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QADD( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qadd %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +__STATIC_FORCEINLINE int32_t __QSUB( int32_t op1, int32_t op2) +{ + int32_t result; + + __ASM volatile ("qsub %0, %1, %2" : "=r" (result) : "r" (op1), "r" (op2) ); + return(result); +} + +#if 0 +#define __PKHBT(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + __ASM ("pkhbt %0, %1, %2, lsl %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) + +#define __PKHTB(ARG1,ARG2,ARG3) \ +({ \ + uint32_t __RES, __ARG1 = (ARG1), __ARG2 = (ARG2); \ + if (ARG3 == 0) \ + __ASM ("pkhtb %0, %1, %2" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2) ); \ + else \ + __ASM ("pkhtb %0, %1, %2, asr %3" : "=r" (__RES) : "r" (__ARG1), "r" (__ARG2), "I" (ARG3) ); \ + __RES; \ + }) +#endif + +#define __PKHBT(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0x0000FFFFUL) | \ + ((((uint32_t)(ARG2)) << (ARG3)) & 0xFFFF0000UL) ) + +#define __PKHTB(ARG1,ARG2,ARG3) ( ((((uint32_t)(ARG1)) ) & 0xFFFF0000UL) | \ + ((((uint32_t)(ARG2)) >> (ARG3)) & 0x0000FFFFUL) ) + +__STATIC_FORCEINLINE int32_t __SMMLA (int32_t op1, int32_t op2, int32_t op3) +{ + int32_t result; + + __ASM volatile ("smmla %0, %1, %2, %3" : "=r" (result): "r" (op1), "r" (op2), "r" (op3) ); + return(result); +} + +#endif /* (__ARM_FEATURE_DSP == 1) */ +/*@} end of group CMSIS_SIMD_intrinsics */ + + +#pragma GCC diagnostic pop + +#endif /* __CMSIS_GCC_H */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_iccarm.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_iccarm.h new file mode 100644 index 0000000000..11c4af0eba --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_iccarm.h @@ -0,0 +1,935 @@ +/**************************************************************************//** + * @file cmsis_iccarm.h + * @brief CMSIS compiler ICCARM (IAR Compiler for Arm) header file + * @version V5.0.7 + * @date 19. June 2018 + ******************************************************************************/ + +//------------------------------------------------------------------------------ +// +// Copyright (c) 2017-2018 IAR Systems +// +// Licensed under the Apache License, Version 2.0 (the "License") +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// +//------------------------------------------------------------------------------ + + +#ifndef __CMSIS_ICCARM_H__ +#define __CMSIS_ICCARM_H__ + +#ifndef __ICCARM__ + #error This file should only be compiled by ICCARM +#endif + +#pragma system_include + +#define __IAR_FT _Pragma("inline=forced") __intrinsic + +#if (__VER__ >= 8000000) + #define __ICCARM_V8 1 +#else + #define __ICCARM_V8 0 +#endif + +#ifndef __ALIGNED + #if __ICCARM_V8 + #define __ALIGNED(x) __attribute__((aligned(x))) + #elif (__VER__ >= 7080000) + /* Needs IAR language extensions */ + #define __ALIGNED(x) __attribute__((aligned(x))) + #else + #warning No compiler specific solution for __ALIGNED.__ALIGNED is ignored. + #define __ALIGNED(x) + #endif +#endif + + +/* Define compiler macros for CPU architecture, used in CMSIS 5. + */ +#if __ARM_ARCH_6M__ || __ARM_ARCH_7M__ || __ARM_ARCH_7EM__ || __ARM_ARCH_8M_BASE__ || __ARM_ARCH_8M_MAIN__ +/* Macros already defined */ +#else + #if defined(__ARM8M_MAINLINE__) || defined(__ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM_ARCH_PROFILE) && __ARM_ARCH_PROFILE == 'M' + #if __ARM_ARCH == 6 + #define __ARM_ARCH_6M__ 1 + #elif __ARM_ARCH == 7 + #if __ARM_FEATURE_DSP + #define __ARM_ARCH_7EM__ 1 + #else + #define __ARM_ARCH_7M__ 1 + #endif + #endif /* __ARM_ARCH */ + #endif /* __ARM_ARCH_PROFILE == 'M' */ +#endif + +/* Alternativ core deduction for older ICCARM's */ +#if !defined(__ARM_ARCH_6M__) && !defined(__ARM_ARCH_7M__) && !defined(__ARM_ARCH_7EM__) && \ + !defined(__ARM_ARCH_8M_BASE__) && !defined(__ARM_ARCH_8M_MAIN__) + #if defined(__ARM6M__) && (__CORE__ == __ARM6M__) + #define __ARM_ARCH_6M__ 1 + #elif defined(__ARM7M__) && (__CORE__ == __ARM7M__) + #define __ARM_ARCH_7M__ 1 + #elif defined(__ARM7EM__) && (__CORE__ == __ARM7EM__) + #define __ARM_ARCH_7EM__ 1 + #elif defined(__ARM8M_BASELINE__) && (__CORE == __ARM8M_BASELINE__) + #define __ARM_ARCH_8M_BASE__ 1 + #elif defined(__ARM8M_MAINLINE__) && (__CORE == __ARM8M_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #elif defined(__ARM8EM_MAINLINE__) && (__CORE == __ARM8EM_MAINLINE__) + #define __ARM_ARCH_8M_MAIN__ 1 + #else + #error "Unknown target." + #endif +#endif + + + +#if defined(__ARM_ARCH_6M__) && __ARM_ARCH_6M__==1 + #define __IAR_M0_FAMILY 1 +#elif defined(__ARM_ARCH_8M_BASE__) && __ARM_ARCH_8M_BASE__==1 + #define __IAR_M0_FAMILY 1 +#else + #define __IAR_M0_FAMILY 0 +#endif + + +#ifndef __ASM + #define __ASM __asm +#endif + +#ifndef __INLINE + #define __INLINE inline +#endif + +#ifndef __NO_RETURN + #if __ICCARM_V8 + #define __NO_RETURN __attribute__((__noreturn__)) + #else + #define __NO_RETURN _Pragma("object_attribute=__noreturn") + #endif +#endif + +#ifndef __PACKED + #if __ICCARM_V8 + #define __PACKED __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED __packed + #endif +#endif + +#ifndef __PACKED_STRUCT + #if __ICCARM_V8 + #define __PACKED_STRUCT struct __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_STRUCT __packed struct + #endif +#endif + +#ifndef __PACKED_UNION + #if __ICCARM_V8 + #define __PACKED_UNION union __attribute__((packed, aligned(1))) + #else + /* Needs IAR language extensions */ + #define __PACKED_UNION __packed union + #endif +#endif + +#ifndef __RESTRICT + #define __RESTRICT __restrict +#endif + +#ifndef __STATIC_INLINE + #define __STATIC_INLINE static inline +#endif + +#ifndef __FORCEINLINE + #define __FORCEINLINE _Pragma("inline=forced") +#endif + +#ifndef __STATIC_FORCEINLINE + #define __STATIC_FORCEINLINE __FORCEINLINE __STATIC_INLINE +#endif + +#ifndef __UNALIGNED_UINT16_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint16_t __iar_uint16_read(void const *ptr) +{ + return *(__packed uint16_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT16_READ(PTR) __iar_uint16_read(PTR) +#endif + + +#ifndef __UNALIGNED_UINT16_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint16_write(void const *ptr, uint16_t val) +{ + *(__packed uint16_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT16_WRITE(PTR,VAL) __iar_uint16_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32_READ +#pragma language=save +#pragma language=extended +__IAR_FT uint32_t __iar_uint32_read(void const *ptr) +{ + return *(__packed uint32_t*)(ptr); +} +#pragma language=restore +#define __UNALIGNED_UINT32_READ(PTR) __iar_uint32_read(PTR) +#endif + +#ifndef __UNALIGNED_UINT32_WRITE +#pragma language=save +#pragma language=extended +__IAR_FT void __iar_uint32_write(void const *ptr, uint32_t val) +{ + *(__packed uint32_t*)(ptr) = val;; +} +#pragma language=restore +#define __UNALIGNED_UINT32_WRITE(PTR,VAL) __iar_uint32_write(PTR,VAL) +#endif + +#ifndef __UNALIGNED_UINT32 /* deprecated */ +#pragma language=save +#pragma language=extended +__packed struct __iar_u32 { uint32_t v; }; +#pragma language=restore +#define __UNALIGNED_UINT32(PTR) (((struct __iar_u32 *)(PTR))->v) +#endif + +#ifndef __USED + #if __ICCARM_V8 + #define __USED __attribute__((used)) + #else + #define __USED _Pragma("__root") + #endif +#endif + +#ifndef __WEAK + #if __ICCARM_V8 + #define __WEAK __attribute__((weak)) + #else + #define __WEAK _Pragma("__weak") + #endif +#endif + + +#ifndef __ICCARM_INTRINSICS_VERSION__ + #define __ICCARM_INTRINSICS_VERSION__ 0 +#endif + +#if __ICCARM_INTRINSICS_VERSION__ == 2 + + #if defined(__CLZ) + #undef __CLZ + #endif + #if defined(__REVSH) + #undef __REVSH + #endif + #if defined(__RBIT) + #undef __RBIT + #endif + #if defined(__SSAT) + #undef __SSAT + #endif + #if defined(__USAT) + #undef __USAT + #endif + + #include "iccarm_builtin.h" + + #define __disable_fault_irq __iar_builtin_disable_fiq + #define __disable_irq __iar_builtin_disable_interrupt + #define __enable_fault_irq __iar_builtin_enable_fiq + #define __enable_irq __iar_builtin_enable_interrupt + #define __arm_rsr __iar_builtin_rsr + #define __arm_wsr __iar_builtin_wsr + + + #define __get_APSR() (__arm_rsr("APSR")) + #define __get_BASEPRI() (__arm_rsr("BASEPRI")) + #define __get_CONTROL() (__arm_rsr("CONTROL")) + #define __get_FAULTMASK() (__arm_rsr("FAULTMASK")) + + #if ((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) ) + #define __get_FPSCR() (__arm_rsr("FPSCR")) + #define __set_FPSCR(VALUE) (__arm_wsr("FPSCR", (VALUE))) + #else + #define __get_FPSCR() ( 0 ) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #define __get_IPSR() (__arm_rsr("IPSR")) + #define __get_MSP() (__arm_rsr("MSP")) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __get_MSPLIM() (0U) + #else + #define __get_MSPLIM() (__arm_rsr("MSPLIM")) + #endif + #define __get_PRIMASK() (__arm_rsr("PRIMASK")) + #define __get_PSP() (__arm_rsr("PSP")) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __get_PSPLIM() (0U) + #else + #define __get_PSPLIM() (__arm_rsr("PSPLIM")) + #endif + + #define __get_xPSR() (__arm_rsr("xPSR")) + + #define __set_BASEPRI(VALUE) (__arm_wsr("BASEPRI", (VALUE))) + #define __set_BASEPRI_MAX(VALUE) (__arm_wsr("BASEPRI_MAX", (VALUE))) + #define __set_CONTROL(VALUE) (__arm_wsr("CONTROL", (VALUE))) + #define __set_FAULTMASK(VALUE) (__arm_wsr("FAULTMASK", (VALUE))) + #define __set_MSP(VALUE) (__arm_wsr("MSP", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + #define __set_MSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_MSPLIM(VALUE) (__arm_wsr("MSPLIM", (VALUE))) + #endif + #define __set_PRIMASK(VALUE) (__arm_wsr("PRIMASK", (VALUE))) + #define __set_PSP(VALUE) (__arm_wsr("PSP", (VALUE))) + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __set_PSPLIM(VALUE) ((void)(VALUE)) + #else + #define __set_PSPLIM(VALUE) (__arm_wsr("PSPLIM", (VALUE))) + #endif + + #define __TZ_get_CONTROL_NS() (__arm_rsr("CONTROL_NS")) + #define __TZ_set_CONTROL_NS(VALUE) (__arm_wsr("CONTROL_NS", (VALUE))) + #define __TZ_get_PSP_NS() (__arm_rsr("PSP_NS")) + #define __TZ_set_PSP_NS(VALUE) (__arm_wsr("PSP_NS", (VALUE))) + #define __TZ_get_MSP_NS() (__arm_rsr("MSP_NS")) + #define __TZ_set_MSP_NS(VALUE) (__arm_wsr("MSP_NS", (VALUE))) + #define __TZ_get_SP_NS() (__arm_rsr("SP_NS")) + #define __TZ_set_SP_NS(VALUE) (__arm_wsr("SP_NS", (VALUE))) + #define __TZ_get_PRIMASK_NS() (__arm_rsr("PRIMASK_NS")) + #define __TZ_set_PRIMASK_NS(VALUE) (__arm_wsr("PRIMASK_NS", (VALUE))) + #define __TZ_get_BASEPRI_NS() (__arm_rsr("BASEPRI_NS")) + #define __TZ_set_BASEPRI_NS(VALUE) (__arm_wsr("BASEPRI_NS", (VALUE))) + #define __TZ_get_FAULTMASK_NS() (__arm_rsr("FAULTMASK_NS")) + #define __TZ_set_FAULTMASK_NS(VALUE)(__arm_wsr("FAULTMASK_NS", (VALUE))) + + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + #define __TZ_get_PSPLIM_NS() (0U) + #define __TZ_set_PSPLIM_NS(VALUE) ((void)(VALUE)) + #else + #define __TZ_get_PSPLIM_NS() (__arm_rsr("PSPLIM_NS")) + #define __TZ_set_PSPLIM_NS(VALUE) (__arm_wsr("PSPLIM_NS", (VALUE))) + #endif + + #define __TZ_get_MSPLIM_NS() (__arm_rsr("MSPLIM_NS")) + #define __TZ_set_MSPLIM_NS(VALUE) (__arm_wsr("MSPLIM_NS", (VALUE))) + + #define __NOP __iar_builtin_no_operation + + #define __CLZ __iar_builtin_CLZ + #define __CLREX __iar_builtin_CLREX + + #define __DMB __iar_builtin_DMB + #define __DSB __iar_builtin_DSB + #define __ISB __iar_builtin_ISB + + #define __LDREXB __iar_builtin_LDREXB + #define __LDREXH __iar_builtin_LDREXH + #define __LDREXW __iar_builtin_LDREX + + #define __RBIT __iar_builtin_RBIT + #define __REV __iar_builtin_REV + #define __REV16 __iar_builtin_REV16 + + __IAR_FT int16_t __REVSH(int16_t val) + { + return (int16_t) __iar_builtin_REVSH(val); + } + + #define __ROR __iar_builtin_ROR + #define __RRX __iar_builtin_RRX + + #define __SEV __iar_builtin_SEV + + #if !__IAR_M0_FAMILY + #define __SSAT __iar_builtin_SSAT + #endif + + #define __STREXB __iar_builtin_STREXB + #define __STREXH __iar_builtin_STREXH + #define __STREXW __iar_builtin_STREX + + #if !__IAR_M0_FAMILY + #define __USAT __iar_builtin_USAT + #endif + + #define __WFE __iar_builtin_WFE + #define __WFI __iar_builtin_WFI + + #if __ARM_MEDIA__ + #define __SADD8 __iar_builtin_SADD8 + #define __QADD8 __iar_builtin_QADD8 + #define __SHADD8 __iar_builtin_SHADD8 + #define __UADD8 __iar_builtin_UADD8 + #define __UQADD8 __iar_builtin_UQADD8 + #define __UHADD8 __iar_builtin_UHADD8 + #define __SSUB8 __iar_builtin_SSUB8 + #define __QSUB8 __iar_builtin_QSUB8 + #define __SHSUB8 __iar_builtin_SHSUB8 + #define __USUB8 __iar_builtin_USUB8 + #define __UQSUB8 __iar_builtin_UQSUB8 + #define __UHSUB8 __iar_builtin_UHSUB8 + #define __SADD16 __iar_builtin_SADD16 + #define __QADD16 __iar_builtin_QADD16 + #define __SHADD16 __iar_builtin_SHADD16 + #define __UADD16 __iar_builtin_UADD16 + #define __UQADD16 __iar_builtin_UQADD16 + #define __UHADD16 __iar_builtin_UHADD16 + #define __SSUB16 __iar_builtin_SSUB16 + #define __QSUB16 __iar_builtin_QSUB16 + #define __SHSUB16 __iar_builtin_SHSUB16 + #define __USUB16 __iar_builtin_USUB16 + #define __UQSUB16 __iar_builtin_UQSUB16 + #define __UHSUB16 __iar_builtin_UHSUB16 + #define __SASX __iar_builtin_SASX + #define __QASX __iar_builtin_QASX + #define __SHASX __iar_builtin_SHASX + #define __UASX __iar_builtin_UASX + #define __UQASX __iar_builtin_UQASX + #define __UHASX __iar_builtin_UHASX + #define __SSAX __iar_builtin_SSAX + #define __QSAX __iar_builtin_QSAX + #define __SHSAX __iar_builtin_SHSAX + #define __USAX __iar_builtin_USAX + #define __UQSAX __iar_builtin_UQSAX + #define __UHSAX __iar_builtin_UHSAX + #define __USAD8 __iar_builtin_USAD8 + #define __USADA8 __iar_builtin_USADA8 + #define __SSAT16 __iar_builtin_SSAT16 + #define __USAT16 __iar_builtin_USAT16 + #define __UXTB16 __iar_builtin_UXTB16 + #define __UXTAB16 __iar_builtin_UXTAB16 + #define __SXTB16 __iar_builtin_SXTB16 + #define __SXTAB16 __iar_builtin_SXTAB16 + #define __SMUAD __iar_builtin_SMUAD + #define __SMUADX __iar_builtin_SMUADX + #define __SMMLA __iar_builtin_SMMLA + #define __SMLAD __iar_builtin_SMLAD + #define __SMLADX __iar_builtin_SMLADX + #define __SMLALD __iar_builtin_SMLALD + #define __SMLALDX __iar_builtin_SMLALDX + #define __SMUSD __iar_builtin_SMUSD + #define __SMUSDX __iar_builtin_SMUSDX + #define __SMLSD __iar_builtin_SMLSD + #define __SMLSDX __iar_builtin_SMLSDX + #define __SMLSLD __iar_builtin_SMLSLD + #define __SMLSLDX __iar_builtin_SMLSLDX + #define __SEL __iar_builtin_SEL + #define __QADD __iar_builtin_QADD + #define __QSUB __iar_builtin_QSUB + #define __PKHBT __iar_builtin_PKHBT + #define __PKHTB __iar_builtin_PKHTB + #endif + +#else /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #define __CLZ __cmsis_iar_clz_not_active + #define __SSAT __cmsis_iar_ssat_not_active + #define __USAT __cmsis_iar_usat_not_active + #define __RBIT __cmsis_iar_rbit_not_active + #define __get_APSR __cmsis_iar_get_APSR_not_active + #endif + + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #define __get_FPSCR __cmsis_iar_get_FPSR_not_active + #define __set_FPSCR __cmsis_iar_set_FPSR_not_active + #endif + + #ifdef __INTRINSICS_INCLUDED + #error intrinsics.h is already included previously! + #endif + + #include + + #if __IAR_M0_FAMILY + /* Avoid clash between intrinsics.h and arm_math.h when compiling for Cortex-M0. */ + #undef __CLZ + #undef __SSAT + #undef __USAT + #undef __RBIT + #undef __get_APSR + + __STATIC_INLINE uint8_t __CLZ(uint32_t data) + { + if (data == 0U) { return 32U; } + + uint32_t count = 0U; + uint32_t mask = 0x80000000U; + + while ((data & mask) == 0U) + { + count += 1U; + mask = mask >> 1U; + } + return count; + } + + __STATIC_INLINE uint32_t __RBIT(uint32_t v) + { + uint8_t sc = 31U; + uint32_t r = v; + for (v >>= 1U; v; v >>= 1U) + { + r <<= 1U; + r |= v & 1U; + sc--; + } + return (r << sc); + } + + __STATIC_INLINE uint32_t __get_APSR(void) + { + uint32_t res; + __asm("MRS %0,APSR" : "=r" (res)); + return res; + } + + #endif + + #if (!((defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U)) && \ + (defined (__FPU_USED ) && (__FPU_USED == 1U)) )) + #undef __get_FPSCR + #undef __set_FPSCR + #define __get_FPSCR() (0) + #define __set_FPSCR(VALUE) ((void)VALUE) + #endif + + #pragma diag_suppress=Pe940 + #pragma diag_suppress=Pe177 + + #define __enable_irq __enable_interrupt + #define __disable_irq __disable_interrupt + #define __NOP __no_operation + + #define __get_xPSR __get_PSR + + #if (!defined(__ARM_ARCH_6M__) || __ARM_ARCH_6M__==0) + + __IAR_FT uint32_t __LDREXW(uint32_t volatile *ptr) + { + return __LDREX((unsigned long *)ptr); + } + + __IAR_FT uint32_t __STREXW(uint32_t value, uint32_t volatile *ptr) + { + return __STREX(value, (unsigned long *)ptr); + } + #endif + + + /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + #if (__CORTEX_M >= 0x03) + + __IAR_FT uint32_t __RRX(uint32_t value) + { + uint32_t result; + __ASM("RRX %0, %1" : "=r"(result) : "r" (value) : "cc"); + return(result); + } + + __IAR_FT void __set_BASEPRI_MAX(uint32_t value) + { + __asm volatile("MSR BASEPRI_MAX,%0"::"r" (value)); + } + + + #define __enable_fault_irq __enable_fiq + #define __disable_fault_irq __disable_fiq + + + #endif /* (__CORTEX_M >= 0x03) */ + + __IAR_FT uint32_t __ROR(uint32_t op1, uint32_t op2) + { + return (op1 >> op2) | (op1 << ((sizeof(op1)*8)-op2)); + } + + #if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + __IAR_FT uint32_t __get_MSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,MSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_MSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure MSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR MSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __get_PSPLIM(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __set_PSPLIM(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_CONTROL_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,CONTROL_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_CONTROL_NS(uint32_t value) + { + __asm volatile("MSR CONTROL_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PSP_NS(uint32_t value) + { + __asm volatile("MSR PSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_MSP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSP_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSP_NS(uint32_t value) + { + __asm volatile("MSR MSP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_SP_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,SP_NS" : "=r" (res)); + return res; + } + __IAR_FT void __TZ_set_SP_NS(uint32_t value) + { + __asm volatile("MSR SP_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PRIMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,PRIMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_PRIMASK_NS(uint32_t value) + { + __asm volatile("MSR PRIMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_BASEPRI_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,BASEPRI_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_BASEPRI_NS(uint32_t value) + { + __asm volatile("MSR BASEPRI_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_FAULTMASK_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,FAULTMASK_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_FAULTMASK_NS(uint32_t value) + { + __asm volatile("MSR FAULTMASK_NS,%0" :: "r" (value)); + } + + __IAR_FT uint32_t __TZ_get_PSPLIM_NS(void) + { + uint32_t res; + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + res = 0U; + #else + __asm volatile("MRS %0,PSPLIM_NS" : "=r" (res)); + #endif + return res; + } + + __IAR_FT void __TZ_set_PSPLIM_NS(uint32_t value) + { + #if (!(defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) && \ + (!defined (__ARM_FEATURE_CMSE ) || (__ARM_FEATURE_CMSE < 3))) + // without main extensions, the non-secure PSPLIM is RAZ/WI + (void)value; + #else + __asm volatile("MSR PSPLIM_NS,%0" :: "r" (value)); + #endif + } + + __IAR_FT uint32_t __TZ_get_MSPLIM_NS(void) + { + uint32_t res; + __asm volatile("MRS %0,MSPLIM_NS" : "=r" (res)); + return res; + } + + __IAR_FT void __TZ_set_MSPLIM_NS(uint32_t value) + { + __asm volatile("MSR MSPLIM_NS,%0" :: "r" (value)); + } + + #endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#endif /* __ICCARM_INTRINSICS_VERSION__ == 2 */ + +#define __BKPT(value) __asm volatile ("BKPT %0" : : "i"(value)) + +#if __IAR_M0_FAMILY + __STATIC_INLINE int32_t __SSAT(int32_t val, uint32_t sat) + { + if ((sat >= 1U) && (sat <= 32U)) + { + const int32_t max = (int32_t)((1U << (sat - 1U)) - 1U); + const int32_t min = -1 - max ; + if (val > max) + { + return max; + } + else if (val < min) + { + return min; + } + } + return val; + } + + __STATIC_INLINE uint32_t __USAT(int32_t val, uint32_t sat) + { + if (sat <= 31U) + { + const uint32_t max = ((1U << sat) - 1U); + if (val > (int32_t)max) + { + return max; + } + else if (val < 0) + { + return 0U; + } + } + return (uint32_t)val; + } +#endif + +#if (__CORTEX_M >= 0x03) /* __CORTEX_M is defined in core_cm0.h, core_cm3.h and core_cm4.h. */ + + __IAR_FT uint8_t __LDRBT(volatile uint8_t *addr) + { + uint32_t res; + __ASM("LDRBT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDRHT(volatile uint16_t *addr) + { + uint32_t res; + __ASM("LDRHT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDRT(volatile uint32_t *addr) + { + uint32_t res; + __ASM("LDRT %0, [%1]" : "=r" (res) : "r" (addr) : "memory"); + return res; + } + + __IAR_FT void __STRBT(uint8_t value, volatile uint8_t *addr) + { + __ASM("STRBT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRHT(uint16_t value, volatile uint16_t *addr) + { + __ASM("STRHT %1, [%0]" : : "r" (addr), "r" ((uint32_t)value) : "memory"); + } + + __IAR_FT void __STRT(uint32_t value, volatile uint32_t *addr) + { + __ASM("STRT %1, [%0]" : : "r" (addr), "r" (value) : "memory"); + } + +#endif /* (__CORTEX_M >= 0x03) */ + +#if ((defined (__ARM_ARCH_8M_MAIN__ ) && (__ARM_ARCH_8M_MAIN__ == 1)) || \ + (defined (__ARM_ARCH_8M_BASE__ ) && (__ARM_ARCH_8M_BASE__ == 1)) ) + + + __IAR_FT uint8_t __LDAB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDA(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDA %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT void __STLB(uint8_t value, volatile uint8_t *ptr) + { + __ASM volatile ("STLB %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STLH(uint16_t value, volatile uint16_t *ptr) + { + __ASM volatile ("STLH %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT void __STL(uint32_t value, volatile uint32_t *ptr) + { + __ASM volatile ("STL %1, [%0]" :: "r" (ptr), "r" (value) : "memory"); + } + + __IAR_FT uint8_t __LDAEXB(volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXB %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint8_t)res); + } + + __IAR_FT uint16_t __LDAEXH(volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEXH %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return ((uint16_t)res); + } + + __IAR_FT uint32_t __LDAEX(volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("LDAEX %0, [%1]" : "=r" (res) : "r" (ptr) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXB(uint8_t value, volatile uint8_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXB %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEXH(uint16_t value, volatile uint16_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEXH %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + + __IAR_FT uint32_t __STLEX(uint32_t value, volatile uint32_t *ptr) + { + uint32_t res; + __ASM volatile ("STLEX %0, %2, [%1]" : "=r" (res) : "r" (ptr), "r" (value) : "memory"); + return res; + } + +#endif /* __ARM_ARCH_8M_MAIN__ or __ARM_ARCH_8M_BASE__ */ + +#undef __IAR_FT +#undef __IAR_M0_FAMILY +#undef __ICCARM_V8 + +#pragma diag_default=Pe940 +#pragma diag_default=Pe177 + +#endif /* __CMSIS_ICCARM_H__ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_version.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_version.h new file mode 100644 index 0000000000..660f612aa3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/cmsis_version.h @@ -0,0 +1,39 @@ +/**************************************************************************//** + * @file cmsis_version.h + * @brief CMSIS Core(M) Version definitions + * @version V5.0.2 + * @date 19. April 2017 + ******************************************************************************/ +/* + * Copyright (c) 2009-2017 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CMSIS_VERSION_H +#define __CMSIS_VERSION_H + +/* CMSIS Version definitions */ +#define __CM_CMSIS_VERSION_MAIN ( 5U) /*!< [31:16] CMSIS Core(M) main version */ +#define __CM_CMSIS_VERSION_SUB ( 1U) /*!< [15:0] CMSIS Core(M) sub version */ +#define __CM_CMSIS_VERSION ((__CM_CMSIS_VERSION_MAIN << 16U) | \ + __CM_CMSIS_VERSION_SUB ) /*!< CMSIS Core(M) version number */ +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mbl.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mbl.h new file mode 100644 index 0000000000..251e4ede3a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mbl.h @@ -0,0 +1,1918 @@ +/**************************************************************************//** + * @file core_armv8mbl.h + * @brief CMSIS Armv8-M Baseline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MBL_H_GENERIC +#define __CORE_ARMV8MBL_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MBL + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __ARMv8MBL_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MBL_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MBL_CMSIS_VERSION ((__ARMv8MBL_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MBL_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M ( 2U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MBL_H_DEPENDANT +#define __CORE_ARMV8MBL_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MBL_REV + #define __ARMv8MBL_REV 0x0000U + #warning "__ARMv8MBL_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MBL */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MBL_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mml.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mml.h new file mode 100644 index 0000000000..3a3148ea31 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_armv8mml.h @@ -0,0 +1,2927 @@ +/**************************************************************************//** + * @file core_armv8mml.h + * @brief CMSIS Armv8-M Mainline Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_ARMV8MML_H_GENERIC +#define __CORE_ARMV8MML_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_ARMv8MML + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS Armv8MML definitions */ +#define __ARMv8MML_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __ARMv8MML_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __ARMv8MML_CMSIS_VERSION ((__ARMv8MML_CMSIS_VERSION_MAIN << 16U) | \ + __ARMv8MML_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (81U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined(__ARM_FEATURE_DSP) + #if defined(__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_ARMV8MML_H_DEPENDANT +#define __CORE_ARMV8MML_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __ARMv8MML_REV + #define __ARMv8MML_REV 0x0000U + #warning "__ARMv8MML_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group ARMv8MML */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Sizes Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Sizes Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[809U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) Software Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) Software Lock Status Register */ + uint32_t RESERVED4[4U]; + __IM uint32_t TYPE; /*!< Offset: 0xFC8 (R/ ) Device Identifier Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_SWOSCALER_Pos 0U /*!< TPI ACPR: SWOSCALER Position */ +#define TPI_ACPR_SWOSCALER_Msk (0xFFFFUL /*<< TPI_ACPR_SWOSCALER_Pos*/) /*!< TPI ACPR: SWOSCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI Periodic Synchronization Control Register Definitions */ +#define TPI_PSCR_PSCount_Pos 0U /*!< TPI PSCR: PSCount Position */ +#define TPI_PSCR_PSCount_Msk (0x1FUL /*<< TPI_PSCR_PSCount_Pos*/) /*!< TPI PSCR: TPSCount Mask */ + +/* TPI Software Lock Status Register Definitions */ +#define TPI_LSR_nTT_Pos 1U /*!< TPI LSR: Not thirty-two bit. Position */ +#define TPI_LSR_nTT_Msk (0x1UL << TPI_LSR_nTT_Pos) /*!< TPI LSR: Not thirty-two bit. Mask */ + +#define TPI_LSR_SLK_Pos 1U /*!< TPI LSR: Software Lock status Position */ +#define TPI_LSR_SLK_Msk (0x1UL << TPI_LSR_SLK_Pos) /*!< TPI LSR: Software Lock status Mask */ + +#define TPI_LSR_SLI_Pos 0U /*!< TPI LSR: Software Lock implemented Position */ +#define TPI_LSR_SLI_Msk (0x1UL /*<< TPI_LSR_SLI_Pos*/) /*!< TPI LSR: Software Lock implemented Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFO depth Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFO depth Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_ARMV8MML_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0.h new file mode 100644 index 0000000000..f929bba07b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0.h @@ -0,0 +1,949 @@ +/**************************************************************************//** + * @file core_cm0.h + * @brief CMSIS Cortex-M0 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0_H_GENERIC +#define __CORE_CM0_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M0 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0 definitions */ +#define __CM0_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0_CMSIS_VERSION ((__CM0_CMSIS_VERSION_MAIN << 16U) | \ + __CM0_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0_H_DEPENDANT +#define __CORE_CM0_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0_REV + #define __CM0_REV 0x0000U + #warning "__CM0_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M0 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0plus.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0plus.h new file mode 100644 index 0000000000..424011ac36 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm0plus.h @@ -0,0 +1,1083 @@ +/**************************************************************************//** + * @file core_cm0plus.h + * @brief CMSIS Cortex-M0+ Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM0PLUS_H_GENERIC +#define __CORE_CM0PLUS_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex-M0+ + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM0+ definitions */ +#define __CM0PLUS_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM0PLUS_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM0PLUS_CMSIS_VERSION ((__CM0PLUS_CMSIS_VERSION_MAIN << 16U) | \ + __CM0PLUS_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (0U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM0PLUS_H_DEPENDANT +#define __CORE_CM0PLUS_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM0PLUS_REV + #define __CM0PLUS_REV 0x0000U + #warning "__CM0PLUS_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex-M0+ */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 8U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0xFFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M0+ Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M0+ header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M0+ */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; + +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM0PLUS_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm1.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm1.h new file mode 100644 index 0000000000..0ed678e3b8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm1.h @@ -0,0 +1,976 @@ +/**************************************************************************//** + * @file core_cm1.h + * @brief CMSIS Cortex-M1 Core Peripheral Access Layer Header File + * @version V1.0.0 + * @date 23. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM1_H_GENERIC +#define __CORE_CM1_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M1 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM1 definitions */ +#define __CM1_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM1_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM1_CMSIS_VERSION ((__CM1_CMSIS_VERSION_MAIN << 16U) | \ + __CM1_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (1U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM1_H_DEPENDANT +#define __CORE_CM1_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM1_REV + #define __CM1_REV 0x0100U + #warning "__CM1_REV not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M1 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + uint32_t RESERVED0; + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_ITCMUAEN_Pos 4U /*!< ACTLR: Instruction TCM Upper Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMUAEN_Msk (1UL << SCnSCB_ACTLR_ITCMUAEN_Pos) /*!< ACTLR: Instruction TCM Upper Alias Enable Mask */ + +#define SCnSCB_ACTLR_ITCMLAEN_Pos 3U /*!< ACTLR: Instruction TCM Lower Alias Enable Position */ +#define SCnSCB_ACTLR_ITCMLAEN_Msk (1UL << SCnSCB_ACTLR_ITCMLAEN_Pos) /*!< ACTLR: Instruction TCM Lower Alias Enable Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Cortex-M1 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the Cortex-M1 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for Cortex-M1 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + Address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)0x0U; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)0x0U; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM1_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm23.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm23.h new file mode 100644 index 0000000000..acbc5dfea2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm23.h @@ -0,0 +1,1993 @@ +/**************************************************************************//** + * @file core_cm23.h + * @brief CMSIS Cortex-M23 Core Peripheral Access Layer Header File + * @version V5.0.7 + * @date 22. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM23_H_GENERIC +#define __CORE_CM23_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M23 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS definitions */ +#define __CM23_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM23_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM23_CMSIS_VERSION ((__CM23_CMSIS_VERSION_MAIN << 16U) | \ + __CM23_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (23U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM23_H_DEPENDANT +#define __CORE_CM23_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM23_REV + #define __CM23_REV 0x0000U + #warning "__CM23_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __VTOR_PRESENT + #define __VTOR_PRESENT 0U + #warning "__VTOR_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif + + #ifndef __ETM_PRESENT + #define __ETM_PRESENT 0U + #warning "__ETM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MTB_PRESENT + #define __MTB_PRESENT 0U + #warning "__MTB_PRESENT not defined in device header file; using default!" + #endif + +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M23 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint32_t IPR[124U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ +#else + uint32_t RESERVED0; +#endif + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED1; + __IOM uint32_t SHPR[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + uint32_t RESERVED0[6U]; + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x3UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + uint32_t RESERVED0[7U]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 1U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: EN Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: EN Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#endif +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register */ +#define CoreDebug_DEMCR_DWTENA_Pos 24U /*!< CoreDebug DEMCR: DWTENA Position */ +#define CoreDebug_DEMCR_DWTENA_Msk (1UL << CoreDebug_DEMCR_DWTENA_Pos) /*!< CoreDebug DEMCR: DWTENA Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for Cortex-M23 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for Cortex-M23 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + +#define __NVIC_SetPriorityGrouping(X) (void)(X) +#define __NVIC_GetPriorityGrouping() (0U) + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + If VTOR is not present address 0 must be mapped to SRAM. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ +#if defined (__VTOR_PRESENT) && (__VTOR_PRESENT == 1U) + uint32_t *vectors = (uint32_t *)SCB->VTOR; +#else + uint32_t *vectors = (uint32_t *)0x0U; +#endif + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[_IP_IDX(IRQn)] = ((uint32_t)(NVIC_NS->IPR[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB_NS->SHPR[_SHP_IDX(IRQn)] = ((uint32_t)(SCB_NS->SHPR[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IPR[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB_NS->SHPR[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM23_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm3.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm3.h new file mode 100644 index 0000000000..74bff64be4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm3.h @@ -0,0 +1,1941 @@ +/**************************************************************************//** + * @file core_cm3.h + * @brief CMSIS Cortex-M3 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM3_H_GENERIC +#define __CORE_CM3_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M3 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM3 definitions */ +#define __CM3_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM3_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM3_CMSIS_VERSION ((__CM3_CMSIS_VERSION_MAIN << 16U) | \ + __CM3_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (3U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM3_H_DEPENDANT +#define __CORE_CM3_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM3_REV + #define __CM3_REV 0x0200U + #warning "__CM3_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M3 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#if defined (__CM3_REV) && (__CM3_REV < 0x0201U) /* core r2p1 */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#else +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ +#endif + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ +#if defined (__CM3_REV) && (__CM3_REV >= 0x200U) + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +#else + uint32_t RESERVED1[1U]; +#endif +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM3_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm33.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm33.h new file mode 100644 index 0000000000..6cd2db77fe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm33.h @@ -0,0 +1,3002 @@ +/**************************************************************************//** + * @file core_cm33.h + * @brief CMSIS Cortex-M33 Core Peripheral Access Layer Header File + * @version V5.0.9 + * @date 06. July 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM33_H_GENERIC +#define __CORE_CM33_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M33 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM33 definitions */ +#define __CM33_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM33_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM33_CMSIS_VERSION ((__CM33_CMSIS_VERSION_MAIN << 16U) | \ + __CM33_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (33U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined (__TARGET_FPU_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined (__ARM_PCS_VFP) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined (__ARMVFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + + #if defined (__ARM_FEATURE_DSP) && (__ARM_FEATURE_DSP == 1U) + #if defined (__DSP_PRESENT) && (__DSP_PRESENT == 1U) + #define __DSP_USED 1U + #else + #error "Compiler generates DSP (SIMD) instructions for a devices without DSP extensions (check __DSP_PRESENT)" + #define __DSP_USED 0U + #endif + #else + #define __DSP_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined (__TI_VFP_SUPPORT__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined (__FPU_VFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM33_H_DEPENDANT +#define __CORE_CM33_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM33_REV + #define __CM33_REV 0x0000U + #warning "__CM33_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __SAUREGION_PRESENT + #define __SAUREGION_PRESENT 0U + #warning "__SAUREGION_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DSP_PRESENT + #define __DSP_PRESENT 0U + #warning "__DSP_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M33 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core SAU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:7; /*!< bit: 9..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t IT:2; /*!< bit: 25..26 saved IT state (read 0) */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_IT_Pos 25U /*!< xPSR: IT Position */ +#define xPSR_IT_Msk (3UL << xPSR_IT_Pos) /*!< xPSR: IT Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack-pointer select */ + uint32_t FPCA:1; /*!< bit: 2 Floating-point context active */ + uint32_t SFPA:1; /*!< bit: 3 Secure floating-point active */ + uint32_t _reserved1:28; /*!< bit: 4..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SFPA_Pos 3U /*!< CONTROL: SFPA Position */ +#define CONTROL_SFPA_Msk (1UL << CONTROL_SFPA_Pos) /*!< CONTROL: SFPA Mask */ + +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[16U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[16U]; + __IOM uint32_t ICER[16U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[16U]; + __IOM uint32_t ISPR[16U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[16U]; + __IOM uint32_t ICPR[16U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[16U]; + __IOM uint32_t IABR[16U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[16U]; + __IOM uint32_t ITNS[16U]; /*!< Offset: 0x280 (R/W) Interrupt Non-Secure State Register */ + uint32_t RESERVED5[16U]; + __IOM uint8_t IPR[496U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED6[580U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[6U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + __IOM uint32_t NSACR; /*!< Offset: 0x08C (R/W) Non-Secure Access Control Register */ + uint32_t RESERVED3[92U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_PENDNMISET_Pos 31U /*!< SCB ICSR: PENDNMISET Position */ +#define SCB_ICSR_PENDNMISET_Msk (1UL << SCB_ICSR_PENDNMISET_Pos) /*!< SCB ICSR: PENDNMISET Mask */ + +#define SCB_ICSR_NMIPENDSET_Pos SCB_ICSR_PENDNMISET_Pos /*!< SCB ICSR: NMIPENDSET Position, backward compatibility */ +#define SCB_ICSR_NMIPENDSET_Msk SCB_ICSR_PENDNMISET_Msk /*!< SCB ICSR: NMIPENDSET Mask, backward compatibility */ + +#define SCB_ICSR_PENDNMICLR_Pos 30U /*!< SCB ICSR: PENDNMICLR Position */ +#define SCB_ICSR_PENDNMICLR_Msk (1UL << SCB_ICSR_PENDNMICLR_Pos) /*!< SCB ICSR: PENDNMICLR Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_STTNS_Pos 24U /*!< SCB ICSR: STTNS Position (Security Extension) */ +#define SCB_ICSR_STTNS_Msk (1UL << SCB_ICSR_STTNS_Pos) /*!< SCB ICSR: STTNS Mask (Security Extension) */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIS_Pos 14U /*!< SCB AIRCR: PRIS Position */ +#define SCB_AIRCR_PRIS_Msk (1UL << SCB_AIRCR_PRIS_Pos) /*!< SCB AIRCR: PRIS Mask */ + +#define SCB_AIRCR_BFHFNMINS_Pos 13U /*!< SCB AIRCR: BFHFNMINS Position */ +#define SCB_AIRCR_BFHFNMINS_Msk (1UL << SCB_AIRCR_BFHFNMINS_Pos) /*!< SCB AIRCR: BFHFNMINS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQS_Pos 3U /*!< SCB AIRCR: SYSRESETREQS Position */ +#define SCB_AIRCR_SYSRESETREQS_Msk (1UL << SCB_AIRCR_SYSRESETREQS_Pos) /*!< SCB AIRCR: SYSRESETREQS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEPS_Pos 3U /*!< SCB SCR: SLEEPDEEPS Position */ +#define SCB_SCR_SLEEPDEEPS_Msk (1UL << SCB_SCR_SLEEPDEEPS_Pos) /*!< SCB SCR: SLEEPDEEPS Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: BP Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: BP Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: IC Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: IC Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: DC Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: DC Mask */ + +#define SCB_CCR_STKOFHFNMIGN_Pos 10U /*!< SCB CCR: STKOFHFNMIGN Position */ +#define SCB_CCR_STKOFHFNMIGN_Msk (1UL << SCB_CCR_STKOFHFNMIGN_Pos) /*!< SCB CCR: STKOFHFNMIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_HARDFAULTPENDED_Pos 21U /*!< SCB SHCSR: HARDFAULTPENDED Position */ +#define SCB_SHCSR_HARDFAULTPENDED_Msk (1UL << SCB_SHCSR_HARDFAULTPENDED_Pos) /*!< SCB SHCSR: HARDFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTPENDED_Pos 20U /*!< SCB SHCSR: SECUREFAULTPENDED Position */ +#define SCB_SHCSR_SECUREFAULTPENDED_Msk (1UL << SCB_SHCSR_SECUREFAULTPENDED_Pos) /*!< SCB SHCSR: SECUREFAULTPENDED Mask */ + +#define SCB_SHCSR_SECUREFAULTENA_Pos 19U /*!< SCB SHCSR: SECUREFAULTENA Position */ +#define SCB_SHCSR_SECUREFAULTENA_Msk (1UL << SCB_SHCSR_SECUREFAULTENA_Pos) /*!< SCB SHCSR: SECUREFAULTENA Mask */ + +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_NMIACT_Pos 5U /*!< SCB SHCSR: NMIACT Position */ +#define SCB_SHCSR_NMIACT_Msk (1UL << SCB_SHCSR_NMIACT_Pos) /*!< SCB SHCSR: NMIACT Mask */ + +#define SCB_SHCSR_SECUREFAULTACT_Pos 4U /*!< SCB SHCSR: SECUREFAULTACT Position */ +#define SCB_SHCSR_SECUREFAULTACT_Msk (1UL << SCB_SHCSR_SECUREFAULTACT_Pos) /*!< SCB SHCSR: SECUREFAULTACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_HARDFAULTACT_Pos 2U /*!< SCB SHCSR: HARDFAULTACT Position */ +#define SCB_SHCSR_HARDFAULTACT_Msk (1UL << SCB_SHCSR_HARDFAULTACT_Pos) /*!< SCB SHCSR: HARDFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_STKOF_Pos (SCB_CFSR_USGFAULTSR_Pos + 4U) /*!< SCB CFSR (UFSR): STKOF Position */ +#define SCB_CFSR_STKOF_Msk (1UL << SCB_CFSR_STKOF_Pos) /*!< SCB CFSR (UFSR): STKOF Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Non-Secure Access Control Register Definitions */ +#define SCB_NSACR_CP11_Pos 11U /*!< SCB NSACR: CP11 Position */ +#define SCB_NSACR_CP11_Msk (1UL << SCB_NSACR_CP11_Pos) /*!< SCB NSACR: CP11 Mask */ + +#define SCB_NSACR_CP10_Pos 10U /*!< SCB NSACR: CP10 Position */ +#define SCB_NSACR_CP10_Msk (1UL << SCB_NSACR_CP10_Pos) /*!< SCB NSACR: CP10 Mask */ + +#define SCB_NSACR_CPn_Pos 0U /*!< SCB NSACR: CPn Position */ +#define SCB_NSACR_CPn_Msk (1UL /*<< SCB_NSACR_CPn_Pos*/) /*!< SCB NSACR: CPn Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ + __IOM uint32_t CPPWR; /*!< Offset: 0x00C (R/W) Coprocessor Power Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) ITM Device Architecture Register */ + uint32_t RESERVED6[4U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Stimulus Port Register Definitions */ +#define ITM_STIM_DISABLED_Pos 1U /*!< ITM STIM: DISABLED Position */ +#define ITM_STIM_DISABLED_Msk (0x1UL << ITM_STIM_DISABLED_Pos) /*!< ITM STIM: DISABLED Mask */ + +#define ITM_STIM_FIFOREADY_Pos 0U /*!< ITM STIM: FIFOREADY Position */ +#define ITM_STIM_FIFOREADY_Msk (0x1UL /*<< ITM_STIM_FIFOREADY_Pos*/) /*!< ITM STIM: FIFOREADY Mask */ + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TRACEBUSID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TRACEBUSID_Msk (0x7FUL << ITM_TCR_TRACEBUSID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPRESCALE_Pos 8U /*!< ITM TCR: TSPRESCALE Position */ +#define ITM_TCR_TSPRESCALE_Msk (3UL << ITM_TCR_TSPRESCALE_Pos) /*!< ITM TCR: TSPRESCALE Mask */ + +#define ITM_TCR_STALLENA_Pos 5U /*!< ITM TCR: STALLENA Position */ +#define ITM_TCR_STALLENA_Msk (1UL << ITM_TCR_STALLENA_Pos) /*!< ITM TCR: STALLENA Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + uint32_t RESERVED3[1U]; + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED4[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + uint32_t RESERVED5[1U]; + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED6[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + uint32_t RESERVED7[1U]; + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED8[1U]; + __IOM uint32_t COMP4; /*!< Offset: 0x060 (R/W) Comparator Register 4 */ + uint32_t RESERVED9[1U]; + __IOM uint32_t FUNCTION4; /*!< Offset: 0x068 (R/W) Function Register 4 */ + uint32_t RESERVED10[1U]; + __IOM uint32_t COMP5; /*!< Offset: 0x070 (R/W) Comparator Register 5 */ + uint32_t RESERVED11[1U]; + __IOM uint32_t FUNCTION5; /*!< Offset: 0x078 (R/W) Function Register 5 */ + uint32_t RESERVED12[1U]; + __IOM uint32_t COMP6; /*!< Offset: 0x080 (R/W) Comparator Register 6 */ + uint32_t RESERVED13[1U]; + __IOM uint32_t FUNCTION6; /*!< Offset: 0x088 (R/W) Function Register 6 */ + uint32_t RESERVED14[1U]; + __IOM uint32_t COMP7; /*!< Offset: 0x090 (R/W) Comparator Register 7 */ + uint32_t RESERVED15[1U]; + __IOM uint32_t FUNCTION7; /*!< Offset: 0x098 (R/W) Function Register 7 */ + uint32_t RESERVED16[1U]; + __IOM uint32_t COMP8; /*!< Offset: 0x0A0 (R/W) Comparator Register 8 */ + uint32_t RESERVED17[1U]; + __IOM uint32_t FUNCTION8; /*!< Offset: 0x0A8 (R/W) Function Register 8 */ + uint32_t RESERVED18[1U]; + __IOM uint32_t COMP9; /*!< Offset: 0x0B0 (R/W) Comparator Register 9 */ + uint32_t RESERVED19[1U]; + __IOM uint32_t FUNCTION9; /*!< Offset: 0x0B8 (R/W) Function Register 9 */ + uint32_t RESERVED20[1U]; + __IOM uint32_t COMP10; /*!< Offset: 0x0C0 (R/W) Comparator Register 10 */ + uint32_t RESERVED21[1U]; + __IOM uint32_t FUNCTION10; /*!< Offset: 0x0C8 (R/W) Function Register 10 */ + uint32_t RESERVED22[1U]; + __IOM uint32_t COMP11; /*!< Offset: 0x0D0 (R/W) Comparator Register 11 */ + uint32_t RESERVED23[1U]; + __IOM uint32_t FUNCTION11; /*!< Offset: 0x0D8 (R/W) Function Register 11 */ + uint32_t RESERVED24[1U]; + __IOM uint32_t COMP12; /*!< Offset: 0x0E0 (R/W) Comparator Register 12 */ + uint32_t RESERVED25[1U]; + __IOM uint32_t FUNCTION12; /*!< Offset: 0x0E8 (R/W) Function Register 12 */ + uint32_t RESERVED26[1U]; + __IOM uint32_t COMP13; /*!< Offset: 0x0F0 (R/W) Comparator Register 13 */ + uint32_t RESERVED27[1U]; + __IOM uint32_t FUNCTION13; /*!< Offset: 0x0F8 (R/W) Function Register 13 */ + uint32_t RESERVED28[1U]; + __IOM uint32_t COMP14; /*!< Offset: 0x100 (R/W) Comparator Register 14 */ + uint32_t RESERVED29[1U]; + __IOM uint32_t FUNCTION14; /*!< Offset: 0x108 (R/W) Function Register 14 */ + uint32_t RESERVED30[1U]; + __IOM uint32_t COMP15; /*!< Offset: 0x110 (R/W) Comparator Register 15 */ + uint32_t RESERVED31[1U]; + __IOM uint32_t FUNCTION15; /*!< Offset: 0x118 (R/W) Function Register 15 */ + uint32_t RESERVED32[934U]; + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ + uint32_t RESERVED33[1U]; + __IM uint32_t DEVARCH; /*!< Offset: 0xFBC (R/ ) Device Architecture Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCDISS_Pos 23U /*!< DWT CTRL: CYCDISS Position */ +#define DWT_CTRL_CYCDISS_Msk (0x1UL << DWT_CTRL_CYCDISS_Pos) /*!< DWT CTRL: CYCDISS Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_ID_Pos 27U /*!< DWT FUNCTION: ID Position */ +#define DWT_FUNCTION_ID_Msk (0x1FUL << DWT_FUNCTION_ID_Pos) /*!< DWT FUNCTION: ID Mask */ + +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_ACTION_Pos 4U /*!< DWT FUNCTION: ACTION Position */ +#define DWT_FUNCTION_ACTION_Msk (0x1UL << DWT_FUNCTION_ACTION_Pos) /*!< DWT FUNCTION: ACTION Mask */ + +#define DWT_FUNCTION_MATCH_Pos 0U /*!< DWT FUNCTION: MATCH Position */ +#define DWT_FUNCTION_MATCH_Msk (0xFUL /*<< DWT_FUNCTION_MATCH_Pos*/) /*!< DWT FUNCTION: MATCH Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IOM uint32_t PSCR; /*!< Offset: 0x308 (R/W) Periodic Synchronization Control Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t ITFTTD0; /*!< Offset: 0xEEC (R/ ) Integration Test FIFO Test Data 0 Register */ + __IOM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/W) Integration Test ATB Control Register 2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) Integration Test ATB Control Register 0 */ + __IM uint32_t ITFTTD1; /*!< Offset: 0xEFC (R/ ) Integration Test FIFO Test Data 1 Register */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) Device Configuration Register */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) Device Type Identifier Register */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_FOnMan_Pos 6U /*!< TPI FFCR: FOnMan Position */ +#define TPI_FFCR_FOnMan_Msk (0x1UL << TPI_FFCR_FOnMan_Pos) /*!< TPI FFCR: FOnMan Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration Test FIFO Test Data 0 Register Definitions */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD0: ATB Interface 2 ATVALIDPosition */ +#define TPI_ITFTTD0_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD0: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD0_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD0_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD0: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD0_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD0: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD0_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD0_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD0: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data2_Pos 16U /*!< TPI ITFTTD0: ATB Interface 1 data2 Position */ +#define TPI_ITFTTD0_ATB_IF1_data2_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data2 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data1_Pos 8U /*!< TPI ITFTTD0: ATB Interface 1 data1 Position */ +#define TPI_ITFTTD0_ATB_IF1_data1_Msk (0xFFUL << TPI_ITFTTD0_ATB_IF1_data1_Pos) /*!< TPI ITFTTD0: ATB Interface 1 data1 Mask */ + +#define TPI_ITFTTD0_ATB_IF1_data0_Pos 0U /*!< TPI ITFTTD0: ATB Interface 1 data0 Position */ +#define TPI_ITFTTD0_ATB_IF1_data0_Msk (0xFFUL /*<< TPI_ITFTTD0_ATB_IF1_data0_Pos*/) /*!< TPI ITFTTD0: ATB Interface 1 data0 Mask */ + +/* TPI Integration Test ATB Control Register 2 Register Definitions */ +#define TPI_ITATBCTR2_AFVALID2S_Pos 1U /*!< TPI ITATBCTR2: AFVALID2S Position */ +#define TPI_ITATBCTR2_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID2S_Pos) /*!< TPI ITATBCTR2: AFVALID2SS Mask */ + +#define TPI_ITATBCTR2_AFVALID1S_Pos 1U /*!< TPI ITATBCTR2: AFVALID1S Position */ +#define TPI_ITATBCTR2_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR2_AFVALID1S_Pos) /*!< TPI ITATBCTR2: AFVALID1SS Mask */ + +#define TPI_ITATBCTR2_ATREADY2S_Pos 0U /*!< TPI ITATBCTR2: ATREADY2S Position */ +#define TPI_ITATBCTR2_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2S_Pos*/) /*!< TPI ITATBCTR2: ATREADY2S Mask */ + +#define TPI_ITATBCTR2_ATREADY1S_Pos 0U /*!< TPI ITATBCTR2: ATREADY1S Position */ +#define TPI_ITATBCTR2_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1S_Pos*/) /*!< TPI ITATBCTR2: ATREADY1S Mask */ + +/* TPI Integration Test FIFO Test Data 1 Register Definitions */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Pos 29U /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF2_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 2 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF2_bytecount_Pos 27U /*!< TPI ITFTTD1: ATB Interface 2 byte count Position */ +#define TPI_ITFTTD1_ATB_IF2_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF2_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 2 byte count Mask */ + +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Pos 26U /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Position */ +#define TPI_ITFTTD1_ATB_IF1_ATVALID_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_ATVALID_Pos) /*!< TPI ITFTTD1: ATB Interface 1 ATVALID Mask */ + +#define TPI_ITFTTD1_ATB_IF1_bytecount_Pos 24U /*!< TPI ITFTTD1: ATB Interface 1 byte count Position */ +#define TPI_ITFTTD1_ATB_IF1_bytecount_Msk (0x3UL << TPI_ITFTTD1_ATB_IF1_bytecount_Pos) /*!< TPI ITFTTD1: ATB Interface 1 byte countt Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data2_Pos 16U /*!< TPI ITFTTD1: ATB Interface 2 data2 Position */ +#define TPI_ITFTTD1_ATB_IF2_data2_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data2 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data1_Pos 8U /*!< TPI ITFTTD1: ATB Interface 2 data1 Position */ +#define TPI_ITFTTD1_ATB_IF2_data1_Msk (0xFFUL << TPI_ITFTTD1_ATB_IF2_data1_Pos) /*!< TPI ITFTTD1: ATB Interface 2 data1 Mask */ + +#define TPI_ITFTTD1_ATB_IF2_data0_Pos 0U /*!< TPI ITFTTD1: ATB Interface 2 data0 Position */ +#define TPI_ITFTTD1_ATB_IF2_data0_Msk (0xFFUL /*<< TPI_ITFTTD1_ATB_IF2_data0_Pos*/) /*!< TPI ITFTTD1: ATB Interface 2 data0 Mask */ + +/* TPI Integration Test ATB Control Register 0 Definitions */ +#define TPI_ITATBCTR0_AFVALID2S_Pos 1U /*!< TPI ITATBCTR0: AFVALID2S Position */ +#define TPI_ITATBCTR0_AFVALID2S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID2S_Pos) /*!< TPI ITATBCTR0: AFVALID2SS Mask */ + +#define TPI_ITATBCTR0_AFVALID1S_Pos 1U /*!< TPI ITATBCTR0: AFVALID1S Position */ +#define TPI_ITATBCTR0_AFVALID1S_Msk (0x1UL << TPI_ITATBCTR0_AFVALID1S_Pos) /*!< TPI ITATBCTR0: AFVALID1SS Mask */ + +#define TPI_ITATBCTR0_ATREADY2S_Pos 0U /*!< TPI ITATBCTR0: ATREADY2S Position */ +#define TPI_ITATBCTR0_ATREADY2S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2S_Pos*/) /*!< TPI ITATBCTR0: ATREADY2S Mask */ + +#define TPI_ITATBCTR0_ATREADY1S_Pos 0U /*!< TPI ITATBCTR0: ATREADY1S Position */ +#define TPI_ITATBCTR0_ATREADY1S_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1S_Pos*/) /*!< TPI ITATBCTR0: ATREADY1S Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_FIFOSZ_Pos 6U /*!< TPI DEVID: FIFOSZ Position */ +#define TPI_DEVID_FIFOSZ_Msk (0x7UL << TPI_DEVID_FIFOSZ_Pos) /*!< TPI DEVID: FIFOSZ Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x3FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) MPU Region Limit Address Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Region Base Address Register Alias 1 */ + __IOM uint32_t RLAR_A1; /*!< Offset: 0x018 (R/W) MPU Region Limit Address Register Alias 1 */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Region Base Address Register Alias 2 */ + __IOM uint32_t RLAR_A2; /*!< Offset: 0x020 (R/W) MPU Region Limit Address Register Alias 2 */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Region Base Address Register Alias 3 */ + __IOM uint32_t RLAR_A3; /*!< Offset: 0x028 (R/W) MPU Region Limit Address Register Alias 3 */ + uint32_t RESERVED0[1]; + union { + __IOM uint32_t MAIR[2]; + struct { + __IOM uint32_t MAIR0; /*!< Offset: 0x030 (R/W) MPU Memory Attribute Indirection Register 0 */ + __IOM uint32_t MAIR1; /*!< Offset: 0x034 (R/W) MPU Memory Attribute Indirection Register 1 */ + }; + }; +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_BASE_Pos 5U /*!< MPU RBAR: BASE Position */ +#define MPU_RBAR_BASE_Msk (0x7FFFFFFUL << MPU_RBAR_BASE_Pos) /*!< MPU RBAR: BASE Mask */ + +#define MPU_RBAR_SH_Pos 3U /*!< MPU RBAR: SH Position */ +#define MPU_RBAR_SH_Msk (0x3UL << MPU_RBAR_SH_Pos) /*!< MPU RBAR: SH Mask */ + +#define MPU_RBAR_AP_Pos 1U /*!< MPU RBAR: AP Position */ +#define MPU_RBAR_AP_Msk (0x3UL << MPU_RBAR_AP_Pos) /*!< MPU RBAR: AP Mask */ + +#define MPU_RBAR_XN_Pos 0U /*!< MPU RBAR: XN Position */ +#define MPU_RBAR_XN_Msk (01UL /*<< MPU_RBAR_XN_Pos*/) /*!< MPU RBAR: XN Mask */ + +/* MPU Region Limit Address Register Definitions */ +#define MPU_RLAR_LIMIT_Pos 5U /*!< MPU RLAR: LIMIT Position */ +#define MPU_RLAR_LIMIT_Msk (0x7FFFFFFUL << MPU_RLAR_LIMIT_Pos) /*!< MPU RLAR: LIMIT Mask */ + +#define MPU_RLAR_AttrIndx_Pos 1U /*!< MPU RLAR: AttrIndx Position */ +#define MPU_RLAR_AttrIndx_Msk (0x7UL << MPU_RLAR_AttrIndx_Pos) /*!< MPU RLAR: AttrIndx Mask */ + +#define MPU_RLAR_EN_Pos 0U /*!< MPU RLAR: Region enable bit Position */ +#define MPU_RLAR_EN_Msk (1UL /*<< MPU_RLAR_EN_Pos*/) /*!< MPU RLAR: Region enable bit Disable Mask */ + +/* MPU Memory Attribute Indirection Register 0 Definitions */ +#define MPU_MAIR0_Attr3_Pos 24U /*!< MPU MAIR0: Attr3 Position */ +#define MPU_MAIR0_Attr3_Msk (0xFFUL << MPU_MAIR0_Attr3_Pos) /*!< MPU MAIR0: Attr3 Mask */ + +#define MPU_MAIR0_Attr2_Pos 16U /*!< MPU MAIR0: Attr2 Position */ +#define MPU_MAIR0_Attr2_Msk (0xFFUL << MPU_MAIR0_Attr2_Pos) /*!< MPU MAIR0: Attr2 Mask */ + +#define MPU_MAIR0_Attr1_Pos 8U /*!< MPU MAIR0: Attr1 Position */ +#define MPU_MAIR0_Attr1_Msk (0xFFUL << MPU_MAIR0_Attr1_Pos) /*!< MPU MAIR0: Attr1 Mask */ + +#define MPU_MAIR0_Attr0_Pos 0U /*!< MPU MAIR0: Attr0 Position */ +#define MPU_MAIR0_Attr0_Msk (0xFFUL /*<< MPU_MAIR0_Attr0_Pos*/) /*!< MPU MAIR0: Attr0 Mask */ + +/* MPU Memory Attribute Indirection Register 1 Definitions */ +#define MPU_MAIR1_Attr7_Pos 24U /*!< MPU MAIR1: Attr7 Position */ +#define MPU_MAIR1_Attr7_Msk (0xFFUL << MPU_MAIR1_Attr7_Pos) /*!< MPU MAIR1: Attr7 Mask */ + +#define MPU_MAIR1_Attr6_Pos 16U /*!< MPU MAIR1: Attr6 Position */ +#define MPU_MAIR1_Attr6_Msk (0xFFUL << MPU_MAIR1_Attr6_Pos) /*!< MPU MAIR1: Attr6 Mask */ + +#define MPU_MAIR1_Attr5_Pos 8U /*!< MPU MAIR1: Attr5 Position */ +#define MPU_MAIR1_Attr5_Msk (0xFFUL << MPU_MAIR1_Attr5_Pos) /*!< MPU MAIR1: Attr5 Mask */ + +#define MPU_MAIR1_Attr4_Pos 0U /*!< MPU MAIR1: Attr4 Position */ +#define MPU_MAIR1_Attr4_Msk (0xFFUL /*<< MPU_MAIR1_Attr4_Pos*/) /*!< MPU MAIR1: Attr4 Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SAU Security Attribution Unit (SAU) + \brief Type definitions for the Security Attribution Unit (SAU) + @{ + */ + +/** + \brief Structure type to access the Security Attribution Unit (SAU). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SAU Control Register */ + __IM uint32_t TYPE; /*!< Offset: 0x004 (R/ ) SAU Type Register */ +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) SAU Region Number Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) SAU Region Base Address Register */ + __IOM uint32_t RLAR; /*!< Offset: 0x010 (R/W) SAU Region Limit Address Register */ +#else + uint32_t RESERVED0[3]; +#endif + __IOM uint32_t SFSR; /*!< Offset: 0x014 (R/W) Secure Fault Status Register */ + __IOM uint32_t SFAR; /*!< Offset: 0x018 (R/W) Secure Fault Address Register */ +} SAU_Type; + +/* SAU Control Register Definitions */ +#define SAU_CTRL_ALLNS_Pos 1U /*!< SAU CTRL: ALLNS Position */ +#define SAU_CTRL_ALLNS_Msk (1UL << SAU_CTRL_ALLNS_Pos) /*!< SAU CTRL: ALLNS Mask */ + +#define SAU_CTRL_ENABLE_Pos 0U /*!< SAU CTRL: ENABLE Position */ +#define SAU_CTRL_ENABLE_Msk (1UL /*<< SAU_CTRL_ENABLE_Pos*/) /*!< SAU CTRL: ENABLE Mask */ + +/* SAU Type Register Definitions */ +#define SAU_TYPE_SREGION_Pos 0U /*!< SAU TYPE: SREGION Position */ +#define SAU_TYPE_SREGION_Msk (0xFFUL /*<< SAU_TYPE_SREGION_Pos*/) /*!< SAU TYPE: SREGION Mask */ + +#if defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) +/* SAU Region Number Register Definitions */ +#define SAU_RNR_REGION_Pos 0U /*!< SAU RNR: REGION Position */ +#define SAU_RNR_REGION_Msk (0xFFUL /*<< SAU_RNR_REGION_Pos*/) /*!< SAU RNR: REGION Mask */ + +/* SAU Region Base Address Register Definitions */ +#define SAU_RBAR_BADDR_Pos 5U /*!< SAU RBAR: BADDR Position */ +#define SAU_RBAR_BADDR_Msk (0x7FFFFFFUL << SAU_RBAR_BADDR_Pos) /*!< SAU RBAR: BADDR Mask */ + +/* SAU Region Limit Address Register Definitions */ +#define SAU_RLAR_LADDR_Pos 5U /*!< SAU RLAR: LADDR Position */ +#define SAU_RLAR_LADDR_Msk (0x7FFFFFFUL << SAU_RLAR_LADDR_Pos) /*!< SAU RLAR: LADDR Mask */ + +#define SAU_RLAR_NSC_Pos 1U /*!< SAU RLAR: NSC Position */ +#define SAU_RLAR_NSC_Msk (1UL << SAU_RLAR_NSC_Pos) /*!< SAU RLAR: NSC Mask */ + +#define SAU_RLAR_ENABLE_Pos 0U /*!< SAU RLAR: ENABLE Position */ +#define SAU_RLAR_ENABLE_Msk (1UL /*<< SAU_RLAR_ENABLE_Pos*/) /*!< SAU RLAR: ENABLE Mask */ + +#endif /* defined (__SAUREGION_PRESENT) && (__SAUREGION_PRESENT == 1U) */ + +/* Secure Fault Status Register Definitions */ +#define SAU_SFSR_LSERR_Pos 7U /*!< SAU SFSR: LSERR Position */ +#define SAU_SFSR_LSERR_Msk (1UL << SAU_SFSR_LSERR_Pos) /*!< SAU SFSR: LSERR Mask */ + +#define SAU_SFSR_SFARVALID_Pos 6U /*!< SAU SFSR: SFARVALID Position */ +#define SAU_SFSR_SFARVALID_Msk (1UL << SAU_SFSR_SFARVALID_Pos) /*!< SAU SFSR: SFARVALID Mask */ + +#define SAU_SFSR_LSPERR_Pos 5U /*!< SAU SFSR: LSPERR Position */ +#define SAU_SFSR_LSPERR_Msk (1UL << SAU_SFSR_LSPERR_Pos) /*!< SAU SFSR: LSPERR Mask */ + +#define SAU_SFSR_INVTRAN_Pos 4U /*!< SAU SFSR: INVTRAN Position */ +#define SAU_SFSR_INVTRAN_Msk (1UL << SAU_SFSR_INVTRAN_Pos) /*!< SAU SFSR: INVTRAN Mask */ + +#define SAU_SFSR_AUVIOL_Pos 3U /*!< SAU SFSR: AUVIOL Position */ +#define SAU_SFSR_AUVIOL_Msk (1UL << SAU_SFSR_AUVIOL_Pos) /*!< SAU SFSR: AUVIOL Mask */ + +#define SAU_SFSR_INVER_Pos 2U /*!< SAU SFSR: INVER Position */ +#define SAU_SFSR_INVER_Msk (1UL << SAU_SFSR_INVER_Pos) /*!< SAU SFSR: INVER Mask */ + +#define SAU_SFSR_INVIS_Pos 1U /*!< SAU SFSR: INVIS Position */ +#define SAU_SFSR_INVIS_Msk (1UL << SAU_SFSR_INVIS_Pos) /*!< SAU SFSR: INVIS Mask */ + +#define SAU_SFSR_INVEP_Pos 0U /*!< SAU SFSR: INVEP Position */ +#define SAU_SFSR_INVEP_Msk (1UL /*<< SAU_SFSR_INVEP_Pos*/) /*!< SAU SFSR: INVEP Mask */ + +/*@} end of group CMSIS_SAU */ +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_LSPENS_Pos 29U /*!< FPCCR: LSPENS Position */ +#define FPU_FPCCR_LSPENS_Msk (1UL << FPU_FPCCR_LSPENS_Pos) /*!< FPCCR: LSPENS bit Mask */ + +#define FPU_FPCCR_CLRONRET_Pos 28U /*!< FPCCR: CLRONRET Position */ +#define FPU_FPCCR_CLRONRET_Msk (1UL << FPU_FPCCR_CLRONRET_Pos) /*!< FPCCR: CLRONRET bit Mask */ + +#define FPU_FPCCR_CLRONRETS_Pos 27U /*!< FPCCR: CLRONRETS Position */ +#define FPU_FPCCR_CLRONRETS_Msk (1UL << FPU_FPCCR_CLRONRETS_Pos) /*!< FPCCR: CLRONRETS bit Mask */ + +#define FPU_FPCCR_TS_Pos 26U /*!< FPCCR: TS Position */ +#define FPU_FPCCR_TS_Msk (1UL << FPU_FPCCR_TS_Pos) /*!< FPCCR: TS bit Mask */ + +#define FPU_FPCCR_UFRDY_Pos 10U /*!< FPCCR: UFRDY Position */ +#define FPU_FPCCR_UFRDY_Msk (1UL << FPU_FPCCR_UFRDY_Pos) /*!< FPCCR: UFRDY bit Mask */ + +#define FPU_FPCCR_SPLIMVIOL_Pos 9U /*!< FPCCR: SPLIMVIOL Position */ +#define FPU_FPCCR_SPLIMVIOL_Msk (1UL << FPU_FPCCR_SPLIMVIOL_Pos) /*!< FPCCR: SPLIMVIOL bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_SFRDY_Pos 7U /*!< FPCCR: SFRDY Position */ +#define FPU_FPCCR_SFRDY_Msk (1UL << FPU_FPCCR_SFRDY_Pos) /*!< FPCCR: SFRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_S_Pos 2U /*!< FPCCR: Security status of the FP context bit Position */ +#define FPU_FPCCR_S_Msk (1UL << FPU_FPCCR_S_Pos) /*!< FPCCR: Security status of the FP context bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ + uint32_t RESERVED4[1U]; + __IOM uint32_t DAUTHCTRL; /*!< Offset: 0x014 (R/W) Debug Authentication Control Register */ + __IOM uint32_t DSCSR; /*!< Offset: 0x018 (R/W) Debug Security Control and Status Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESTART_ST_Pos 26U /*!< CoreDebug DHCSR: S_RESTART_ST Position */ +#define CoreDebug_DHCSR_S_RESTART_ST_Msk (1UL << CoreDebug_DHCSR_S_RESTART_ST_Pos) /*!< CoreDebug DHCSR: S_RESTART_ST Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/* Debug Authentication Control Register Definitions */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos 3U /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Position */ +#define CoreDebug_DAUTHCTRL_INTSPNIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPNIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPNIDEN, Mask */ + +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos 2U /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPNIDENSEL_Msk (1UL << CoreDebug_DAUTHCTRL_SPNIDENSEL_Pos) /*!< CoreDebug DAUTHCTRL: SPNIDENSEL Mask */ + +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Pos 1U /*!< CoreDebug DAUTHCTRL: INTSPIDEN Position */ +#define CoreDebug_DAUTHCTRL_INTSPIDEN_Msk (1UL << CoreDebug_DAUTHCTRL_INTSPIDEN_Pos) /*!< CoreDebug DAUTHCTRL: INTSPIDEN Mask */ + +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Pos 0U /*!< CoreDebug DAUTHCTRL: SPIDENSEL Position */ +#define CoreDebug_DAUTHCTRL_SPIDENSEL_Msk (1UL /*<< CoreDebug_DAUTHCTRL_SPIDENSEL_Pos*/) /*!< CoreDebug DAUTHCTRL: SPIDENSEL Mask */ + +/* Debug Security Control and Status Register Definitions */ +#define CoreDebug_DSCSR_CDS_Pos 16U /*!< CoreDebug DSCSR: CDS Position */ +#define CoreDebug_DSCSR_CDS_Msk (1UL << CoreDebug_DSCSR_CDS_Pos) /*!< CoreDebug DSCSR: CDS Mask */ + +#define CoreDebug_DSCSR_SBRSEL_Pos 1U /*!< CoreDebug DSCSR: SBRSEL Position */ +#define CoreDebug_DSCSR_SBRSEL_Msk (1UL << CoreDebug_DSCSR_SBRSEL_Pos) /*!< CoreDebug DSCSR: SBRSEL Mask */ + +#define CoreDebug_DSCSR_SBRSELEN_Pos 0U /*!< CoreDebug DSCSR: SBRSELEN Position */ +#define CoreDebug_DSCSR_SBRSELEN_Msk (1UL /*<< CoreDebug_DSCSR_SBRSELEN_Pos*/) /*!< CoreDebug DSCSR: SBRSELEN Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ + #define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ + #define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ + #define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ + #define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ + #define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ + #define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ + #define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ + #define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + + #define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ + #define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ + #define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ + #define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + #define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ + #define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ + #define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ + #define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE ) /*!< Core Debug configuration struct */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ + #endif + + #if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SAU_BASE (SCS_BASE + 0x0DD0UL) /*!< Security Attribution Unit */ + #define SAU ((SAU_Type *) SAU_BASE ) /*!< Security Attribution Unit */ + #endif + + #define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ + #define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + #define SCS_BASE_NS (0xE002E000UL) /*!< System Control Space Base Address (non-secure address space) */ + #define CoreDebug_BASE_NS (0xE002EDF0UL) /*!< Core Debug Base Address (non-secure address space) */ + #define SysTick_BASE_NS (SCS_BASE_NS + 0x0010UL) /*!< SysTick Base Address (non-secure address space) */ + #define NVIC_BASE_NS (SCS_BASE_NS + 0x0100UL) /*!< NVIC Base Address (non-secure address space) */ + #define SCB_BASE_NS (SCS_BASE_NS + 0x0D00UL) /*!< System Control Block Base Address (non-secure address space) */ + + #define SCnSCB_NS ((SCnSCB_Type *) SCS_BASE_NS ) /*!< System control Register not in SCB(non-secure address space) */ + #define SCB_NS ((SCB_Type *) SCB_BASE_NS ) /*!< SCB configuration struct (non-secure address space) */ + #define SysTick_NS ((SysTick_Type *) SysTick_BASE_NS ) /*!< SysTick configuration struct (non-secure address space) */ + #define NVIC_NS ((NVIC_Type *) NVIC_BASE_NS ) /*!< NVIC configuration struct (non-secure address space) */ + #define CoreDebug_NS ((CoreDebug_Type *) CoreDebug_BASE_NS) /*!< Core Debug configuration struct (non-secure address space) */ + + #if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE_NS (SCS_BASE_NS + 0x0D90UL) /*!< Memory Protection Unit (non-secure address space) */ + #define MPU_NS ((MPU_Type *) MPU_BASE_NS ) /*!< Memory Protection Unit (non-secure address space) */ + #endif + + #define FPU_BASE_NS (SCS_BASE_NS + 0x0F30UL) /*!< Floating Point Unit (non-secure address space) */ + #define FPU_NS ((FPU_Type *) FPU_BASE_NS ) /*!< Floating Point Unit (non-secure address space) */ + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* Special LR values for Secure/Non-Secure call handling and exception handling */ + +/* Function Return Payload (from ARMv8-M Architecture Reference Manual) LR value on entry from Secure BLXNS */ +#define FNC_RETURN (0xFEFFFFFFUL) /* bit [0] ignored when processing a branch */ + +/* The following EXC_RETURN mask values are used to evaluate the LR on exception entry */ +#define EXC_RETURN_PREFIX (0xFF000000UL) /* bits [31:24] set to indicate an EXC_RETURN value */ +#define EXC_RETURN_S (0x00000040UL) /* bit [6] stack used to push registers: 0=Non-secure 1=Secure */ +#define EXC_RETURN_DCRS (0x00000020UL) /* bit [5] stacking rules for called registers: 0=skipped 1=saved */ +#define EXC_RETURN_FTYPE (0x00000010UL) /* bit [4] allocate stack for floating-point context: 0=done 1=skipped */ +#define EXC_RETURN_MODE (0x00000008UL) /* bit [3] processor mode for return: 0=Handler mode 1=Thread mode */ +#define EXC_RETURN_SPSEL (0x00000002UL) /* bit [1] stack pointer used to restore context: 0=MSP 1=PSP */ +#define EXC_RETURN_ES (0x00000001UL) /* bit [0] security state exception was taken to: 0=Non-secure 1=Secure */ + +/* Integrity Signature (from ARMv8-M Architecture Reference Manual) for exception context stacking */ +#if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) /* Value for processors with floating-point extension: */ +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125AUL) /* bit [0] SFTC must match LR bit[4] EXC_RETURN_FTYPE */ +#else +#define EXC_INTEGRITY_SIGNATURE (0xFEFA125BUL) /* Value for processors without floating-point extension */ +#endif + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Get Interrupt Target State + \details Reads the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + \return 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_GetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Target State + \details Sets the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_SetTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] |= ((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Clear Interrupt Target State + \details Clears the interrupt target field in the NVIC and returns the interrupt target bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 if interrupt is assigned to Secure + 1 if interrupt is assigned to Non Secure + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t NVIC_ClearTargetState(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] &= ~((uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL))); + return((uint32_t)(((NVIC->ITNS[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief Set Priority Grouping (non-secure) + \details Sets the non-secure priority grouping field when in secure state using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void TZ_NVIC_SetPriorityGrouping_NS(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB_NS->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB_NS->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping (non-secure) + \details Reads the priority grouping field from the non-secure NVIC when in secure state. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriorityGrouping_NS(void) +{ + return ((uint32_t)((SCB_NS->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt (non-secure) + \details Enables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_EnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status (non-secure) + \details Returns a device specific interrupt enable status from the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetEnableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt (non-secure) + \details Disables a device specific interrupt in the non-secure NVIC interrupt controller when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_DisableIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Pending Interrupt (non-secure) + \details Reads the NVIC pending register in the non-secure NVIC when in secure state and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt (non-secure) + \details Sets the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_SetPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt (non-secure) + \details Clears the pending bit of a device specific interrupt in the non-secure NVIC pending register when in secure state. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void TZ_NVIC_ClearPendingIRQ_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt (non-secure) + \details Reads the active register in non-secure NVIC when in secure state and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetActive_NS(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC_NS->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority (non-secure) + \details Sets the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every non-secure processor exception. + */ +__STATIC_INLINE void TZ_NVIC_SetPriority_NS(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC_NS->IPR[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority (non-secure) + \details Reads the priority of a non-secure device specific interrupt or a non-secure processor exception when in secure state. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t TZ_NVIC_GetPriority_NS(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC_NS->IPR[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB_NS->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} +#endif /* defined (__ARM_FEATURE_CMSE) &&(__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv8.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## SAU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SAUFunctions SAU Functions + \brief Functions that configure the SAU. + @{ + */ + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) + +/** + \brief Enable SAU + \details Enables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Enable(void) +{ + SAU->CTRL |= (SAU_CTRL_ENABLE_Msk); +} + + + +/** + \brief Disable SAU + \details Disables the Security Attribution Unit (SAU). + */ +__STATIC_INLINE void TZ_SAU_Disable(void) +{ + SAU->CTRL &= ~(SAU_CTRL_ENABLE_Msk); +} + +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +/*@} end of CMSIS_Core_SAUFunctions */ + + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#if defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) +/** + \brief System Tick Configuration (non-secure) + \details Initializes the non-secure System Timer and its interrupt when in secure state, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function TZ_SysTick_Config_NS is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + + */ +__STATIC_INLINE uint32_t TZ_SysTick_Config_NS(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick_NS->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + TZ_NVIC_SetPriority_NS (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick_NS->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick_NS->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} +#endif /* defined (__ARM_FEATURE_CMSE) && (__ARM_FEATURE_CMSE == 3U) */ + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM33_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm4.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm4.h new file mode 100644 index 0000000000..7d56873532 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm4.h @@ -0,0 +1,2129 @@ +/**************************************************************************//** + * @file core_cm4.h + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM4_H_GENERIC +#define __CORE_CM4_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M4 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM4 definitions */ +#define __CM4_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM4_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM4_CMSIS_VERSION ((__CM4_CMSIS_VERSION_MAIN << 16U) | \ + __CM4_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (4U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM4_H_DEPENDANT +#define __CORE_CM4_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM4_REV + #define __CM4_REV 0x0000U + #warning "__CM4_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M4 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISOOFP_Pos 9U /*!< ACTLR: DISOOFP Position */ +#define SCnSCB_ACTLR_DISOOFP_Msk (1UL << SCnSCB_ACTLR_DISOOFP_Pos) /*!< ACTLR: DISOOFP Mask */ + +#define SCnSCB_ACTLR_DISFPCA_Pos 8U /*!< ACTLR: DISFPCA Position */ +#define SCnSCB_ACTLR_DISFPCA_Msk (1UL << SCnSCB_ACTLR_DISFPCA_Pos) /*!< ACTLR: DISFPCA Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISDEFWBUF_Pos 1U /*!< ACTLR: DISDEFWBUF Position */ +#define SCnSCB_ACTLR_DISDEFWBUF_Msk (1UL << SCnSCB_ACTLR_DISDEFWBUF_Pos) /*!< ACTLR: DISDEFWBUF Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = FPU->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM4_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm7.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm7.h new file mode 100644 index 0000000000..a14dc623b7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_cm7.h @@ -0,0 +1,2671 @@ +/**************************************************************************//** + * @file core_cm7.h + * @brief CMSIS Cortex-M7 Core Peripheral Access Layer Header File + * @version V5.0.8 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_CM7_H_GENERIC +#define __CORE_CM7_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup Cortex_M7 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS CM7 definitions */ +#define __CM7_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __CM7_CMSIS_VERSION_SUB ( __CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __CM7_CMSIS_VERSION ((__CM7_CMSIS_VERSION_MAIN << 16U) | \ + __CM7_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_M (7U) /*!< Cortex-M Core */ + +/** __FPU_USED indicates whether an FPU is used or not. + For this, __FPU_PRESENT has to be checked prior to making use of FPU specific registers and functions. +*/ +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #warning "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #if defined (__FPU_PRESENT) && (__FPU_PRESENT == 1U) + #define __FPU_USED 1U + #else + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #define __FPU_USED 0U + #endif + #else + #define __FPU_USED 0U + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_CM7_H_DEPENDANT +#define __CORE_CM7_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __CM7_REV + #define __CM7_REV 0x0000U + #warning "__CM7_REV not defined in device header file; using default!" + #endif + + #ifndef __FPU_PRESENT + #define __FPU_PRESENT 0U + #warning "__FPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __ICACHE_PRESENT + #define __ICACHE_PRESENT 0U + #warning "__ICACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DCACHE_PRESENT + #define __DCACHE_PRESENT 0U + #warning "__DCACHE_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __DTCM_PRESENT + #define __DTCM_PRESENT 0U + #warning "__DTCM_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group Cortex_M7 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + - Core FPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:16; /*!< bit: 0..15 Reserved */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:7; /*!< bit: 20..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + +#define APSR_GE_Pos 16U /*!< APSR: GE Position */ +#define APSR_GE_Msk (0xFUL << APSR_GE_Pos) /*!< APSR: GE Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t GE:4; /*!< bit: 16..19 Greater than or Equal flags */ + uint32_t _reserved1:4; /*!< bit: 20..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_GE_Pos 16U /*!< xPSR: GE Position */ +#define xPSR_GE_Msk (0xFUL << xPSR_GE_Pos) /*!< xPSR: GE Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t FPCA:1; /*!< bit: 2 FP extension active flag */ + uint32_t _reserved0:29; /*!< bit: 3..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_FPCA_Pos 2U /*!< CONTROL: FPCA Position */ +#define CONTROL_FPCA_Msk (1UL << CONTROL_FPCA_Pos) /*!< CONTROL: FPCA Mask */ + +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHPR[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t ID_PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t ID_DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ID_AFR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t ID_MFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ID_ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[1U]; + __IM uint32_t CLIDR; /*!< Offset: 0x078 (R/ ) Cache Level ID register */ + __IM uint32_t CTR; /*!< Offset: 0x07C (R/ ) Cache Type register */ + __IM uint32_t CCSIDR; /*!< Offset: 0x080 (R/ ) Cache Size ID Register */ + __IOM uint32_t CSSELR; /*!< Offset: 0x084 (R/W) Cache Size Selection Register */ + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED3[93U]; + __OM uint32_t STIR; /*!< Offset: 0x200 ( /W) Software Triggered Interrupt Register */ + uint32_t RESERVED4[15U]; + __IM uint32_t MVFR0; /*!< Offset: 0x240 (R/ ) Media and VFP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x244 (R/ ) Media and VFP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x248 (R/ ) Media and VFP Feature Register 2 */ + uint32_t RESERVED5[1U]; + __OM uint32_t ICIALLU; /*!< Offset: 0x250 ( /W) I-Cache Invalidate All to PoU */ + uint32_t RESERVED6[1U]; + __OM uint32_t ICIMVAU; /*!< Offset: 0x258 ( /W) I-Cache Invalidate by MVA to PoU */ + __OM uint32_t DCIMVAC; /*!< Offset: 0x25C ( /W) D-Cache Invalidate by MVA to PoC */ + __OM uint32_t DCISW; /*!< Offset: 0x260 ( /W) D-Cache Invalidate by Set-way */ + __OM uint32_t DCCMVAU; /*!< Offset: 0x264 ( /W) D-Cache Clean by MVA to PoU */ + __OM uint32_t DCCMVAC; /*!< Offset: 0x268 ( /W) D-Cache Clean by MVA to PoC */ + __OM uint32_t DCCSW; /*!< Offset: 0x26C ( /W) D-Cache Clean by Set-way */ + __OM uint32_t DCCIMVAC; /*!< Offset: 0x270 ( /W) D-Cache Clean and Invalidate by MVA to PoC */ + __OM uint32_t DCCISW; /*!< Offset: 0x274 ( /W) D-Cache Clean and Invalidate by Set-way */ + uint32_t RESERVED7[6U]; + __IOM uint32_t ITCMCR; /*!< Offset: 0x290 (R/W) Instruction Tightly-Coupled Memory Control Register */ + __IOM uint32_t DTCMCR; /*!< Offset: 0x294 (R/W) Data Tightly-Coupled Memory Control Registers */ + __IOM uint32_t AHBPCR; /*!< Offset: 0x298 (R/W) AHBP Control Register */ + __IOM uint32_t CACR; /*!< Offset: 0x29C (R/W) L1 Cache Control Register */ + __IOM uint32_t AHBSCR; /*!< Offset: 0x2A0 (R/W) AHB Slave Control Register */ + uint32_t RESERVED8[1U]; + __IOM uint32_t ABFSR; /*!< Offset: 0x2A8 (R/W) Auxiliary Bus Fault Status Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_BP_Pos 18U /*!< SCB CCR: Branch prediction enable bit Position */ +#define SCB_CCR_BP_Msk (1UL << SCB_CCR_BP_Pos) /*!< SCB CCR: Branch prediction enable bit Mask */ + +#define SCB_CCR_IC_Pos 17U /*!< SCB CCR: Instruction cache enable bit Position */ +#define SCB_CCR_IC_Msk (1UL << SCB_CCR_IC_Pos) /*!< SCB CCR: Instruction cache enable bit Mask */ + +#define SCB_CCR_DC_Pos 16U /*!< SCB CCR: Cache enable bit Position */ +#define SCB_CCR_DC_Msk (1UL << SCB_CCR_DC_Pos) /*!< SCB CCR: Cache enable bit Mask */ + +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MLSPERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 5U) /*!< SCB CFSR (MMFSR): MLSPERR Position */ +#define SCB_CFSR_MLSPERR_Msk (1UL << SCB_CFSR_MLSPERR_Pos) /*!< SCB CFSR (MMFSR): MLSPERR Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_LSPERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 5U) /*!< SCB CFSR (BFSR): LSPERR Position */ +#define SCB_CFSR_LSPERR_Msk (1UL << SCB_CFSR_LSPERR_Pos) /*!< SCB CFSR (BFSR): LSPERR Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/* SCB Cache Level ID Register Definitions */ +#define SCB_CLIDR_LOUU_Pos 27U /*!< SCB CLIDR: LoUU Position */ +#define SCB_CLIDR_LOUU_Msk (7UL << SCB_CLIDR_LOUU_Pos) /*!< SCB CLIDR: LoUU Mask */ + +#define SCB_CLIDR_LOC_Pos 24U /*!< SCB CLIDR: LoC Position */ +#define SCB_CLIDR_LOC_Msk (7UL << SCB_CLIDR_LOC_Pos) /*!< SCB CLIDR: LoC Mask */ + +/* SCB Cache Type Register Definitions */ +#define SCB_CTR_FORMAT_Pos 29U /*!< SCB CTR: Format Position */ +#define SCB_CTR_FORMAT_Msk (7UL << SCB_CTR_FORMAT_Pos) /*!< SCB CTR: Format Mask */ + +#define SCB_CTR_CWG_Pos 24U /*!< SCB CTR: CWG Position */ +#define SCB_CTR_CWG_Msk (0xFUL << SCB_CTR_CWG_Pos) /*!< SCB CTR: CWG Mask */ + +#define SCB_CTR_ERG_Pos 20U /*!< SCB CTR: ERG Position */ +#define SCB_CTR_ERG_Msk (0xFUL << SCB_CTR_ERG_Pos) /*!< SCB CTR: ERG Mask */ + +#define SCB_CTR_DMINLINE_Pos 16U /*!< SCB CTR: DminLine Position */ +#define SCB_CTR_DMINLINE_Msk (0xFUL << SCB_CTR_DMINLINE_Pos) /*!< SCB CTR: DminLine Mask */ + +#define SCB_CTR_IMINLINE_Pos 0U /*!< SCB CTR: ImInLine Position */ +#define SCB_CTR_IMINLINE_Msk (0xFUL /*<< SCB_CTR_IMINLINE_Pos*/) /*!< SCB CTR: ImInLine Mask */ + +/* SCB Cache Size ID Register Definitions */ +#define SCB_CCSIDR_WT_Pos 31U /*!< SCB CCSIDR: WT Position */ +#define SCB_CCSIDR_WT_Msk (1UL << SCB_CCSIDR_WT_Pos) /*!< SCB CCSIDR: WT Mask */ + +#define SCB_CCSIDR_WB_Pos 30U /*!< SCB CCSIDR: WB Position */ +#define SCB_CCSIDR_WB_Msk (1UL << SCB_CCSIDR_WB_Pos) /*!< SCB CCSIDR: WB Mask */ + +#define SCB_CCSIDR_RA_Pos 29U /*!< SCB CCSIDR: RA Position */ +#define SCB_CCSIDR_RA_Msk (1UL << SCB_CCSIDR_RA_Pos) /*!< SCB CCSIDR: RA Mask */ + +#define SCB_CCSIDR_WA_Pos 28U /*!< SCB CCSIDR: WA Position */ +#define SCB_CCSIDR_WA_Msk (1UL << SCB_CCSIDR_WA_Pos) /*!< SCB CCSIDR: WA Mask */ + +#define SCB_CCSIDR_NUMSETS_Pos 13U /*!< SCB CCSIDR: NumSets Position */ +#define SCB_CCSIDR_NUMSETS_Msk (0x7FFFUL << SCB_CCSIDR_NUMSETS_Pos) /*!< SCB CCSIDR: NumSets Mask */ + +#define SCB_CCSIDR_ASSOCIATIVITY_Pos 3U /*!< SCB CCSIDR: Associativity Position */ +#define SCB_CCSIDR_ASSOCIATIVITY_Msk (0x3FFUL << SCB_CCSIDR_ASSOCIATIVITY_Pos) /*!< SCB CCSIDR: Associativity Mask */ + +#define SCB_CCSIDR_LINESIZE_Pos 0U /*!< SCB CCSIDR: LineSize Position */ +#define SCB_CCSIDR_LINESIZE_Msk (7UL /*<< SCB_CCSIDR_LINESIZE_Pos*/) /*!< SCB CCSIDR: LineSize Mask */ + +/* SCB Cache Size Selection Register Definitions */ +#define SCB_CSSELR_LEVEL_Pos 1U /*!< SCB CSSELR: Level Position */ +#define SCB_CSSELR_LEVEL_Msk (7UL << SCB_CSSELR_LEVEL_Pos) /*!< SCB CSSELR: Level Mask */ + +#define SCB_CSSELR_IND_Pos 0U /*!< SCB CSSELR: InD Position */ +#define SCB_CSSELR_IND_Msk (1UL /*<< SCB_CSSELR_IND_Pos*/) /*!< SCB CSSELR: InD Mask */ + +/* SCB Software Triggered Interrupt Register Definitions */ +#define SCB_STIR_INTID_Pos 0U /*!< SCB STIR: INTID Position */ +#define SCB_STIR_INTID_Msk (0x1FFUL /*<< SCB_STIR_INTID_Pos*/) /*!< SCB STIR: INTID Mask */ + +/* SCB D-Cache Invalidate by Set-way Register Definitions */ +#define SCB_DCISW_WAY_Pos 30U /*!< SCB DCISW: Way Position */ +#define SCB_DCISW_WAY_Msk (3UL << SCB_DCISW_WAY_Pos) /*!< SCB DCISW: Way Mask */ + +#define SCB_DCISW_SET_Pos 5U /*!< SCB DCISW: Set Position */ +#define SCB_DCISW_SET_Msk (0x1FFUL << SCB_DCISW_SET_Pos) /*!< SCB DCISW: Set Mask */ + +/* SCB D-Cache Clean by Set-way Register Definitions */ +#define SCB_DCCSW_WAY_Pos 30U /*!< SCB DCCSW: Way Position */ +#define SCB_DCCSW_WAY_Msk (3UL << SCB_DCCSW_WAY_Pos) /*!< SCB DCCSW: Way Mask */ + +#define SCB_DCCSW_SET_Pos 5U /*!< SCB DCCSW: Set Position */ +#define SCB_DCCSW_SET_Msk (0x1FFUL << SCB_DCCSW_SET_Pos) /*!< SCB DCCSW: Set Mask */ + +/* SCB D-Cache Clean and Invalidate by Set-way Register Definitions */ +#define SCB_DCCISW_WAY_Pos 30U /*!< SCB DCCISW: Way Position */ +#define SCB_DCCISW_WAY_Msk (3UL << SCB_DCCISW_WAY_Pos) /*!< SCB DCCISW: Way Mask */ + +#define SCB_DCCISW_SET_Pos 5U /*!< SCB DCCISW: Set Position */ +#define SCB_DCCISW_SET_Msk (0x1FFUL << SCB_DCCISW_SET_Pos) /*!< SCB DCCISW: Set Mask */ + +/* Instruction Tightly-Coupled Memory Control Register Definitions */ +#define SCB_ITCMCR_SZ_Pos 3U /*!< SCB ITCMCR: SZ Position */ +#define SCB_ITCMCR_SZ_Msk (0xFUL << SCB_ITCMCR_SZ_Pos) /*!< SCB ITCMCR: SZ Mask */ + +#define SCB_ITCMCR_RETEN_Pos 2U /*!< SCB ITCMCR: RETEN Position */ +#define SCB_ITCMCR_RETEN_Msk (1UL << SCB_ITCMCR_RETEN_Pos) /*!< SCB ITCMCR: RETEN Mask */ + +#define SCB_ITCMCR_RMW_Pos 1U /*!< SCB ITCMCR: RMW Position */ +#define SCB_ITCMCR_RMW_Msk (1UL << SCB_ITCMCR_RMW_Pos) /*!< SCB ITCMCR: RMW Mask */ + +#define SCB_ITCMCR_EN_Pos 0U /*!< SCB ITCMCR: EN Position */ +#define SCB_ITCMCR_EN_Msk (1UL /*<< SCB_ITCMCR_EN_Pos*/) /*!< SCB ITCMCR: EN Mask */ + +/* Data Tightly-Coupled Memory Control Register Definitions */ +#define SCB_DTCMCR_SZ_Pos 3U /*!< SCB DTCMCR: SZ Position */ +#define SCB_DTCMCR_SZ_Msk (0xFUL << SCB_DTCMCR_SZ_Pos) /*!< SCB DTCMCR: SZ Mask */ + +#define SCB_DTCMCR_RETEN_Pos 2U /*!< SCB DTCMCR: RETEN Position */ +#define SCB_DTCMCR_RETEN_Msk (1UL << SCB_DTCMCR_RETEN_Pos) /*!< SCB DTCMCR: RETEN Mask */ + +#define SCB_DTCMCR_RMW_Pos 1U /*!< SCB DTCMCR: RMW Position */ +#define SCB_DTCMCR_RMW_Msk (1UL << SCB_DTCMCR_RMW_Pos) /*!< SCB DTCMCR: RMW Mask */ + +#define SCB_DTCMCR_EN_Pos 0U /*!< SCB DTCMCR: EN Position */ +#define SCB_DTCMCR_EN_Msk (1UL /*<< SCB_DTCMCR_EN_Pos*/) /*!< SCB DTCMCR: EN Mask */ + +/* AHBP Control Register Definitions */ +#define SCB_AHBPCR_SZ_Pos 1U /*!< SCB AHBPCR: SZ Position */ +#define SCB_AHBPCR_SZ_Msk (7UL << SCB_AHBPCR_SZ_Pos) /*!< SCB AHBPCR: SZ Mask */ + +#define SCB_AHBPCR_EN_Pos 0U /*!< SCB AHBPCR: EN Position */ +#define SCB_AHBPCR_EN_Msk (1UL /*<< SCB_AHBPCR_EN_Pos*/) /*!< SCB AHBPCR: EN Mask */ + +/* L1 Cache Control Register Definitions */ +#define SCB_CACR_FORCEWT_Pos 2U /*!< SCB CACR: FORCEWT Position */ +#define SCB_CACR_FORCEWT_Msk (1UL << SCB_CACR_FORCEWT_Pos) /*!< SCB CACR: FORCEWT Mask */ + +#define SCB_CACR_ECCEN_Pos 1U /*!< SCB CACR: ECCEN Position */ +#define SCB_CACR_ECCEN_Msk (1UL << SCB_CACR_ECCEN_Pos) /*!< SCB CACR: ECCEN Mask */ + +#define SCB_CACR_SIWT_Pos 0U /*!< SCB CACR: SIWT Position */ +#define SCB_CACR_SIWT_Msk (1UL /*<< SCB_CACR_SIWT_Pos*/) /*!< SCB CACR: SIWT Mask */ + +/* AHBS Control Register Definitions */ +#define SCB_AHBSCR_INITCOUNT_Pos 11U /*!< SCB AHBSCR: INITCOUNT Position */ +#define SCB_AHBSCR_INITCOUNT_Msk (0x1FUL << SCB_AHBPCR_INITCOUNT_Pos) /*!< SCB AHBSCR: INITCOUNT Mask */ + +#define SCB_AHBSCR_TPRI_Pos 2U /*!< SCB AHBSCR: TPRI Position */ +#define SCB_AHBSCR_TPRI_Msk (0x1FFUL << SCB_AHBPCR_TPRI_Pos) /*!< SCB AHBSCR: TPRI Mask */ + +#define SCB_AHBSCR_CTL_Pos 0U /*!< SCB AHBSCR: CTL Position*/ +#define SCB_AHBSCR_CTL_Msk (3UL /*<< SCB_AHBPCR_CTL_Pos*/) /*!< SCB AHBSCR: CTL Mask */ + +/* Auxiliary Bus Fault Status Register Definitions */ +#define SCB_ABFSR_AXIMTYPE_Pos 8U /*!< SCB ABFSR: AXIMTYPE Position*/ +#define SCB_ABFSR_AXIMTYPE_Msk (3UL << SCB_ABFSR_AXIMTYPE_Pos) /*!< SCB ABFSR: AXIMTYPE Mask */ + +#define SCB_ABFSR_EPPB_Pos 4U /*!< SCB ABFSR: EPPB Position*/ +#define SCB_ABFSR_EPPB_Msk (1UL << SCB_ABFSR_EPPB_Pos) /*!< SCB ABFSR: EPPB Mask */ + +#define SCB_ABFSR_AXIM_Pos 3U /*!< SCB ABFSR: AXIM Position*/ +#define SCB_ABFSR_AXIM_Msk (1UL << SCB_ABFSR_AXIM_Pos) /*!< SCB ABFSR: AXIM Mask */ + +#define SCB_ABFSR_AHBP_Pos 2U /*!< SCB ABFSR: AHBP Position*/ +#define SCB_ABFSR_AHBP_Msk (1UL << SCB_ABFSR_AHBP_Pos) /*!< SCB ABFSR: AHBP Mask */ + +#define SCB_ABFSR_DTCM_Pos 1U /*!< SCB ABFSR: DTCM Position*/ +#define SCB_ABFSR_DTCM_Msk (1UL << SCB_ABFSR_DTCM_Pos) /*!< SCB ABFSR: DTCM Mask */ + +#define SCB_ABFSR_ITCM_Pos 0U /*!< SCB ABFSR: ITCM Position*/ +#define SCB_ABFSR_ITCM_Msk (1UL /*<< SCB_ABFSR_ITCM_Pos*/) /*!< SCB ABFSR: ITCM Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Pos 12U /*!< ACTLR: DISITMATBFLUSH Position */ +#define SCnSCB_ACTLR_DISITMATBFLUSH_Msk (1UL << SCnSCB_ACTLR_DISITMATBFLUSH_Pos) /*!< ACTLR: DISITMATBFLUSH Mask */ + +#define SCnSCB_ACTLR_DISRAMODE_Pos 11U /*!< ACTLR: DISRAMODE Position */ +#define SCnSCB_ACTLR_DISRAMODE_Msk (1UL << SCnSCB_ACTLR_DISRAMODE_Pos) /*!< ACTLR: DISRAMODE Mask */ + +#define SCnSCB_ACTLR_FPEXCODIS_Pos 10U /*!< ACTLR: FPEXCODIS Position */ +#define SCnSCB_ACTLR_FPEXCODIS_Msk (1UL << SCnSCB_ACTLR_FPEXCODIS_Pos) /*!< ACTLR: FPEXCODIS Mask */ + +#define SCnSCB_ACTLR_DISFOLD_Pos 2U /*!< ACTLR: DISFOLD Position */ +#define SCnSCB_ACTLR_DISFOLD_Msk (1UL << SCnSCB_ACTLR_DISFOLD_Pos) /*!< ACTLR: DISFOLD Mask */ + +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFFFFFFFFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ + uint32_t RESERVED3[981U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( W) Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R ) Lock Status Register */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +#define MPU_TYPE_RALIASES 4U + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif /* defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_FPU Floating Point Unit (FPU) + \brief Type definitions for the Floating Point Unit (FPU) + @{ + */ + +/** + \brief Structure type to access the Floating Point Unit (FPU). + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IOM uint32_t FPCCR; /*!< Offset: 0x004 (R/W) Floating-Point Context Control Register */ + __IOM uint32_t FPCAR; /*!< Offset: 0x008 (R/W) Floating-Point Context Address Register */ + __IOM uint32_t FPDSCR; /*!< Offset: 0x00C (R/W) Floating-Point Default Status Control Register */ + __IM uint32_t MVFR0; /*!< Offset: 0x010 (R/ ) Media and FP Feature Register 0 */ + __IM uint32_t MVFR1; /*!< Offset: 0x014 (R/ ) Media and FP Feature Register 1 */ + __IM uint32_t MVFR2; /*!< Offset: 0x018 (R/ ) Media and FP Feature Register 2 */ +} FPU_Type; + +/* Floating-Point Context Control Register Definitions */ +#define FPU_FPCCR_ASPEN_Pos 31U /*!< FPCCR: ASPEN bit Position */ +#define FPU_FPCCR_ASPEN_Msk (1UL << FPU_FPCCR_ASPEN_Pos) /*!< FPCCR: ASPEN bit Mask */ + +#define FPU_FPCCR_LSPEN_Pos 30U /*!< FPCCR: LSPEN Position */ +#define FPU_FPCCR_LSPEN_Msk (1UL << FPU_FPCCR_LSPEN_Pos) /*!< FPCCR: LSPEN bit Mask */ + +#define FPU_FPCCR_MONRDY_Pos 8U /*!< FPCCR: MONRDY Position */ +#define FPU_FPCCR_MONRDY_Msk (1UL << FPU_FPCCR_MONRDY_Pos) /*!< FPCCR: MONRDY bit Mask */ + +#define FPU_FPCCR_BFRDY_Pos 6U /*!< FPCCR: BFRDY Position */ +#define FPU_FPCCR_BFRDY_Msk (1UL << FPU_FPCCR_BFRDY_Pos) /*!< FPCCR: BFRDY bit Mask */ + +#define FPU_FPCCR_MMRDY_Pos 5U /*!< FPCCR: MMRDY Position */ +#define FPU_FPCCR_MMRDY_Msk (1UL << FPU_FPCCR_MMRDY_Pos) /*!< FPCCR: MMRDY bit Mask */ + +#define FPU_FPCCR_HFRDY_Pos 4U /*!< FPCCR: HFRDY Position */ +#define FPU_FPCCR_HFRDY_Msk (1UL << FPU_FPCCR_HFRDY_Pos) /*!< FPCCR: HFRDY bit Mask */ + +#define FPU_FPCCR_THREAD_Pos 3U /*!< FPCCR: processor mode bit Position */ +#define FPU_FPCCR_THREAD_Msk (1UL << FPU_FPCCR_THREAD_Pos) /*!< FPCCR: processor mode active bit Mask */ + +#define FPU_FPCCR_USER_Pos 1U /*!< FPCCR: privilege level bit Position */ +#define FPU_FPCCR_USER_Msk (1UL << FPU_FPCCR_USER_Pos) /*!< FPCCR: privilege level bit Mask */ + +#define FPU_FPCCR_LSPACT_Pos 0U /*!< FPCCR: Lazy state preservation active bit Position */ +#define FPU_FPCCR_LSPACT_Msk (1UL /*<< FPU_FPCCR_LSPACT_Pos*/) /*!< FPCCR: Lazy state preservation active bit Mask */ + +/* Floating-Point Context Address Register Definitions */ +#define FPU_FPCAR_ADDRESS_Pos 3U /*!< FPCAR: ADDRESS bit Position */ +#define FPU_FPCAR_ADDRESS_Msk (0x1FFFFFFFUL << FPU_FPCAR_ADDRESS_Pos) /*!< FPCAR: ADDRESS bit Mask */ + +/* Floating-Point Default Status Control Register Definitions */ +#define FPU_FPDSCR_AHP_Pos 26U /*!< FPDSCR: AHP bit Position */ +#define FPU_FPDSCR_AHP_Msk (1UL << FPU_FPDSCR_AHP_Pos) /*!< FPDSCR: AHP bit Mask */ + +#define FPU_FPDSCR_DN_Pos 25U /*!< FPDSCR: DN bit Position */ +#define FPU_FPDSCR_DN_Msk (1UL << FPU_FPDSCR_DN_Pos) /*!< FPDSCR: DN bit Mask */ + +#define FPU_FPDSCR_FZ_Pos 24U /*!< FPDSCR: FZ bit Position */ +#define FPU_FPDSCR_FZ_Msk (1UL << FPU_FPDSCR_FZ_Pos) /*!< FPDSCR: FZ bit Mask */ + +#define FPU_FPDSCR_RMode_Pos 22U /*!< FPDSCR: RMode bit Position */ +#define FPU_FPDSCR_RMode_Msk (3UL << FPU_FPDSCR_RMode_Pos) /*!< FPDSCR: RMode bit Mask */ + +/* Media and FP Feature Register 0 Definitions */ +#define FPU_MVFR0_FP_rounding_modes_Pos 28U /*!< MVFR0: FP rounding modes bits Position */ +#define FPU_MVFR0_FP_rounding_modes_Msk (0xFUL << FPU_MVFR0_FP_rounding_modes_Pos) /*!< MVFR0: FP rounding modes bits Mask */ + +#define FPU_MVFR0_Short_vectors_Pos 24U /*!< MVFR0: Short vectors bits Position */ +#define FPU_MVFR0_Short_vectors_Msk (0xFUL << FPU_MVFR0_Short_vectors_Pos) /*!< MVFR0: Short vectors bits Mask */ + +#define FPU_MVFR0_Square_root_Pos 20U /*!< MVFR0: Square root bits Position */ +#define FPU_MVFR0_Square_root_Msk (0xFUL << FPU_MVFR0_Square_root_Pos) /*!< MVFR0: Square root bits Mask */ + +#define FPU_MVFR0_Divide_Pos 16U /*!< MVFR0: Divide bits Position */ +#define FPU_MVFR0_Divide_Msk (0xFUL << FPU_MVFR0_Divide_Pos) /*!< MVFR0: Divide bits Mask */ + +#define FPU_MVFR0_FP_excep_trapping_Pos 12U /*!< MVFR0: FP exception trapping bits Position */ +#define FPU_MVFR0_FP_excep_trapping_Msk (0xFUL << FPU_MVFR0_FP_excep_trapping_Pos) /*!< MVFR0: FP exception trapping bits Mask */ + +#define FPU_MVFR0_Double_precision_Pos 8U /*!< MVFR0: Double-precision bits Position */ +#define FPU_MVFR0_Double_precision_Msk (0xFUL << FPU_MVFR0_Double_precision_Pos) /*!< MVFR0: Double-precision bits Mask */ + +#define FPU_MVFR0_Single_precision_Pos 4U /*!< MVFR0: Single-precision bits Position */ +#define FPU_MVFR0_Single_precision_Msk (0xFUL << FPU_MVFR0_Single_precision_Pos) /*!< MVFR0: Single-precision bits Mask */ + +#define FPU_MVFR0_A_SIMD_registers_Pos 0U /*!< MVFR0: A_SIMD registers bits Position */ +#define FPU_MVFR0_A_SIMD_registers_Msk (0xFUL /*<< FPU_MVFR0_A_SIMD_registers_Pos*/) /*!< MVFR0: A_SIMD registers bits Mask */ + +/* Media and FP Feature Register 1 Definitions */ +#define FPU_MVFR1_FP_fused_MAC_Pos 28U /*!< MVFR1: FP fused MAC bits Position */ +#define FPU_MVFR1_FP_fused_MAC_Msk (0xFUL << FPU_MVFR1_FP_fused_MAC_Pos) /*!< MVFR1: FP fused MAC bits Mask */ + +#define FPU_MVFR1_FP_HPFP_Pos 24U /*!< MVFR1: FP HPFP bits Position */ +#define FPU_MVFR1_FP_HPFP_Msk (0xFUL << FPU_MVFR1_FP_HPFP_Pos) /*!< MVFR1: FP HPFP bits Mask */ + +#define FPU_MVFR1_D_NaN_mode_Pos 4U /*!< MVFR1: D_NaN mode bits Position */ +#define FPU_MVFR1_D_NaN_mode_Msk (0xFUL << FPU_MVFR1_D_NaN_mode_Pos) /*!< MVFR1: D_NaN mode bits Mask */ + +#define FPU_MVFR1_FtZ_mode_Pos 0U /*!< MVFR1: FtZ mode bits Position */ +#define FPU_MVFR1_FtZ_mode_Msk (0xFUL /*<< FPU_MVFR1_FtZ_mode_Pos*/) /*!< MVFR1: FtZ mode bits Mask */ + +/* Media and FP Feature Register 2 Definitions */ + +/*@} end of group CMSIS_FPU */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +#define FPU_BASE (SCS_BASE + 0x0F30UL) /*!< Floating Point Unit */ +#define FPU ((FPU_Type *) FPU_BASE ) /*!< Floating Point Unit */ + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ +#define EXC_RETURN_HANDLER_FPU (0xFFFFFFE1UL) /* return to Handler mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_MSP_FPU (0xFFFFFFE9UL) /* return to Thread mode, uses MSP after return, restore floating-point state */ +#define EXC_RETURN_THREAD_PSP_FPU (0xFFFFFFEDUL) /* return to Thread mode, uses PSP after return, restore floating-point state */ + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << SCB_AIRCR_PRIGROUP_Pos) ); /* Insert write key and priority group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHPR[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + +/* ########################## MPU functions #################################### */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + +#include "mpu_armv7.h" + +#endif + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + uint32_t mvfr0; + + mvfr0 = SCB->MVFR0; + if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x220U) + { + return 2U; /* Double + Single precision FPU */ + } + else if ((mvfr0 & (FPU_MVFR0_Single_precision_Msk | FPU_MVFR0_Double_precision_Msk)) == 0x020U) + { + return 1U; /* Single precision FPU */ + } + else + { + return 0U; /* No FPU */ + } +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ########################## Cache functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_CacheFunctions Cache Functions + \brief Functions that configure Instruction and Data cache. + @{ + */ + +/* Cache Size ID Register Macros */ +#define CCSIDR_WAYS(x) (((x) & SCB_CCSIDR_ASSOCIATIVITY_Msk) >> SCB_CCSIDR_ASSOCIATIVITY_Pos) +#define CCSIDR_SETS(x) (((x) & SCB_CCSIDR_NUMSETS_Msk ) >> SCB_CCSIDR_NUMSETS_Pos ) + + +/** + \brief Enable I-Cache + \details Turns on I-Cache + */ +__STATIC_INLINE void SCB_EnableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + SCB->CCR |= (uint32_t)SCB_CCR_IC_Msk; /* enable I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable I-Cache + \details Turns off I-Cache + */ +__STATIC_INLINE void SCB_DisableICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->CCR &= ~(uint32_t)SCB_CCR_IC_Msk; /* disable I-Cache */ + SCB->ICIALLU = 0UL; /* invalidate I-Cache */ + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate I-Cache + \details Invalidates I-Cache + */ +__STATIC_INLINE void SCB_InvalidateICache (void) +{ + #if defined (__ICACHE_PRESENT) && (__ICACHE_PRESENT == 1U) + __DSB(); + __ISB(); + SCB->ICIALLU = 0UL; + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Enable D-Cache + \details Turns on D-Cache + */ +__STATIC_INLINE void SCB_EnableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + __DSB(); + + SCB->CCR |= (uint32_t)SCB_CCR_DC_Msk; /* enable D-Cache */ + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Disable D-Cache + \details Turns off D-Cache + */ +__STATIC_INLINE void SCB_DisableDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + SCB->CCR &= ~(uint32_t)SCB_CCR_DC_Msk; /* disable D-Cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Invalidate D-Cache + \details Invalidates D-Cache + */ +__STATIC_INLINE void SCB_InvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCISW = (((sets << SCB_DCISW_SET_Pos) & SCB_DCISW_SET_Msk) | + ((ways << SCB_DCISW_WAY_Pos) & SCB_DCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean D-Cache + \details Cleans D-Cache + */ +__STATIC_INLINE void SCB_CleanDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCSW = (((sets << SCB_DCCSW_SET_Pos) & SCB_DCCSW_SET_Msk) | + ((ways << SCB_DCCSW_WAY_Pos) & SCB_DCCSW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief Clean & Invalidate D-Cache + \details Cleans and Invalidates D-Cache + */ +__STATIC_INLINE void SCB_CleanInvalidateDCache (void) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + uint32_t ccsidr; + uint32_t sets; + uint32_t ways; + + SCB->CSSELR = 0U; /*(0U << 1U) | 0U;*/ /* Level 1 data cache */ + __DSB(); + + ccsidr = SCB->CCSIDR; + + /* clean & invalidate D-Cache */ + sets = (uint32_t)(CCSIDR_SETS(ccsidr)); + do { + ways = (uint32_t)(CCSIDR_WAYS(ccsidr)); + do { + SCB->DCCISW = (((sets << SCB_DCCISW_SET_Pos) & SCB_DCCISW_SET_Msk) | + ((ways << SCB_DCCISW_WAY_Pos) & SCB_DCCISW_WAY_Msk) ); + #if defined ( __CC_ARM ) + __schedule_barrier(); + #endif + } while (ways-- != 0U); + } while(sets-- != 0U); + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Invalidate by address + \details Invalidates D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_InvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t)addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean by address + \details Cleans D-Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/** + \brief D-Cache Clean and Invalidate by address + \details Cleans and invalidates D_Cache for the given address + \param[in] addr address (aligned to 32-byte boundary) + \param[in] dsize size of memory block (in number of bytes) +*/ +__STATIC_INLINE void SCB_CleanInvalidateDCache_by_Addr (uint32_t *addr, int32_t dsize) +{ + #if defined (__DCACHE_PRESENT) && (__DCACHE_PRESENT == 1U) + int32_t op_size = dsize; + uint32_t op_addr = (uint32_t) addr; + int32_t linesize = 32; /* in Cortex-M7 size of cache line is fixed to 8 words (32 bytes) */ + + __DSB(); + + while (op_size > 0) { + SCB->DCCIMVAC = op_addr; + op_addr += (uint32_t)linesize; + op_size -= linesize; + } + + __DSB(); + __ISB(); + #endif +} + + +/*@} end of CMSIS_Core_CacheFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_CM7_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc000.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc000.h new file mode 100644 index 0000000000..9b67c92f3b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc000.h @@ -0,0 +1,1022 @@ +/**************************************************************************//** + * @file core_sc000.h + * @brief CMSIS SC000 Core Peripheral Access Layer Header File + * @version V5.0.5 + * @date 28. May 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC000_H_GENERIC +#define __CORE_SC000_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC000 definitions */ +#define __SC000_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC000_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC000_CMSIS_VERSION ((__SC000_CMSIS_VERSION_MAIN << 16U) | \ + __SC000_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (000U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC000_H_DEPENDANT +#define __CORE_SC000_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC000_REV + #define __SC000_REV 0x0000U + #warning "__SC000_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 2U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC000 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:28; /*!< bit: 0..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:15; /*!< bit: 9..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit (read 0) */ + uint32_t _reserved1:3; /*!< bit: 25..27 Reserved */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t _reserved0:1; /*!< bit: 0 Reserved */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[1U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[31U]; + __IOM uint32_t ICER[1U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[31U]; + __IOM uint32_t ISPR[1U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[31U]; + __IOM uint32_t ICPR[1U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[31U]; + uint32_t RESERVED4[64U]; + __IOM uint32_t IP[8U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register */ +} NVIC_Type; + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + uint32_t RESERVED0[1U]; + __IOM uint32_t SHP[2U]; /*!< Offset: 0x01C (R/W) System Handlers Priority Registers. [0] is RESERVED */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + uint32_t RESERVED1[154U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x1FFFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACTLR; /*!< Offset: 0x008 (R/W) Auxiliary Control Register */ +} SCnSCB_Type; + +/* Auxiliary Control Register Definitions */ +#define SCnSCB_ACTLR_DISMCYCINT_Pos 0U /*!< ACTLR: DISMCYCINT Position */ +#define SCnSCB_ACTLR_DISMCYCINT_Msk (1UL /*<< SCnSCB_ACTLR_DISMCYCINT_Pos*/) /*!< ACTLR: DISMCYCINT Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 8U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0xFFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief SC000 Core Debug Registers (DCB registers, SHCSR, and DFSR) are only accessible over DAP and not via processor. + Therefore they are not covered by the SC000 header file. + @{ + */ +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else +/*#define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping not available for SC000 */ +/*#define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping not available for SC000 */ + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ +/*#define NVIC_GetActive __NVIC_GetActive not available for SC000 */ + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + +/* Interrupt Priorities are WORD accessible only under Armv6-M */ +/* The following MACROS handle generation of the register offset and byte masks */ +#define _BIT_SHIFT(IRQn) ( ((((uint32_t)(int32_t)(IRQn)) ) & 0x03UL) * 8UL) +#define _SHP_IDX(IRQn) ( (((((uint32_t)(int32_t)(IRQn)) & 0x0FUL)-8UL) >> 2UL) ) +#define _IP_IDX(IRQn) ( (((uint32_t)(int32_t)(IRQn)) >> 2UL) ) + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[0U] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[0U] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[_IP_IDX(IRQn)] = ((uint32_t)(NVIC->IP[_IP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } + else + { + SCB->SHP[_SHP_IDX(IRQn)] = ((uint32_t)(SCB->SHP[_SHP_IDX(IRQn)] & ~(0xFFUL << _BIT_SHIFT(IRQn))) | + (((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL) << _BIT_SHIFT(IRQn))); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IP[ _IP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return((uint32_t)(((SCB->SHP[_SHP_IDX(IRQn)] >> _BIT_SHIFT(IRQn) ) & (uint32_t)0xFFUL) >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = ((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + SCB_AIRCR_SYSRESETREQ_Msk); + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC000_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc300.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc300.h new file mode 100644 index 0000000000..3e8a47109a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/core_sc300.h @@ -0,0 +1,1915 @@ +/**************************************************************************//** + * @file core_sc300.h + * @brief CMSIS SC300 Core Peripheral Access Layer Header File + * @version V5.0.6 + * @date 04. June 2018 + ******************************************************************************/ +/* + * Copyright (c) 2009-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef __CORE_SC300_H_GENERIC +#define __CORE_SC300_H_GENERIC + +#include + +#ifdef __cplusplus + extern "C" { +#endif + +/** + \page CMSIS_MISRA_Exceptions MISRA-C:2004 Compliance Exceptions + CMSIS violates the following MISRA-C:2004 rules: + + \li Required Rule 8.5, object/function definition in header file.
+ Function definitions in header files are used to allow 'inlining'. + + \li Required Rule 18.4, declaration of union type or object of union type: '{...}'.
+ Unions are used for effective representation of core registers. + + \li Advisory Rule 19.7, Function-like macro defined.
+ Function-like macros are used to allow more efficient code. + */ + + +/******************************************************************************* + * CMSIS definitions + ******************************************************************************/ +/** + \ingroup SC3000 + @{ + */ + +#include "cmsis_version.h" + +/* CMSIS SC300 definitions */ +#define __SC300_CMSIS_VERSION_MAIN (__CM_CMSIS_VERSION_MAIN) /*!< \deprecated [31:16] CMSIS HAL main version */ +#define __SC300_CMSIS_VERSION_SUB (__CM_CMSIS_VERSION_SUB) /*!< \deprecated [15:0] CMSIS HAL sub version */ +#define __SC300_CMSIS_VERSION ((__SC300_CMSIS_VERSION_MAIN << 16U) | \ + __SC300_CMSIS_VERSION_SUB ) /*!< \deprecated CMSIS HAL version number */ + +#define __CORTEX_SC (300U) /*!< Cortex secure core */ + +/** __FPU_USED indicates whether an FPU is used or not. + This core does not support an FPU at all +*/ +#define __FPU_USED 0U + +#if defined ( __CC_ARM ) + #if defined __TARGET_FPU_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) + #if defined __ARM_PCS_VFP + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __GNUC__ ) + #if defined (__VFP_FP__) && !defined(__SOFTFP__) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __ICCARM__ ) + #if defined __ARMVFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TI_ARM__ ) + #if defined __TI_VFP_SUPPORT__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __TASKING__ ) + #if defined __FPU_VFP__ + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#elif defined ( __CSMC__ ) + #if ( __CSMC__ & 0x400U) + #error "Compiler generates FPU instructions for a device without an FPU (check __FPU_PRESENT)" + #endif + +#endif + +#include "cmsis_compiler.h" /* CMSIS compiler specific defines */ + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_GENERIC */ + +#ifndef __CMSIS_GENERIC + +#ifndef __CORE_SC300_H_DEPENDANT +#define __CORE_SC300_H_DEPENDANT + +#ifdef __cplusplus + extern "C" { +#endif + +/* check device defines and use defaults */ +#if defined __CHECK_DEVICE_DEFINES + #ifndef __SC300_REV + #define __SC300_REV 0x0000U + #warning "__SC300_REV not defined in device header file; using default!" + #endif + + #ifndef __MPU_PRESENT + #define __MPU_PRESENT 0U + #warning "__MPU_PRESENT not defined in device header file; using default!" + #endif + + #ifndef __NVIC_PRIO_BITS + #define __NVIC_PRIO_BITS 3U + #warning "__NVIC_PRIO_BITS not defined in device header file; using default!" + #endif + + #ifndef __Vendor_SysTickConfig + #define __Vendor_SysTickConfig 0U + #warning "__Vendor_SysTickConfig not defined in device header file; using default!" + #endif +#endif + +/* IO definitions (access restrictions to peripheral registers) */ +/** + \defgroup CMSIS_glob_defs CMSIS Global Defines + + IO Type Qualifiers are used + \li to specify the access to peripheral variables. + \li for automatic generation of peripheral register debug information. +*/ +#ifdef __cplusplus + #define __I volatile /*!< Defines 'read only' permissions */ +#else + #define __I volatile const /*!< Defines 'read only' permissions */ +#endif +#define __O volatile /*!< Defines 'write only' permissions */ +#define __IO volatile /*!< Defines 'read / write' permissions */ + +/* following defines should be used for structure members */ +#define __IM volatile const /*! Defines 'read only' structure member permissions */ +#define __OM volatile /*! Defines 'write only' structure member permissions */ +#define __IOM volatile /*! Defines 'read / write' structure member permissions */ + +/*@} end of group SC300 */ + + + +/******************************************************************************* + * Register Abstraction + Core Register contain: + - Core Register + - Core NVIC Register + - Core SCB Register + - Core SysTick Register + - Core Debug Register + - Core MPU Register + ******************************************************************************/ +/** + \defgroup CMSIS_core_register Defines and Type Definitions + \brief Type definitions and defines for Cortex-M processor based devices. +*/ + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CORE Status and Control Registers + \brief Core Register type definitions. + @{ + */ + +/** + \brief Union type to access the Application Program Status Register (APSR). + */ +typedef union +{ + struct + { + uint32_t _reserved0:27; /*!< bit: 0..26 Reserved */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} APSR_Type; + +/* APSR Register Definitions */ +#define APSR_N_Pos 31U /*!< APSR: N Position */ +#define APSR_N_Msk (1UL << APSR_N_Pos) /*!< APSR: N Mask */ + +#define APSR_Z_Pos 30U /*!< APSR: Z Position */ +#define APSR_Z_Msk (1UL << APSR_Z_Pos) /*!< APSR: Z Mask */ + +#define APSR_C_Pos 29U /*!< APSR: C Position */ +#define APSR_C_Msk (1UL << APSR_C_Pos) /*!< APSR: C Mask */ + +#define APSR_V_Pos 28U /*!< APSR: V Position */ +#define APSR_V_Msk (1UL << APSR_V_Pos) /*!< APSR: V Mask */ + +#define APSR_Q_Pos 27U /*!< APSR: Q Position */ +#define APSR_Q_Msk (1UL << APSR_Q_Pos) /*!< APSR: Q Mask */ + + +/** + \brief Union type to access the Interrupt Program Status Register (IPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:23; /*!< bit: 9..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} IPSR_Type; + +/* IPSR Register Definitions */ +#define IPSR_ISR_Pos 0U /*!< IPSR: ISR Position */ +#define IPSR_ISR_Msk (0x1FFUL /*<< IPSR_ISR_Pos*/) /*!< IPSR: ISR Mask */ + + +/** + \brief Union type to access the Special-Purpose Program Status Registers (xPSR). + */ +typedef union +{ + struct + { + uint32_t ISR:9; /*!< bit: 0.. 8 Exception number */ + uint32_t _reserved0:1; /*!< bit: 9 Reserved */ + uint32_t ICI_IT_1:6; /*!< bit: 10..15 ICI/IT part 1 */ + uint32_t _reserved1:8; /*!< bit: 16..23 Reserved */ + uint32_t T:1; /*!< bit: 24 Thumb bit */ + uint32_t ICI_IT_2:2; /*!< bit: 25..26 ICI/IT part 2 */ + uint32_t Q:1; /*!< bit: 27 Saturation condition flag */ + uint32_t V:1; /*!< bit: 28 Overflow condition code flag */ + uint32_t C:1; /*!< bit: 29 Carry condition code flag */ + uint32_t Z:1; /*!< bit: 30 Zero condition code flag */ + uint32_t N:1; /*!< bit: 31 Negative condition code flag */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} xPSR_Type; + +/* xPSR Register Definitions */ +#define xPSR_N_Pos 31U /*!< xPSR: N Position */ +#define xPSR_N_Msk (1UL << xPSR_N_Pos) /*!< xPSR: N Mask */ + +#define xPSR_Z_Pos 30U /*!< xPSR: Z Position */ +#define xPSR_Z_Msk (1UL << xPSR_Z_Pos) /*!< xPSR: Z Mask */ + +#define xPSR_C_Pos 29U /*!< xPSR: C Position */ +#define xPSR_C_Msk (1UL << xPSR_C_Pos) /*!< xPSR: C Mask */ + +#define xPSR_V_Pos 28U /*!< xPSR: V Position */ +#define xPSR_V_Msk (1UL << xPSR_V_Pos) /*!< xPSR: V Mask */ + +#define xPSR_Q_Pos 27U /*!< xPSR: Q Position */ +#define xPSR_Q_Msk (1UL << xPSR_Q_Pos) /*!< xPSR: Q Mask */ + +#define xPSR_ICI_IT_2_Pos 25U /*!< xPSR: ICI/IT part 2 Position */ +#define xPSR_ICI_IT_2_Msk (3UL << xPSR_ICI_IT_2_Pos) /*!< xPSR: ICI/IT part 2 Mask */ + +#define xPSR_T_Pos 24U /*!< xPSR: T Position */ +#define xPSR_T_Msk (1UL << xPSR_T_Pos) /*!< xPSR: T Mask */ + +#define xPSR_ICI_IT_1_Pos 10U /*!< xPSR: ICI/IT part 1 Position */ +#define xPSR_ICI_IT_1_Msk (0x3FUL << xPSR_ICI_IT_1_Pos) /*!< xPSR: ICI/IT part 1 Mask */ + +#define xPSR_ISR_Pos 0U /*!< xPSR: ISR Position */ +#define xPSR_ISR_Msk (0x1FFUL /*<< xPSR_ISR_Pos*/) /*!< xPSR: ISR Mask */ + + +/** + \brief Union type to access the Control Registers (CONTROL). + */ +typedef union +{ + struct + { + uint32_t nPRIV:1; /*!< bit: 0 Execution privilege in Thread mode */ + uint32_t SPSEL:1; /*!< bit: 1 Stack to be used */ + uint32_t _reserved1:30; /*!< bit: 2..31 Reserved */ + } b; /*!< Structure used for bit access */ + uint32_t w; /*!< Type used for word access */ +} CONTROL_Type; + +/* CONTROL Register Definitions */ +#define CONTROL_SPSEL_Pos 1U /*!< CONTROL: SPSEL Position */ +#define CONTROL_SPSEL_Msk (1UL << CONTROL_SPSEL_Pos) /*!< CONTROL: SPSEL Mask */ + +#define CONTROL_nPRIV_Pos 0U /*!< CONTROL: nPRIV Position */ +#define CONTROL_nPRIV_Msk (1UL /*<< CONTROL_nPRIV_Pos*/) /*!< CONTROL: nPRIV Mask */ + +/*@} end of group CMSIS_CORE */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_NVIC Nested Vectored Interrupt Controller (NVIC) + \brief Type definitions for the NVIC Registers + @{ + */ + +/** + \brief Structure type to access the Nested Vectored Interrupt Controller (NVIC). + */ +typedef struct +{ + __IOM uint32_t ISER[8U]; /*!< Offset: 0x000 (R/W) Interrupt Set Enable Register */ + uint32_t RESERVED0[24U]; + __IOM uint32_t ICER[8U]; /*!< Offset: 0x080 (R/W) Interrupt Clear Enable Register */ + uint32_t RSERVED1[24U]; + __IOM uint32_t ISPR[8U]; /*!< Offset: 0x100 (R/W) Interrupt Set Pending Register */ + uint32_t RESERVED2[24U]; + __IOM uint32_t ICPR[8U]; /*!< Offset: 0x180 (R/W) Interrupt Clear Pending Register */ + uint32_t RESERVED3[24U]; + __IOM uint32_t IABR[8U]; /*!< Offset: 0x200 (R/W) Interrupt Active bit Register */ + uint32_t RESERVED4[56U]; + __IOM uint8_t IP[240U]; /*!< Offset: 0x300 (R/W) Interrupt Priority Register (8Bit wide) */ + uint32_t RESERVED5[644U]; + __OM uint32_t STIR; /*!< Offset: 0xE00 ( /W) Software Trigger Interrupt Register */ +} NVIC_Type; + +/* Software Triggered Interrupt Register Definitions */ +#define NVIC_STIR_INTID_Pos 0U /*!< STIR: INTLINESNUM Position */ +#define NVIC_STIR_INTID_Msk (0x1FFUL /*<< NVIC_STIR_INTID_Pos*/) /*!< STIR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_NVIC */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCB System Control Block (SCB) + \brief Type definitions for the System Control Block Registers + @{ + */ + +/** + \brief Structure type to access the System Control Block (SCB). + */ +typedef struct +{ + __IM uint32_t CPUID; /*!< Offset: 0x000 (R/ ) CPUID Base Register */ + __IOM uint32_t ICSR; /*!< Offset: 0x004 (R/W) Interrupt Control and State Register */ + __IOM uint32_t VTOR; /*!< Offset: 0x008 (R/W) Vector Table Offset Register */ + __IOM uint32_t AIRCR; /*!< Offset: 0x00C (R/W) Application Interrupt and Reset Control Register */ + __IOM uint32_t SCR; /*!< Offset: 0x010 (R/W) System Control Register */ + __IOM uint32_t CCR; /*!< Offset: 0x014 (R/W) Configuration Control Register */ + __IOM uint8_t SHP[12U]; /*!< Offset: 0x018 (R/W) System Handlers Priority Registers (4-7, 8-11, 12-15) */ + __IOM uint32_t SHCSR; /*!< Offset: 0x024 (R/W) System Handler Control and State Register */ + __IOM uint32_t CFSR; /*!< Offset: 0x028 (R/W) Configurable Fault Status Register */ + __IOM uint32_t HFSR; /*!< Offset: 0x02C (R/W) HardFault Status Register */ + __IOM uint32_t DFSR; /*!< Offset: 0x030 (R/W) Debug Fault Status Register */ + __IOM uint32_t MMFAR; /*!< Offset: 0x034 (R/W) MemManage Fault Address Register */ + __IOM uint32_t BFAR; /*!< Offset: 0x038 (R/W) BusFault Address Register */ + __IOM uint32_t AFSR; /*!< Offset: 0x03C (R/W) Auxiliary Fault Status Register */ + __IM uint32_t PFR[2U]; /*!< Offset: 0x040 (R/ ) Processor Feature Register */ + __IM uint32_t DFR; /*!< Offset: 0x048 (R/ ) Debug Feature Register */ + __IM uint32_t ADR; /*!< Offset: 0x04C (R/ ) Auxiliary Feature Register */ + __IM uint32_t MMFR[4U]; /*!< Offset: 0x050 (R/ ) Memory Model Feature Register */ + __IM uint32_t ISAR[5U]; /*!< Offset: 0x060 (R/ ) Instruction Set Attributes Register */ + uint32_t RESERVED0[5U]; + __IOM uint32_t CPACR; /*!< Offset: 0x088 (R/W) Coprocessor Access Control Register */ + uint32_t RESERVED1[129U]; + __IOM uint32_t SFCR; /*!< Offset: 0x290 (R/W) Security Features Control Register */ +} SCB_Type; + +/* SCB CPUID Register Definitions */ +#define SCB_CPUID_IMPLEMENTER_Pos 24U /*!< SCB CPUID: IMPLEMENTER Position */ +#define SCB_CPUID_IMPLEMENTER_Msk (0xFFUL << SCB_CPUID_IMPLEMENTER_Pos) /*!< SCB CPUID: IMPLEMENTER Mask */ + +#define SCB_CPUID_VARIANT_Pos 20U /*!< SCB CPUID: VARIANT Position */ +#define SCB_CPUID_VARIANT_Msk (0xFUL << SCB_CPUID_VARIANT_Pos) /*!< SCB CPUID: VARIANT Mask */ + +#define SCB_CPUID_ARCHITECTURE_Pos 16U /*!< SCB CPUID: ARCHITECTURE Position */ +#define SCB_CPUID_ARCHITECTURE_Msk (0xFUL << SCB_CPUID_ARCHITECTURE_Pos) /*!< SCB CPUID: ARCHITECTURE Mask */ + +#define SCB_CPUID_PARTNO_Pos 4U /*!< SCB CPUID: PARTNO Position */ +#define SCB_CPUID_PARTNO_Msk (0xFFFUL << SCB_CPUID_PARTNO_Pos) /*!< SCB CPUID: PARTNO Mask */ + +#define SCB_CPUID_REVISION_Pos 0U /*!< SCB CPUID: REVISION Position */ +#define SCB_CPUID_REVISION_Msk (0xFUL /*<< SCB_CPUID_REVISION_Pos*/) /*!< SCB CPUID: REVISION Mask */ + +/* SCB Interrupt Control State Register Definitions */ +#define SCB_ICSR_NMIPENDSET_Pos 31U /*!< SCB ICSR: NMIPENDSET Position */ +#define SCB_ICSR_NMIPENDSET_Msk (1UL << SCB_ICSR_NMIPENDSET_Pos) /*!< SCB ICSR: NMIPENDSET Mask */ + +#define SCB_ICSR_PENDSVSET_Pos 28U /*!< SCB ICSR: PENDSVSET Position */ +#define SCB_ICSR_PENDSVSET_Msk (1UL << SCB_ICSR_PENDSVSET_Pos) /*!< SCB ICSR: PENDSVSET Mask */ + +#define SCB_ICSR_PENDSVCLR_Pos 27U /*!< SCB ICSR: PENDSVCLR Position */ +#define SCB_ICSR_PENDSVCLR_Msk (1UL << SCB_ICSR_PENDSVCLR_Pos) /*!< SCB ICSR: PENDSVCLR Mask */ + +#define SCB_ICSR_PENDSTSET_Pos 26U /*!< SCB ICSR: PENDSTSET Position */ +#define SCB_ICSR_PENDSTSET_Msk (1UL << SCB_ICSR_PENDSTSET_Pos) /*!< SCB ICSR: PENDSTSET Mask */ + +#define SCB_ICSR_PENDSTCLR_Pos 25U /*!< SCB ICSR: PENDSTCLR Position */ +#define SCB_ICSR_PENDSTCLR_Msk (1UL << SCB_ICSR_PENDSTCLR_Pos) /*!< SCB ICSR: PENDSTCLR Mask */ + +#define SCB_ICSR_ISRPREEMPT_Pos 23U /*!< SCB ICSR: ISRPREEMPT Position */ +#define SCB_ICSR_ISRPREEMPT_Msk (1UL << SCB_ICSR_ISRPREEMPT_Pos) /*!< SCB ICSR: ISRPREEMPT Mask */ + +#define SCB_ICSR_ISRPENDING_Pos 22U /*!< SCB ICSR: ISRPENDING Position */ +#define SCB_ICSR_ISRPENDING_Msk (1UL << SCB_ICSR_ISRPENDING_Pos) /*!< SCB ICSR: ISRPENDING Mask */ + +#define SCB_ICSR_VECTPENDING_Pos 12U /*!< SCB ICSR: VECTPENDING Position */ +#define SCB_ICSR_VECTPENDING_Msk (0x1FFUL << SCB_ICSR_VECTPENDING_Pos) /*!< SCB ICSR: VECTPENDING Mask */ + +#define SCB_ICSR_RETTOBASE_Pos 11U /*!< SCB ICSR: RETTOBASE Position */ +#define SCB_ICSR_RETTOBASE_Msk (1UL << SCB_ICSR_RETTOBASE_Pos) /*!< SCB ICSR: RETTOBASE Mask */ + +#define SCB_ICSR_VECTACTIVE_Pos 0U /*!< SCB ICSR: VECTACTIVE Position */ +#define SCB_ICSR_VECTACTIVE_Msk (0x1FFUL /*<< SCB_ICSR_VECTACTIVE_Pos*/) /*!< SCB ICSR: VECTACTIVE Mask */ + +/* SCB Vector Table Offset Register Definitions */ +#define SCB_VTOR_TBLBASE_Pos 29U /*!< SCB VTOR: TBLBASE Position */ +#define SCB_VTOR_TBLBASE_Msk (1UL << SCB_VTOR_TBLBASE_Pos) /*!< SCB VTOR: TBLBASE Mask */ + +#define SCB_VTOR_TBLOFF_Pos 7U /*!< SCB VTOR: TBLOFF Position */ +#define SCB_VTOR_TBLOFF_Msk (0x3FFFFFUL << SCB_VTOR_TBLOFF_Pos) /*!< SCB VTOR: TBLOFF Mask */ + +/* SCB Application Interrupt and Reset Control Register Definitions */ +#define SCB_AIRCR_VECTKEY_Pos 16U /*!< SCB AIRCR: VECTKEY Position */ +#define SCB_AIRCR_VECTKEY_Msk (0xFFFFUL << SCB_AIRCR_VECTKEY_Pos) /*!< SCB AIRCR: VECTKEY Mask */ + +#define SCB_AIRCR_VECTKEYSTAT_Pos 16U /*!< SCB AIRCR: VECTKEYSTAT Position */ +#define SCB_AIRCR_VECTKEYSTAT_Msk (0xFFFFUL << SCB_AIRCR_VECTKEYSTAT_Pos) /*!< SCB AIRCR: VECTKEYSTAT Mask */ + +#define SCB_AIRCR_ENDIANESS_Pos 15U /*!< SCB AIRCR: ENDIANESS Position */ +#define SCB_AIRCR_ENDIANESS_Msk (1UL << SCB_AIRCR_ENDIANESS_Pos) /*!< SCB AIRCR: ENDIANESS Mask */ + +#define SCB_AIRCR_PRIGROUP_Pos 8U /*!< SCB AIRCR: PRIGROUP Position */ +#define SCB_AIRCR_PRIGROUP_Msk (7UL << SCB_AIRCR_PRIGROUP_Pos) /*!< SCB AIRCR: PRIGROUP Mask */ + +#define SCB_AIRCR_SYSRESETREQ_Pos 2U /*!< SCB AIRCR: SYSRESETREQ Position */ +#define SCB_AIRCR_SYSRESETREQ_Msk (1UL << SCB_AIRCR_SYSRESETREQ_Pos) /*!< SCB AIRCR: SYSRESETREQ Mask */ + +#define SCB_AIRCR_VECTCLRACTIVE_Pos 1U /*!< SCB AIRCR: VECTCLRACTIVE Position */ +#define SCB_AIRCR_VECTCLRACTIVE_Msk (1UL << SCB_AIRCR_VECTCLRACTIVE_Pos) /*!< SCB AIRCR: VECTCLRACTIVE Mask */ + +#define SCB_AIRCR_VECTRESET_Pos 0U /*!< SCB AIRCR: VECTRESET Position */ +#define SCB_AIRCR_VECTRESET_Msk (1UL /*<< SCB_AIRCR_VECTRESET_Pos*/) /*!< SCB AIRCR: VECTRESET Mask */ + +/* SCB System Control Register Definitions */ +#define SCB_SCR_SEVONPEND_Pos 4U /*!< SCB SCR: SEVONPEND Position */ +#define SCB_SCR_SEVONPEND_Msk (1UL << SCB_SCR_SEVONPEND_Pos) /*!< SCB SCR: SEVONPEND Mask */ + +#define SCB_SCR_SLEEPDEEP_Pos 2U /*!< SCB SCR: SLEEPDEEP Position */ +#define SCB_SCR_SLEEPDEEP_Msk (1UL << SCB_SCR_SLEEPDEEP_Pos) /*!< SCB SCR: SLEEPDEEP Mask */ + +#define SCB_SCR_SLEEPONEXIT_Pos 1U /*!< SCB SCR: SLEEPONEXIT Position */ +#define SCB_SCR_SLEEPONEXIT_Msk (1UL << SCB_SCR_SLEEPONEXIT_Pos) /*!< SCB SCR: SLEEPONEXIT Mask */ + +/* SCB Configuration Control Register Definitions */ +#define SCB_CCR_STKALIGN_Pos 9U /*!< SCB CCR: STKALIGN Position */ +#define SCB_CCR_STKALIGN_Msk (1UL << SCB_CCR_STKALIGN_Pos) /*!< SCB CCR: STKALIGN Mask */ + +#define SCB_CCR_BFHFNMIGN_Pos 8U /*!< SCB CCR: BFHFNMIGN Position */ +#define SCB_CCR_BFHFNMIGN_Msk (1UL << SCB_CCR_BFHFNMIGN_Pos) /*!< SCB CCR: BFHFNMIGN Mask */ + +#define SCB_CCR_DIV_0_TRP_Pos 4U /*!< SCB CCR: DIV_0_TRP Position */ +#define SCB_CCR_DIV_0_TRP_Msk (1UL << SCB_CCR_DIV_0_TRP_Pos) /*!< SCB CCR: DIV_0_TRP Mask */ + +#define SCB_CCR_UNALIGN_TRP_Pos 3U /*!< SCB CCR: UNALIGN_TRP Position */ +#define SCB_CCR_UNALIGN_TRP_Msk (1UL << SCB_CCR_UNALIGN_TRP_Pos) /*!< SCB CCR: UNALIGN_TRP Mask */ + +#define SCB_CCR_USERSETMPEND_Pos 1U /*!< SCB CCR: USERSETMPEND Position */ +#define SCB_CCR_USERSETMPEND_Msk (1UL << SCB_CCR_USERSETMPEND_Pos) /*!< SCB CCR: USERSETMPEND Mask */ + +#define SCB_CCR_NONBASETHRDENA_Pos 0U /*!< SCB CCR: NONBASETHRDENA Position */ +#define SCB_CCR_NONBASETHRDENA_Msk (1UL /*<< SCB_CCR_NONBASETHRDENA_Pos*/) /*!< SCB CCR: NONBASETHRDENA Mask */ + +/* SCB System Handler Control and State Register Definitions */ +#define SCB_SHCSR_USGFAULTENA_Pos 18U /*!< SCB SHCSR: USGFAULTENA Position */ +#define SCB_SHCSR_USGFAULTENA_Msk (1UL << SCB_SHCSR_USGFAULTENA_Pos) /*!< SCB SHCSR: USGFAULTENA Mask */ + +#define SCB_SHCSR_BUSFAULTENA_Pos 17U /*!< SCB SHCSR: BUSFAULTENA Position */ +#define SCB_SHCSR_BUSFAULTENA_Msk (1UL << SCB_SHCSR_BUSFAULTENA_Pos) /*!< SCB SHCSR: BUSFAULTENA Mask */ + +#define SCB_SHCSR_MEMFAULTENA_Pos 16U /*!< SCB SHCSR: MEMFAULTENA Position */ +#define SCB_SHCSR_MEMFAULTENA_Msk (1UL << SCB_SHCSR_MEMFAULTENA_Pos) /*!< SCB SHCSR: MEMFAULTENA Mask */ + +#define SCB_SHCSR_SVCALLPENDED_Pos 15U /*!< SCB SHCSR: SVCALLPENDED Position */ +#define SCB_SHCSR_SVCALLPENDED_Msk (1UL << SCB_SHCSR_SVCALLPENDED_Pos) /*!< SCB SHCSR: SVCALLPENDED Mask */ + +#define SCB_SHCSR_BUSFAULTPENDED_Pos 14U /*!< SCB SHCSR: BUSFAULTPENDED Position */ +#define SCB_SHCSR_BUSFAULTPENDED_Msk (1UL << SCB_SHCSR_BUSFAULTPENDED_Pos) /*!< SCB SHCSR: BUSFAULTPENDED Mask */ + +#define SCB_SHCSR_MEMFAULTPENDED_Pos 13U /*!< SCB SHCSR: MEMFAULTPENDED Position */ +#define SCB_SHCSR_MEMFAULTPENDED_Msk (1UL << SCB_SHCSR_MEMFAULTPENDED_Pos) /*!< SCB SHCSR: MEMFAULTPENDED Mask */ + +#define SCB_SHCSR_USGFAULTPENDED_Pos 12U /*!< SCB SHCSR: USGFAULTPENDED Position */ +#define SCB_SHCSR_USGFAULTPENDED_Msk (1UL << SCB_SHCSR_USGFAULTPENDED_Pos) /*!< SCB SHCSR: USGFAULTPENDED Mask */ + +#define SCB_SHCSR_SYSTICKACT_Pos 11U /*!< SCB SHCSR: SYSTICKACT Position */ +#define SCB_SHCSR_SYSTICKACT_Msk (1UL << SCB_SHCSR_SYSTICKACT_Pos) /*!< SCB SHCSR: SYSTICKACT Mask */ + +#define SCB_SHCSR_PENDSVACT_Pos 10U /*!< SCB SHCSR: PENDSVACT Position */ +#define SCB_SHCSR_PENDSVACT_Msk (1UL << SCB_SHCSR_PENDSVACT_Pos) /*!< SCB SHCSR: PENDSVACT Mask */ + +#define SCB_SHCSR_MONITORACT_Pos 8U /*!< SCB SHCSR: MONITORACT Position */ +#define SCB_SHCSR_MONITORACT_Msk (1UL << SCB_SHCSR_MONITORACT_Pos) /*!< SCB SHCSR: MONITORACT Mask */ + +#define SCB_SHCSR_SVCALLACT_Pos 7U /*!< SCB SHCSR: SVCALLACT Position */ +#define SCB_SHCSR_SVCALLACT_Msk (1UL << SCB_SHCSR_SVCALLACT_Pos) /*!< SCB SHCSR: SVCALLACT Mask */ + +#define SCB_SHCSR_USGFAULTACT_Pos 3U /*!< SCB SHCSR: USGFAULTACT Position */ +#define SCB_SHCSR_USGFAULTACT_Msk (1UL << SCB_SHCSR_USGFAULTACT_Pos) /*!< SCB SHCSR: USGFAULTACT Mask */ + +#define SCB_SHCSR_BUSFAULTACT_Pos 1U /*!< SCB SHCSR: BUSFAULTACT Position */ +#define SCB_SHCSR_BUSFAULTACT_Msk (1UL << SCB_SHCSR_BUSFAULTACT_Pos) /*!< SCB SHCSR: BUSFAULTACT Mask */ + +#define SCB_SHCSR_MEMFAULTACT_Pos 0U /*!< SCB SHCSR: MEMFAULTACT Position */ +#define SCB_SHCSR_MEMFAULTACT_Msk (1UL /*<< SCB_SHCSR_MEMFAULTACT_Pos*/) /*!< SCB SHCSR: MEMFAULTACT Mask */ + +/* SCB Configurable Fault Status Register Definitions */ +#define SCB_CFSR_USGFAULTSR_Pos 16U /*!< SCB CFSR: Usage Fault Status Register Position */ +#define SCB_CFSR_USGFAULTSR_Msk (0xFFFFUL << SCB_CFSR_USGFAULTSR_Pos) /*!< SCB CFSR: Usage Fault Status Register Mask */ + +#define SCB_CFSR_BUSFAULTSR_Pos 8U /*!< SCB CFSR: Bus Fault Status Register Position */ +#define SCB_CFSR_BUSFAULTSR_Msk (0xFFUL << SCB_CFSR_BUSFAULTSR_Pos) /*!< SCB CFSR: Bus Fault Status Register Mask */ + +#define SCB_CFSR_MEMFAULTSR_Pos 0U /*!< SCB CFSR: Memory Manage Fault Status Register Position */ +#define SCB_CFSR_MEMFAULTSR_Msk (0xFFUL /*<< SCB_CFSR_MEMFAULTSR_Pos*/) /*!< SCB CFSR: Memory Manage Fault Status Register Mask */ + +/* MemManage Fault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_MMARVALID_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 7U) /*!< SCB CFSR (MMFSR): MMARVALID Position */ +#define SCB_CFSR_MMARVALID_Msk (1UL << SCB_CFSR_MMARVALID_Pos) /*!< SCB CFSR (MMFSR): MMARVALID Mask */ + +#define SCB_CFSR_MSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 4U) /*!< SCB CFSR (MMFSR): MSTKERR Position */ +#define SCB_CFSR_MSTKERR_Msk (1UL << SCB_CFSR_MSTKERR_Pos) /*!< SCB CFSR (MMFSR): MSTKERR Mask */ + +#define SCB_CFSR_MUNSTKERR_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 3U) /*!< SCB CFSR (MMFSR): MUNSTKERR Position */ +#define SCB_CFSR_MUNSTKERR_Msk (1UL << SCB_CFSR_MUNSTKERR_Pos) /*!< SCB CFSR (MMFSR): MUNSTKERR Mask */ + +#define SCB_CFSR_DACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 1U) /*!< SCB CFSR (MMFSR): DACCVIOL Position */ +#define SCB_CFSR_DACCVIOL_Msk (1UL << SCB_CFSR_DACCVIOL_Pos) /*!< SCB CFSR (MMFSR): DACCVIOL Mask */ + +#define SCB_CFSR_IACCVIOL_Pos (SCB_SHCSR_MEMFAULTACT_Pos + 0U) /*!< SCB CFSR (MMFSR): IACCVIOL Position */ +#define SCB_CFSR_IACCVIOL_Msk (1UL /*<< SCB_CFSR_IACCVIOL_Pos*/) /*!< SCB CFSR (MMFSR): IACCVIOL Mask */ + +/* BusFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_BFARVALID_Pos (SCB_CFSR_BUSFAULTSR_Pos + 7U) /*!< SCB CFSR (BFSR): BFARVALID Position */ +#define SCB_CFSR_BFARVALID_Msk (1UL << SCB_CFSR_BFARVALID_Pos) /*!< SCB CFSR (BFSR): BFARVALID Mask */ + +#define SCB_CFSR_STKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 4U) /*!< SCB CFSR (BFSR): STKERR Position */ +#define SCB_CFSR_STKERR_Msk (1UL << SCB_CFSR_STKERR_Pos) /*!< SCB CFSR (BFSR): STKERR Mask */ + +#define SCB_CFSR_UNSTKERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 3U) /*!< SCB CFSR (BFSR): UNSTKERR Position */ +#define SCB_CFSR_UNSTKERR_Msk (1UL << SCB_CFSR_UNSTKERR_Pos) /*!< SCB CFSR (BFSR): UNSTKERR Mask */ + +#define SCB_CFSR_IMPRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 2U) /*!< SCB CFSR (BFSR): IMPRECISERR Position */ +#define SCB_CFSR_IMPRECISERR_Msk (1UL << SCB_CFSR_IMPRECISERR_Pos) /*!< SCB CFSR (BFSR): IMPRECISERR Mask */ + +#define SCB_CFSR_PRECISERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 1U) /*!< SCB CFSR (BFSR): PRECISERR Position */ +#define SCB_CFSR_PRECISERR_Msk (1UL << SCB_CFSR_PRECISERR_Pos) /*!< SCB CFSR (BFSR): PRECISERR Mask */ + +#define SCB_CFSR_IBUSERR_Pos (SCB_CFSR_BUSFAULTSR_Pos + 0U) /*!< SCB CFSR (BFSR): IBUSERR Position */ +#define SCB_CFSR_IBUSERR_Msk (1UL << SCB_CFSR_IBUSERR_Pos) /*!< SCB CFSR (BFSR): IBUSERR Mask */ + +/* UsageFault Status Register (part of SCB Configurable Fault Status Register) */ +#define SCB_CFSR_DIVBYZERO_Pos (SCB_CFSR_USGFAULTSR_Pos + 9U) /*!< SCB CFSR (UFSR): DIVBYZERO Position */ +#define SCB_CFSR_DIVBYZERO_Msk (1UL << SCB_CFSR_DIVBYZERO_Pos) /*!< SCB CFSR (UFSR): DIVBYZERO Mask */ + +#define SCB_CFSR_UNALIGNED_Pos (SCB_CFSR_USGFAULTSR_Pos + 8U) /*!< SCB CFSR (UFSR): UNALIGNED Position */ +#define SCB_CFSR_UNALIGNED_Msk (1UL << SCB_CFSR_UNALIGNED_Pos) /*!< SCB CFSR (UFSR): UNALIGNED Mask */ + +#define SCB_CFSR_NOCP_Pos (SCB_CFSR_USGFAULTSR_Pos + 3U) /*!< SCB CFSR (UFSR): NOCP Position */ +#define SCB_CFSR_NOCP_Msk (1UL << SCB_CFSR_NOCP_Pos) /*!< SCB CFSR (UFSR): NOCP Mask */ + +#define SCB_CFSR_INVPC_Pos (SCB_CFSR_USGFAULTSR_Pos + 2U) /*!< SCB CFSR (UFSR): INVPC Position */ +#define SCB_CFSR_INVPC_Msk (1UL << SCB_CFSR_INVPC_Pos) /*!< SCB CFSR (UFSR): INVPC Mask */ + +#define SCB_CFSR_INVSTATE_Pos (SCB_CFSR_USGFAULTSR_Pos + 1U) /*!< SCB CFSR (UFSR): INVSTATE Position */ +#define SCB_CFSR_INVSTATE_Msk (1UL << SCB_CFSR_INVSTATE_Pos) /*!< SCB CFSR (UFSR): INVSTATE Mask */ + +#define SCB_CFSR_UNDEFINSTR_Pos (SCB_CFSR_USGFAULTSR_Pos + 0U) /*!< SCB CFSR (UFSR): UNDEFINSTR Position */ +#define SCB_CFSR_UNDEFINSTR_Msk (1UL << SCB_CFSR_UNDEFINSTR_Pos) /*!< SCB CFSR (UFSR): UNDEFINSTR Mask */ + +/* SCB Hard Fault Status Register Definitions */ +#define SCB_HFSR_DEBUGEVT_Pos 31U /*!< SCB HFSR: DEBUGEVT Position */ +#define SCB_HFSR_DEBUGEVT_Msk (1UL << SCB_HFSR_DEBUGEVT_Pos) /*!< SCB HFSR: DEBUGEVT Mask */ + +#define SCB_HFSR_FORCED_Pos 30U /*!< SCB HFSR: FORCED Position */ +#define SCB_HFSR_FORCED_Msk (1UL << SCB_HFSR_FORCED_Pos) /*!< SCB HFSR: FORCED Mask */ + +#define SCB_HFSR_VECTTBL_Pos 1U /*!< SCB HFSR: VECTTBL Position */ +#define SCB_HFSR_VECTTBL_Msk (1UL << SCB_HFSR_VECTTBL_Pos) /*!< SCB HFSR: VECTTBL Mask */ + +/* SCB Debug Fault Status Register Definitions */ +#define SCB_DFSR_EXTERNAL_Pos 4U /*!< SCB DFSR: EXTERNAL Position */ +#define SCB_DFSR_EXTERNAL_Msk (1UL << SCB_DFSR_EXTERNAL_Pos) /*!< SCB DFSR: EXTERNAL Mask */ + +#define SCB_DFSR_VCATCH_Pos 3U /*!< SCB DFSR: VCATCH Position */ +#define SCB_DFSR_VCATCH_Msk (1UL << SCB_DFSR_VCATCH_Pos) /*!< SCB DFSR: VCATCH Mask */ + +#define SCB_DFSR_DWTTRAP_Pos 2U /*!< SCB DFSR: DWTTRAP Position */ +#define SCB_DFSR_DWTTRAP_Msk (1UL << SCB_DFSR_DWTTRAP_Pos) /*!< SCB DFSR: DWTTRAP Mask */ + +#define SCB_DFSR_BKPT_Pos 1U /*!< SCB DFSR: BKPT Position */ +#define SCB_DFSR_BKPT_Msk (1UL << SCB_DFSR_BKPT_Pos) /*!< SCB DFSR: BKPT Mask */ + +#define SCB_DFSR_HALTED_Pos 0U /*!< SCB DFSR: HALTED Position */ +#define SCB_DFSR_HALTED_Msk (1UL /*<< SCB_DFSR_HALTED_Pos*/) /*!< SCB DFSR: HALTED Mask */ + +/*@} end of group CMSIS_SCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SCnSCB System Controls not in SCB (SCnSCB) + \brief Type definitions for the System Control and ID Register not in the SCB + @{ + */ + +/** + \brief Structure type to access the System Control and ID Register not in the SCB. + */ +typedef struct +{ + uint32_t RESERVED0[1U]; + __IM uint32_t ICTR; /*!< Offset: 0x004 (R/ ) Interrupt Controller Type Register */ + uint32_t RESERVED1[1U]; +} SCnSCB_Type; + +/* Interrupt Controller Type Register Definitions */ +#define SCnSCB_ICTR_INTLINESNUM_Pos 0U /*!< ICTR: INTLINESNUM Position */ +#define SCnSCB_ICTR_INTLINESNUM_Msk (0xFUL /*<< SCnSCB_ICTR_INTLINESNUM_Pos*/) /*!< ICTR: INTLINESNUM Mask */ + +/*@} end of group CMSIS_SCnotSCB */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_SysTick System Tick Timer (SysTick) + \brief Type definitions for the System Timer Registers. + @{ + */ + +/** + \brief Structure type to access the System Timer (SysTick). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) SysTick Control and Status Register */ + __IOM uint32_t LOAD; /*!< Offset: 0x004 (R/W) SysTick Reload Value Register */ + __IOM uint32_t VAL; /*!< Offset: 0x008 (R/W) SysTick Current Value Register */ + __IM uint32_t CALIB; /*!< Offset: 0x00C (R/ ) SysTick Calibration Register */ +} SysTick_Type; + +/* SysTick Control / Status Register Definitions */ +#define SysTick_CTRL_COUNTFLAG_Pos 16U /*!< SysTick CTRL: COUNTFLAG Position */ +#define SysTick_CTRL_COUNTFLAG_Msk (1UL << SysTick_CTRL_COUNTFLAG_Pos) /*!< SysTick CTRL: COUNTFLAG Mask */ + +#define SysTick_CTRL_CLKSOURCE_Pos 2U /*!< SysTick CTRL: CLKSOURCE Position */ +#define SysTick_CTRL_CLKSOURCE_Msk (1UL << SysTick_CTRL_CLKSOURCE_Pos) /*!< SysTick CTRL: CLKSOURCE Mask */ + +#define SysTick_CTRL_TICKINT_Pos 1U /*!< SysTick CTRL: TICKINT Position */ +#define SysTick_CTRL_TICKINT_Msk (1UL << SysTick_CTRL_TICKINT_Pos) /*!< SysTick CTRL: TICKINT Mask */ + +#define SysTick_CTRL_ENABLE_Pos 0U /*!< SysTick CTRL: ENABLE Position */ +#define SysTick_CTRL_ENABLE_Msk (1UL /*<< SysTick_CTRL_ENABLE_Pos*/) /*!< SysTick CTRL: ENABLE Mask */ + +/* SysTick Reload Register Definitions */ +#define SysTick_LOAD_RELOAD_Pos 0U /*!< SysTick LOAD: RELOAD Position */ +#define SysTick_LOAD_RELOAD_Msk (0xFFFFFFUL /*<< SysTick_LOAD_RELOAD_Pos*/) /*!< SysTick LOAD: RELOAD Mask */ + +/* SysTick Current Register Definitions */ +#define SysTick_VAL_CURRENT_Pos 0U /*!< SysTick VAL: CURRENT Position */ +#define SysTick_VAL_CURRENT_Msk (0xFFFFFFUL /*<< SysTick_VAL_CURRENT_Pos*/) /*!< SysTick VAL: CURRENT Mask */ + +/* SysTick Calibration Register Definitions */ +#define SysTick_CALIB_NOREF_Pos 31U /*!< SysTick CALIB: NOREF Position */ +#define SysTick_CALIB_NOREF_Msk (1UL << SysTick_CALIB_NOREF_Pos) /*!< SysTick CALIB: NOREF Mask */ + +#define SysTick_CALIB_SKEW_Pos 30U /*!< SysTick CALIB: SKEW Position */ +#define SysTick_CALIB_SKEW_Msk (1UL << SysTick_CALIB_SKEW_Pos) /*!< SysTick CALIB: SKEW Mask */ + +#define SysTick_CALIB_TENMS_Pos 0U /*!< SysTick CALIB: TENMS Position */ +#define SysTick_CALIB_TENMS_Msk (0xFFFFFFUL /*<< SysTick_CALIB_TENMS_Pos*/) /*!< SysTick CALIB: TENMS Mask */ + +/*@} end of group CMSIS_SysTick */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_ITM Instrumentation Trace Macrocell (ITM) + \brief Type definitions for the Instrumentation Trace Macrocell (ITM) + @{ + */ + +/** + \brief Structure type to access the Instrumentation Trace Macrocell Register (ITM). + */ +typedef struct +{ + __OM union + { + __OM uint8_t u8; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 8-bit */ + __OM uint16_t u16; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 16-bit */ + __OM uint32_t u32; /*!< Offset: 0x000 ( /W) ITM Stimulus Port 32-bit */ + } PORT [32U]; /*!< Offset: 0x000 ( /W) ITM Stimulus Port Registers */ + uint32_t RESERVED0[864U]; + __IOM uint32_t TER; /*!< Offset: 0xE00 (R/W) ITM Trace Enable Register */ + uint32_t RESERVED1[15U]; + __IOM uint32_t TPR; /*!< Offset: 0xE40 (R/W) ITM Trace Privilege Register */ + uint32_t RESERVED2[15U]; + __IOM uint32_t TCR; /*!< Offset: 0xE80 (R/W) ITM Trace Control Register */ + uint32_t RESERVED3[29U]; + __OM uint32_t IWR; /*!< Offset: 0xEF8 ( /W) ITM Integration Write Register */ + __IM uint32_t IRR; /*!< Offset: 0xEFC (R/ ) ITM Integration Read Register */ + __IOM uint32_t IMCR; /*!< Offset: 0xF00 (R/W) ITM Integration Mode Control Register */ + uint32_t RESERVED4[43U]; + __OM uint32_t LAR; /*!< Offset: 0xFB0 ( /W) ITM Lock Access Register */ + __IM uint32_t LSR; /*!< Offset: 0xFB4 (R/ ) ITM Lock Status Register */ + uint32_t RESERVED5[6U]; + __IM uint32_t PID4; /*!< Offset: 0xFD0 (R/ ) ITM Peripheral Identification Register #4 */ + __IM uint32_t PID5; /*!< Offset: 0xFD4 (R/ ) ITM Peripheral Identification Register #5 */ + __IM uint32_t PID6; /*!< Offset: 0xFD8 (R/ ) ITM Peripheral Identification Register #6 */ + __IM uint32_t PID7; /*!< Offset: 0xFDC (R/ ) ITM Peripheral Identification Register #7 */ + __IM uint32_t PID0; /*!< Offset: 0xFE0 (R/ ) ITM Peripheral Identification Register #0 */ + __IM uint32_t PID1; /*!< Offset: 0xFE4 (R/ ) ITM Peripheral Identification Register #1 */ + __IM uint32_t PID2; /*!< Offset: 0xFE8 (R/ ) ITM Peripheral Identification Register #2 */ + __IM uint32_t PID3; /*!< Offset: 0xFEC (R/ ) ITM Peripheral Identification Register #3 */ + __IM uint32_t CID0; /*!< Offset: 0xFF0 (R/ ) ITM Component Identification Register #0 */ + __IM uint32_t CID1; /*!< Offset: 0xFF4 (R/ ) ITM Component Identification Register #1 */ + __IM uint32_t CID2; /*!< Offset: 0xFF8 (R/ ) ITM Component Identification Register #2 */ + __IM uint32_t CID3; /*!< Offset: 0xFFC (R/ ) ITM Component Identification Register #3 */ +} ITM_Type; + +/* ITM Trace Privilege Register Definitions */ +#define ITM_TPR_PRIVMASK_Pos 0U /*!< ITM TPR: PRIVMASK Position */ +#define ITM_TPR_PRIVMASK_Msk (0xFUL /*<< ITM_TPR_PRIVMASK_Pos*/) /*!< ITM TPR: PRIVMASK Mask */ + +/* ITM Trace Control Register Definitions */ +#define ITM_TCR_BUSY_Pos 23U /*!< ITM TCR: BUSY Position */ +#define ITM_TCR_BUSY_Msk (1UL << ITM_TCR_BUSY_Pos) /*!< ITM TCR: BUSY Mask */ + +#define ITM_TCR_TraceBusID_Pos 16U /*!< ITM TCR: ATBID Position */ +#define ITM_TCR_TraceBusID_Msk (0x7FUL << ITM_TCR_TraceBusID_Pos) /*!< ITM TCR: ATBID Mask */ + +#define ITM_TCR_GTSFREQ_Pos 10U /*!< ITM TCR: Global timestamp frequency Position */ +#define ITM_TCR_GTSFREQ_Msk (3UL << ITM_TCR_GTSFREQ_Pos) /*!< ITM TCR: Global timestamp frequency Mask */ + +#define ITM_TCR_TSPrescale_Pos 8U /*!< ITM TCR: TSPrescale Position */ +#define ITM_TCR_TSPrescale_Msk (3UL << ITM_TCR_TSPrescale_Pos) /*!< ITM TCR: TSPrescale Mask */ + +#define ITM_TCR_SWOENA_Pos 4U /*!< ITM TCR: SWOENA Position */ +#define ITM_TCR_SWOENA_Msk (1UL << ITM_TCR_SWOENA_Pos) /*!< ITM TCR: SWOENA Mask */ + +#define ITM_TCR_DWTENA_Pos 3U /*!< ITM TCR: DWTENA Position */ +#define ITM_TCR_DWTENA_Msk (1UL << ITM_TCR_DWTENA_Pos) /*!< ITM TCR: DWTENA Mask */ + +#define ITM_TCR_SYNCENA_Pos 2U /*!< ITM TCR: SYNCENA Position */ +#define ITM_TCR_SYNCENA_Msk (1UL << ITM_TCR_SYNCENA_Pos) /*!< ITM TCR: SYNCENA Mask */ + +#define ITM_TCR_TSENA_Pos 1U /*!< ITM TCR: TSENA Position */ +#define ITM_TCR_TSENA_Msk (1UL << ITM_TCR_TSENA_Pos) /*!< ITM TCR: TSENA Mask */ + +#define ITM_TCR_ITMENA_Pos 0U /*!< ITM TCR: ITM Enable bit Position */ +#define ITM_TCR_ITMENA_Msk (1UL /*<< ITM_TCR_ITMENA_Pos*/) /*!< ITM TCR: ITM Enable bit Mask */ + +/* ITM Integration Write Register Definitions */ +#define ITM_IWR_ATVALIDM_Pos 0U /*!< ITM IWR: ATVALIDM Position */ +#define ITM_IWR_ATVALIDM_Msk (1UL /*<< ITM_IWR_ATVALIDM_Pos*/) /*!< ITM IWR: ATVALIDM Mask */ + +/* ITM Integration Read Register Definitions */ +#define ITM_IRR_ATREADYM_Pos 0U /*!< ITM IRR: ATREADYM Position */ +#define ITM_IRR_ATREADYM_Msk (1UL /*<< ITM_IRR_ATREADYM_Pos*/) /*!< ITM IRR: ATREADYM Mask */ + +/* ITM Integration Mode Control Register Definitions */ +#define ITM_IMCR_INTEGRATION_Pos 0U /*!< ITM IMCR: INTEGRATION Position */ +#define ITM_IMCR_INTEGRATION_Msk (1UL /*<< ITM_IMCR_INTEGRATION_Pos*/) /*!< ITM IMCR: INTEGRATION Mask */ + +/* ITM Lock Status Register Definitions */ +#define ITM_LSR_ByteAcc_Pos 2U /*!< ITM LSR: ByteAcc Position */ +#define ITM_LSR_ByteAcc_Msk (1UL << ITM_LSR_ByteAcc_Pos) /*!< ITM LSR: ByteAcc Mask */ + +#define ITM_LSR_Access_Pos 1U /*!< ITM LSR: Access Position */ +#define ITM_LSR_Access_Msk (1UL << ITM_LSR_Access_Pos) /*!< ITM LSR: Access Mask */ + +#define ITM_LSR_Present_Pos 0U /*!< ITM LSR: Present Position */ +#define ITM_LSR_Present_Msk (1UL /*<< ITM_LSR_Present_Pos*/) /*!< ITM LSR: Present Mask */ + +/*@}*/ /* end of group CMSIS_ITM */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_DWT Data Watchpoint and Trace (DWT) + \brief Type definitions for the Data Watchpoint and Trace (DWT) + @{ + */ + +/** + \brief Structure type to access the Data Watchpoint and Trace Register (DWT). + */ +typedef struct +{ + __IOM uint32_t CTRL; /*!< Offset: 0x000 (R/W) Control Register */ + __IOM uint32_t CYCCNT; /*!< Offset: 0x004 (R/W) Cycle Count Register */ + __IOM uint32_t CPICNT; /*!< Offset: 0x008 (R/W) CPI Count Register */ + __IOM uint32_t EXCCNT; /*!< Offset: 0x00C (R/W) Exception Overhead Count Register */ + __IOM uint32_t SLEEPCNT; /*!< Offset: 0x010 (R/W) Sleep Count Register */ + __IOM uint32_t LSUCNT; /*!< Offset: 0x014 (R/W) LSU Count Register */ + __IOM uint32_t FOLDCNT; /*!< Offset: 0x018 (R/W) Folded-instruction Count Register */ + __IM uint32_t PCSR; /*!< Offset: 0x01C (R/ ) Program Counter Sample Register */ + __IOM uint32_t COMP0; /*!< Offset: 0x020 (R/W) Comparator Register 0 */ + __IOM uint32_t MASK0; /*!< Offset: 0x024 (R/W) Mask Register 0 */ + __IOM uint32_t FUNCTION0; /*!< Offset: 0x028 (R/W) Function Register 0 */ + uint32_t RESERVED0[1U]; + __IOM uint32_t COMP1; /*!< Offset: 0x030 (R/W) Comparator Register 1 */ + __IOM uint32_t MASK1; /*!< Offset: 0x034 (R/W) Mask Register 1 */ + __IOM uint32_t FUNCTION1; /*!< Offset: 0x038 (R/W) Function Register 1 */ + uint32_t RESERVED1[1U]; + __IOM uint32_t COMP2; /*!< Offset: 0x040 (R/W) Comparator Register 2 */ + __IOM uint32_t MASK2; /*!< Offset: 0x044 (R/W) Mask Register 2 */ + __IOM uint32_t FUNCTION2; /*!< Offset: 0x048 (R/W) Function Register 2 */ + uint32_t RESERVED2[1U]; + __IOM uint32_t COMP3; /*!< Offset: 0x050 (R/W) Comparator Register 3 */ + __IOM uint32_t MASK3; /*!< Offset: 0x054 (R/W) Mask Register 3 */ + __IOM uint32_t FUNCTION3; /*!< Offset: 0x058 (R/W) Function Register 3 */ +} DWT_Type; + +/* DWT Control Register Definitions */ +#define DWT_CTRL_NUMCOMP_Pos 28U /*!< DWT CTRL: NUMCOMP Position */ +#define DWT_CTRL_NUMCOMP_Msk (0xFUL << DWT_CTRL_NUMCOMP_Pos) /*!< DWT CTRL: NUMCOMP Mask */ + +#define DWT_CTRL_NOTRCPKT_Pos 27U /*!< DWT CTRL: NOTRCPKT Position */ +#define DWT_CTRL_NOTRCPKT_Msk (0x1UL << DWT_CTRL_NOTRCPKT_Pos) /*!< DWT CTRL: NOTRCPKT Mask */ + +#define DWT_CTRL_NOEXTTRIG_Pos 26U /*!< DWT CTRL: NOEXTTRIG Position */ +#define DWT_CTRL_NOEXTTRIG_Msk (0x1UL << DWT_CTRL_NOEXTTRIG_Pos) /*!< DWT CTRL: NOEXTTRIG Mask */ + +#define DWT_CTRL_NOCYCCNT_Pos 25U /*!< DWT CTRL: NOCYCCNT Position */ +#define DWT_CTRL_NOCYCCNT_Msk (0x1UL << DWT_CTRL_NOCYCCNT_Pos) /*!< DWT CTRL: NOCYCCNT Mask */ + +#define DWT_CTRL_NOPRFCNT_Pos 24U /*!< DWT CTRL: NOPRFCNT Position */ +#define DWT_CTRL_NOPRFCNT_Msk (0x1UL << DWT_CTRL_NOPRFCNT_Pos) /*!< DWT CTRL: NOPRFCNT Mask */ + +#define DWT_CTRL_CYCEVTENA_Pos 22U /*!< DWT CTRL: CYCEVTENA Position */ +#define DWT_CTRL_CYCEVTENA_Msk (0x1UL << DWT_CTRL_CYCEVTENA_Pos) /*!< DWT CTRL: CYCEVTENA Mask */ + +#define DWT_CTRL_FOLDEVTENA_Pos 21U /*!< DWT CTRL: FOLDEVTENA Position */ +#define DWT_CTRL_FOLDEVTENA_Msk (0x1UL << DWT_CTRL_FOLDEVTENA_Pos) /*!< DWT CTRL: FOLDEVTENA Mask */ + +#define DWT_CTRL_LSUEVTENA_Pos 20U /*!< DWT CTRL: LSUEVTENA Position */ +#define DWT_CTRL_LSUEVTENA_Msk (0x1UL << DWT_CTRL_LSUEVTENA_Pos) /*!< DWT CTRL: LSUEVTENA Mask */ + +#define DWT_CTRL_SLEEPEVTENA_Pos 19U /*!< DWT CTRL: SLEEPEVTENA Position */ +#define DWT_CTRL_SLEEPEVTENA_Msk (0x1UL << DWT_CTRL_SLEEPEVTENA_Pos) /*!< DWT CTRL: SLEEPEVTENA Mask */ + +#define DWT_CTRL_EXCEVTENA_Pos 18U /*!< DWT CTRL: EXCEVTENA Position */ +#define DWT_CTRL_EXCEVTENA_Msk (0x1UL << DWT_CTRL_EXCEVTENA_Pos) /*!< DWT CTRL: EXCEVTENA Mask */ + +#define DWT_CTRL_CPIEVTENA_Pos 17U /*!< DWT CTRL: CPIEVTENA Position */ +#define DWT_CTRL_CPIEVTENA_Msk (0x1UL << DWT_CTRL_CPIEVTENA_Pos) /*!< DWT CTRL: CPIEVTENA Mask */ + +#define DWT_CTRL_EXCTRCENA_Pos 16U /*!< DWT CTRL: EXCTRCENA Position */ +#define DWT_CTRL_EXCTRCENA_Msk (0x1UL << DWT_CTRL_EXCTRCENA_Pos) /*!< DWT CTRL: EXCTRCENA Mask */ + +#define DWT_CTRL_PCSAMPLENA_Pos 12U /*!< DWT CTRL: PCSAMPLENA Position */ +#define DWT_CTRL_PCSAMPLENA_Msk (0x1UL << DWT_CTRL_PCSAMPLENA_Pos) /*!< DWT CTRL: PCSAMPLENA Mask */ + +#define DWT_CTRL_SYNCTAP_Pos 10U /*!< DWT CTRL: SYNCTAP Position */ +#define DWT_CTRL_SYNCTAP_Msk (0x3UL << DWT_CTRL_SYNCTAP_Pos) /*!< DWT CTRL: SYNCTAP Mask */ + +#define DWT_CTRL_CYCTAP_Pos 9U /*!< DWT CTRL: CYCTAP Position */ +#define DWT_CTRL_CYCTAP_Msk (0x1UL << DWT_CTRL_CYCTAP_Pos) /*!< DWT CTRL: CYCTAP Mask */ + +#define DWT_CTRL_POSTINIT_Pos 5U /*!< DWT CTRL: POSTINIT Position */ +#define DWT_CTRL_POSTINIT_Msk (0xFUL << DWT_CTRL_POSTINIT_Pos) /*!< DWT CTRL: POSTINIT Mask */ + +#define DWT_CTRL_POSTPRESET_Pos 1U /*!< DWT CTRL: POSTPRESET Position */ +#define DWT_CTRL_POSTPRESET_Msk (0xFUL << DWT_CTRL_POSTPRESET_Pos) /*!< DWT CTRL: POSTPRESET Mask */ + +#define DWT_CTRL_CYCCNTENA_Pos 0U /*!< DWT CTRL: CYCCNTENA Position */ +#define DWT_CTRL_CYCCNTENA_Msk (0x1UL /*<< DWT_CTRL_CYCCNTENA_Pos*/) /*!< DWT CTRL: CYCCNTENA Mask */ + +/* DWT CPI Count Register Definitions */ +#define DWT_CPICNT_CPICNT_Pos 0U /*!< DWT CPICNT: CPICNT Position */ +#define DWT_CPICNT_CPICNT_Msk (0xFFUL /*<< DWT_CPICNT_CPICNT_Pos*/) /*!< DWT CPICNT: CPICNT Mask */ + +/* DWT Exception Overhead Count Register Definitions */ +#define DWT_EXCCNT_EXCCNT_Pos 0U /*!< DWT EXCCNT: EXCCNT Position */ +#define DWT_EXCCNT_EXCCNT_Msk (0xFFUL /*<< DWT_EXCCNT_EXCCNT_Pos*/) /*!< DWT EXCCNT: EXCCNT Mask */ + +/* DWT Sleep Count Register Definitions */ +#define DWT_SLEEPCNT_SLEEPCNT_Pos 0U /*!< DWT SLEEPCNT: SLEEPCNT Position */ +#define DWT_SLEEPCNT_SLEEPCNT_Msk (0xFFUL /*<< DWT_SLEEPCNT_SLEEPCNT_Pos*/) /*!< DWT SLEEPCNT: SLEEPCNT Mask */ + +/* DWT LSU Count Register Definitions */ +#define DWT_LSUCNT_LSUCNT_Pos 0U /*!< DWT LSUCNT: LSUCNT Position */ +#define DWT_LSUCNT_LSUCNT_Msk (0xFFUL /*<< DWT_LSUCNT_LSUCNT_Pos*/) /*!< DWT LSUCNT: LSUCNT Mask */ + +/* DWT Folded-instruction Count Register Definitions */ +#define DWT_FOLDCNT_FOLDCNT_Pos 0U /*!< DWT FOLDCNT: FOLDCNT Position */ +#define DWT_FOLDCNT_FOLDCNT_Msk (0xFFUL /*<< DWT_FOLDCNT_FOLDCNT_Pos*/) /*!< DWT FOLDCNT: FOLDCNT Mask */ + +/* DWT Comparator Mask Register Definitions */ +#define DWT_MASK_MASK_Pos 0U /*!< DWT MASK: MASK Position */ +#define DWT_MASK_MASK_Msk (0x1FUL /*<< DWT_MASK_MASK_Pos*/) /*!< DWT MASK: MASK Mask */ + +/* DWT Comparator Function Register Definitions */ +#define DWT_FUNCTION_MATCHED_Pos 24U /*!< DWT FUNCTION: MATCHED Position */ +#define DWT_FUNCTION_MATCHED_Msk (0x1UL << DWT_FUNCTION_MATCHED_Pos) /*!< DWT FUNCTION: MATCHED Mask */ + +#define DWT_FUNCTION_DATAVADDR1_Pos 16U /*!< DWT FUNCTION: DATAVADDR1 Position */ +#define DWT_FUNCTION_DATAVADDR1_Msk (0xFUL << DWT_FUNCTION_DATAVADDR1_Pos) /*!< DWT FUNCTION: DATAVADDR1 Mask */ + +#define DWT_FUNCTION_DATAVADDR0_Pos 12U /*!< DWT FUNCTION: DATAVADDR0 Position */ +#define DWT_FUNCTION_DATAVADDR0_Msk (0xFUL << DWT_FUNCTION_DATAVADDR0_Pos) /*!< DWT FUNCTION: DATAVADDR0 Mask */ + +#define DWT_FUNCTION_DATAVSIZE_Pos 10U /*!< DWT FUNCTION: DATAVSIZE Position */ +#define DWT_FUNCTION_DATAVSIZE_Msk (0x3UL << DWT_FUNCTION_DATAVSIZE_Pos) /*!< DWT FUNCTION: DATAVSIZE Mask */ + +#define DWT_FUNCTION_LNK1ENA_Pos 9U /*!< DWT FUNCTION: LNK1ENA Position */ +#define DWT_FUNCTION_LNK1ENA_Msk (0x1UL << DWT_FUNCTION_LNK1ENA_Pos) /*!< DWT FUNCTION: LNK1ENA Mask */ + +#define DWT_FUNCTION_DATAVMATCH_Pos 8U /*!< DWT FUNCTION: DATAVMATCH Position */ +#define DWT_FUNCTION_DATAVMATCH_Msk (0x1UL << DWT_FUNCTION_DATAVMATCH_Pos) /*!< DWT FUNCTION: DATAVMATCH Mask */ + +#define DWT_FUNCTION_CYCMATCH_Pos 7U /*!< DWT FUNCTION: CYCMATCH Position */ +#define DWT_FUNCTION_CYCMATCH_Msk (0x1UL << DWT_FUNCTION_CYCMATCH_Pos) /*!< DWT FUNCTION: CYCMATCH Mask */ + +#define DWT_FUNCTION_EMITRANGE_Pos 5U /*!< DWT FUNCTION: EMITRANGE Position */ +#define DWT_FUNCTION_EMITRANGE_Msk (0x1UL << DWT_FUNCTION_EMITRANGE_Pos) /*!< DWT FUNCTION: EMITRANGE Mask */ + +#define DWT_FUNCTION_FUNCTION_Pos 0U /*!< DWT FUNCTION: FUNCTION Position */ +#define DWT_FUNCTION_FUNCTION_Msk (0xFUL /*<< DWT_FUNCTION_FUNCTION_Pos*/) /*!< DWT FUNCTION: FUNCTION Mask */ + +/*@}*/ /* end of group CMSIS_DWT */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_TPI Trace Port Interface (TPI) + \brief Type definitions for the Trace Port Interface (TPI) + @{ + */ + +/** + \brief Structure type to access the Trace Port Interface Register (TPI). + */ +typedef struct +{ + __IM uint32_t SSPSR; /*!< Offset: 0x000 (R/ ) Supported Parallel Port Size Register */ + __IOM uint32_t CSPSR; /*!< Offset: 0x004 (R/W) Current Parallel Port Size Register */ + uint32_t RESERVED0[2U]; + __IOM uint32_t ACPR; /*!< Offset: 0x010 (R/W) Asynchronous Clock Prescaler Register */ + uint32_t RESERVED1[55U]; + __IOM uint32_t SPPR; /*!< Offset: 0x0F0 (R/W) Selected Pin Protocol Register */ + uint32_t RESERVED2[131U]; + __IM uint32_t FFSR; /*!< Offset: 0x300 (R/ ) Formatter and Flush Status Register */ + __IOM uint32_t FFCR; /*!< Offset: 0x304 (R/W) Formatter and Flush Control Register */ + __IM uint32_t FSCR; /*!< Offset: 0x308 (R/ ) Formatter Synchronization Counter Register */ + uint32_t RESERVED3[759U]; + __IM uint32_t TRIGGER; /*!< Offset: 0xEE8 (R/ ) TRIGGER Register */ + __IM uint32_t FIFO0; /*!< Offset: 0xEEC (R/ ) Integration ETM Data */ + __IM uint32_t ITATBCTR2; /*!< Offset: 0xEF0 (R/ ) ITATBCTR2 */ + uint32_t RESERVED4[1U]; + __IM uint32_t ITATBCTR0; /*!< Offset: 0xEF8 (R/ ) ITATBCTR0 */ + __IM uint32_t FIFO1; /*!< Offset: 0xEFC (R/ ) Integration ITM Data */ + __IOM uint32_t ITCTRL; /*!< Offset: 0xF00 (R/W) Integration Mode Control */ + uint32_t RESERVED5[39U]; + __IOM uint32_t CLAIMSET; /*!< Offset: 0xFA0 (R/W) Claim tag set */ + __IOM uint32_t CLAIMCLR; /*!< Offset: 0xFA4 (R/W) Claim tag clear */ + uint32_t RESERVED7[8U]; + __IM uint32_t DEVID; /*!< Offset: 0xFC8 (R/ ) TPIU_DEVID */ + __IM uint32_t DEVTYPE; /*!< Offset: 0xFCC (R/ ) TPIU_DEVTYPE */ +} TPI_Type; + +/* TPI Asynchronous Clock Prescaler Register Definitions */ +#define TPI_ACPR_PRESCALER_Pos 0U /*!< TPI ACPR: PRESCALER Position */ +#define TPI_ACPR_PRESCALER_Msk (0x1FFFUL /*<< TPI_ACPR_PRESCALER_Pos*/) /*!< TPI ACPR: PRESCALER Mask */ + +/* TPI Selected Pin Protocol Register Definitions */ +#define TPI_SPPR_TXMODE_Pos 0U /*!< TPI SPPR: TXMODE Position */ +#define TPI_SPPR_TXMODE_Msk (0x3UL /*<< TPI_SPPR_TXMODE_Pos*/) /*!< TPI SPPR: TXMODE Mask */ + +/* TPI Formatter and Flush Status Register Definitions */ +#define TPI_FFSR_FtNonStop_Pos 3U /*!< TPI FFSR: FtNonStop Position */ +#define TPI_FFSR_FtNonStop_Msk (0x1UL << TPI_FFSR_FtNonStop_Pos) /*!< TPI FFSR: FtNonStop Mask */ + +#define TPI_FFSR_TCPresent_Pos 2U /*!< TPI FFSR: TCPresent Position */ +#define TPI_FFSR_TCPresent_Msk (0x1UL << TPI_FFSR_TCPresent_Pos) /*!< TPI FFSR: TCPresent Mask */ + +#define TPI_FFSR_FtStopped_Pos 1U /*!< TPI FFSR: FtStopped Position */ +#define TPI_FFSR_FtStopped_Msk (0x1UL << TPI_FFSR_FtStopped_Pos) /*!< TPI FFSR: FtStopped Mask */ + +#define TPI_FFSR_FlInProg_Pos 0U /*!< TPI FFSR: FlInProg Position */ +#define TPI_FFSR_FlInProg_Msk (0x1UL /*<< TPI_FFSR_FlInProg_Pos*/) /*!< TPI FFSR: FlInProg Mask */ + +/* TPI Formatter and Flush Control Register Definitions */ +#define TPI_FFCR_TrigIn_Pos 8U /*!< TPI FFCR: TrigIn Position */ +#define TPI_FFCR_TrigIn_Msk (0x1UL << TPI_FFCR_TrigIn_Pos) /*!< TPI FFCR: TrigIn Mask */ + +#define TPI_FFCR_EnFCont_Pos 1U /*!< TPI FFCR: EnFCont Position */ +#define TPI_FFCR_EnFCont_Msk (0x1UL << TPI_FFCR_EnFCont_Pos) /*!< TPI FFCR: EnFCont Mask */ + +/* TPI TRIGGER Register Definitions */ +#define TPI_TRIGGER_TRIGGER_Pos 0U /*!< TPI TRIGGER: TRIGGER Position */ +#define TPI_TRIGGER_TRIGGER_Msk (0x1UL /*<< TPI_TRIGGER_TRIGGER_Pos*/) /*!< TPI TRIGGER: TRIGGER Mask */ + +/* TPI Integration ETM Data Register Definitions (FIFO0) */ +#define TPI_FIFO0_ITM_ATVALID_Pos 29U /*!< TPI FIFO0: ITM_ATVALID Position */ +#define TPI_FIFO0_ITM_ATVALID_Msk (0x3UL << TPI_FIFO0_ITM_ATVALID_Pos) /*!< TPI FIFO0: ITM_ATVALID Mask */ + +#define TPI_FIFO0_ITM_bytecount_Pos 27U /*!< TPI FIFO0: ITM_bytecount Position */ +#define TPI_FIFO0_ITM_bytecount_Msk (0x3UL << TPI_FIFO0_ITM_bytecount_Pos) /*!< TPI FIFO0: ITM_bytecount Mask */ + +#define TPI_FIFO0_ETM_ATVALID_Pos 26U /*!< TPI FIFO0: ETM_ATVALID Position */ +#define TPI_FIFO0_ETM_ATVALID_Msk (0x3UL << TPI_FIFO0_ETM_ATVALID_Pos) /*!< TPI FIFO0: ETM_ATVALID Mask */ + +#define TPI_FIFO0_ETM_bytecount_Pos 24U /*!< TPI FIFO0: ETM_bytecount Position */ +#define TPI_FIFO0_ETM_bytecount_Msk (0x3UL << TPI_FIFO0_ETM_bytecount_Pos) /*!< TPI FIFO0: ETM_bytecount Mask */ + +#define TPI_FIFO0_ETM2_Pos 16U /*!< TPI FIFO0: ETM2 Position */ +#define TPI_FIFO0_ETM2_Msk (0xFFUL << TPI_FIFO0_ETM2_Pos) /*!< TPI FIFO0: ETM2 Mask */ + +#define TPI_FIFO0_ETM1_Pos 8U /*!< TPI FIFO0: ETM1 Position */ +#define TPI_FIFO0_ETM1_Msk (0xFFUL << TPI_FIFO0_ETM1_Pos) /*!< TPI FIFO0: ETM1 Mask */ + +#define TPI_FIFO0_ETM0_Pos 0U /*!< TPI FIFO0: ETM0 Position */ +#define TPI_FIFO0_ETM0_Msk (0xFFUL /*<< TPI_FIFO0_ETM0_Pos*/) /*!< TPI FIFO0: ETM0 Mask */ + +/* TPI ITATBCTR2 Register Definitions */ +#define TPI_ITATBCTR2_ATREADY2_Pos 0U /*!< TPI ITATBCTR2: ATREADY2 Position */ +#define TPI_ITATBCTR2_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY2_Pos*/) /*!< TPI ITATBCTR2: ATREADY2 Mask */ + +#define TPI_ITATBCTR2_ATREADY1_Pos 0U /*!< TPI ITATBCTR2: ATREADY1 Position */ +#define TPI_ITATBCTR2_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR2_ATREADY1_Pos*/) /*!< TPI ITATBCTR2: ATREADY1 Mask */ + +/* TPI Integration ITM Data Register Definitions (FIFO1) */ +#define TPI_FIFO1_ITM_ATVALID_Pos 29U /*!< TPI FIFO1: ITM_ATVALID Position */ +#define TPI_FIFO1_ITM_ATVALID_Msk (0x3UL << TPI_FIFO1_ITM_ATVALID_Pos) /*!< TPI FIFO1: ITM_ATVALID Mask */ + +#define TPI_FIFO1_ITM_bytecount_Pos 27U /*!< TPI FIFO1: ITM_bytecount Position */ +#define TPI_FIFO1_ITM_bytecount_Msk (0x3UL << TPI_FIFO1_ITM_bytecount_Pos) /*!< TPI FIFO1: ITM_bytecount Mask */ + +#define TPI_FIFO1_ETM_ATVALID_Pos 26U /*!< TPI FIFO1: ETM_ATVALID Position */ +#define TPI_FIFO1_ETM_ATVALID_Msk (0x3UL << TPI_FIFO1_ETM_ATVALID_Pos) /*!< TPI FIFO1: ETM_ATVALID Mask */ + +#define TPI_FIFO1_ETM_bytecount_Pos 24U /*!< TPI FIFO1: ETM_bytecount Position */ +#define TPI_FIFO1_ETM_bytecount_Msk (0x3UL << TPI_FIFO1_ETM_bytecount_Pos) /*!< TPI FIFO1: ETM_bytecount Mask */ + +#define TPI_FIFO1_ITM2_Pos 16U /*!< TPI FIFO1: ITM2 Position */ +#define TPI_FIFO1_ITM2_Msk (0xFFUL << TPI_FIFO1_ITM2_Pos) /*!< TPI FIFO1: ITM2 Mask */ + +#define TPI_FIFO1_ITM1_Pos 8U /*!< TPI FIFO1: ITM1 Position */ +#define TPI_FIFO1_ITM1_Msk (0xFFUL << TPI_FIFO1_ITM1_Pos) /*!< TPI FIFO1: ITM1 Mask */ + +#define TPI_FIFO1_ITM0_Pos 0U /*!< TPI FIFO1: ITM0 Position */ +#define TPI_FIFO1_ITM0_Msk (0xFFUL /*<< TPI_FIFO1_ITM0_Pos*/) /*!< TPI FIFO1: ITM0 Mask */ + +/* TPI ITATBCTR0 Register Definitions */ +#define TPI_ITATBCTR0_ATREADY2_Pos 0U /*!< TPI ITATBCTR0: ATREADY2 Position */ +#define TPI_ITATBCTR0_ATREADY2_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY2_Pos*/) /*!< TPI ITATBCTR0: ATREADY2 Mask */ + +#define TPI_ITATBCTR0_ATREADY1_Pos 0U /*!< TPI ITATBCTR0: ATREADY1 Position */ +#define TPI_ITATBCTR0_ATREADY1_Msk (0x1UL /*<< TPI_ITATBCTR0_ATREADY1_Pos*/) /*!< TPI ITATBCTR0: ATREADY1 Mask */ + +/* TPI Integration Mode Control Register Definitions */ +#define TPI_ITCTRL_Mode_Pos 0U /*!< TPI ITCTRL: Mode Position */ +#define TPI_ITCTRL_Mode_Msk (0x3UL /*<< TPI_ITCTRL_Mode_Pos*/) /*!< TPI ITCTRL: Mode Mask */ + +/* TPI DEVID Register Definitions */ +#define TPI_DEVID_NRZVALID_Pos 11U /*!< TPI DEVID: NRZVALID Position */ +#define TPI_DEVID_NRZVALID_Msk (0x1UL << TPI_DEVID_NRZVALID_Pos) /*!< TPI DEVID: NRZVALID Mask */ + +#define TPI_DEVID_MANCVALID_Pos 10U /*!< TPI DEVID: MANCVALID Position */ +#define TPI_DEVID_MANCVALID_Msk (0x1UL << TPI_DEVID_MANCVALID_Pos) /*!< TPI DEVID: MANCVALID Mask */ + +#define TPI_DEVID_PTINVALID_Pos 9U /*!< TPI DEVID: PTINVALID Position */ +#define TPI_DEVID_PTINVALID_Msk (0x1UL << TPI_DEVID_PTINVALID_Pos) /*!< TPI DEVID: PTINVALID Mask */ + +#define TPI_DEVID_MinBufSz_Pos 6U /*!< TPI DEVID: MinBufSz Position */ +#define TPI_DEVID_MinBufSz_Msk (0x7UL << TPI_DEVID_MinBufSz_Pos) /*!< TPI DEVID: MinBufSz Mask */ + +#define TPI_DEVID_AsynClkIn_Pos 5U /*!< TPI DEVID: AsynClkIn Position */ +#define TPI_DEVID_AsynClkIn_Msk (0x1UL << TPI_DEVID_AsynClkIn_Pos) /*!< TPI DEVID: AsynClkIn Mask */ + +#define TPI_DEVID_NrTraceInput_Pos 0U /*!< TPI DEVID: NrTraceInput Position */ +#define TPI_DEVID_NrTraceInput_Msk (0x1FUL /*<< TPI_DEVID_NrTraceInput_Pos*/) /*!< TPI DEVID: NrTraceInput Mask */ + +/* TPI DEVTYPE Register Definitions */ +#define TPI_DEVTYPE_SubType_Pos 4U /*!< TPI DEVTYPE: SubType Position */ +#define TPI_DEVTYPE_SubType_Msk (0xFUL /*<< TPI_DEVTYPE_SubType_Pos*/) /*!< TPI DEVTYPE: SubType Mask */ + +#define TPI_DEVTYPE_MajorType_Pos 0U /*!< TPI DEVTYPE: MajorType Position */ +#define TPI_DEVTYPE_MajorType_Msk (0xFUL << TPI_DEVTYPE_MajorType_Pos) /*!< TPI DEVTYPE: MajorType Mask */ + +/*@}*/ /* end of group CMSIS_TPI */ + + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_MPU Memory Protection Unit (MPU) + \brief Type definitions for the Memory Protection Unit (MPU) + @{ + */ + +/** + \brief Structure type to access the Memory Protection Unit (MPU). + */ +typedef struct +{ + __IM uint32_t TYPE; /*!< Offset: 0x000 (R/ ) MPU Type Register */ + __IOM uint32_t CTRL; /*!< Offset: 0x004 (R/W) MPU Control Register */ + __IOM uint32_t RNR; /*!< Offset: 0x008 (R/W) MPU Region RNRber Register */ + __IOM uint32_t RBAR; /*!< Offset: 0x00C (R/W) MPU Region Base Address Register */ + __IOM uint32_t RASR; /*!< Offset: 0x010 (R/W) MPU Region Attribute and Size Register */ + __IOM uint32_t RBAR_A1; /*!< Offset: 0x014 (R/W) MPU Alias 1 Region Base Address Register */ + __IOM uint32_t RASR_A1; /*!< Offset: 0x018 (R/W) MPU Alias 1 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A2; /*!< Offset: 0x01C (R/W) MPU Alias 2 Region Base Address Register */ + __IOM uint32_t RASR_A2; /*!< Offset: 0x020 (R/W) MPU Alias 2 Region Attribute and Size Register */ + __IOM uint32_t RBAR_A3; /*!< Offset: 0x024 (R/W) MPU Alias 3 Region Base Address Register */ + __IOM uint32_t RASR_A3; /*!< Offset: 0x028 (R/W) MPU Alias 3 Region Attribute and Size Register */ +} MPU_Type; + +/* MPU Type Register Definitions */ +#define MPU_TYPE_IREGION_Pos 16U /*!< MPU TYPE: IREGION Position */ +#define MPU_TYPE_IREGION_Msk (0xFFUL << MPU_TYPE_IREGION_Pos) /*!< MPU TYPE: IREGION Mask */ + +#define MPU_TYPE_DREGION_Pos 8U /*!< MPU TYPE: DREGION Position */ +#define MPU_TYPE_DREGION_Msk (0xFFUL << MPU_TYPE_DREGION_Pos) /*!< MPU TYPE: DREGION Mask */ + +#define MPU_TYPE_SEPARATE_Pos 0U /*!< MPU TYPE: SEPARATE Position */ +#define MPU_TYPE_SEPARATE_Msk (1UL /*<< MPU_TYPE_SEPARATE_Pos*/) /*!< MPU TYPE: SEPARATE Mask */ + +/* MPU Control Register Definitions */ +#define MPU_CTRL_PRIVDEFENA_Pos 2U /*!< MPU CTRL: PRIVDEFENA Position */ +#define MPU_CTRL_PRIVDEFENA_Msk (1UL << MPU_CTRL_PRIVDEFENA_Pos) /*!< MPU CTRL: PRIVDEFENA Mask */ + +#define MPU_CTRL_HFNMIENA_Pos 1U /*!< MPU CTRL: HFNMIENA Position */ +#define MPU_CTRL_HFNMIENA_Msk (1UL << MPU_CTRL_HFNMIENA_Pos) /*!< MPU CTRL: HFNMIENA Mask */ + +#define MPU_CTRL_ENABLE_Pos 0U /*!< MPU CTRL: ENABLE Position */ +#define MPU_CTRL_ENABLE_Msk (1UL /*<< MPU_CTRL_ENABLE_Pos*/) /*!< MPU CTRL: ENABLE Mask */ + +/* MPU Region Number Register Definitions */ +#define MPU_RNR_REGION_Pos 0U /*!< MPU RNR: REGION Position */ +#define MPU_RNR_REGION_Msk (0xFFUL /*<< MPU_RNR_REGION_Pos*/) /*!< MPU RNR: REGION Mask */ + +/* MPU Region Base Address Register Definitions */ +#define MPU_RBAR_ADDR_Pos 5U /*!< MPU RBAR: ADDR Position */ +#define MPU_RBAR_ADDR_Msk (0x7FFFFFFUL << MPU_RBAR_ADDR_Pos) /*!< MPU RBAR: ADDR Mask */ + +#define MPU_RBAR_VALID_Pos 4U /*!< MPU RBAR: VALID Position */ +#define MPU_RBAR_VALID_Msk (1UL << MPU_RBAR_VALID_Pos) /*!< MPU RBAR: VALID Mask */ + +#define MPU_RBAR_REGION_Pos 0U /*!< MPU RBAR: REGION Position */ +#define MPU_RBAR_REGION_Msk (0xFUL /*<< MPU_RBAR_REGION_Pos*/) /*!< MPU RBAR: REGION Mask */ + +/* MPU Region Attribute and Size Register Definitions */ +#define MPU_RASR_ATTRS_Pos 16U /*!< MPU RASR: MPU Region Attribute field Position */ +#define MPU_RASR_ATTRS_Msk (0xFFFFUL << MPU_RASR_ATTRS_Pos) /*!< MPU RASR: MPU Region Attribute field Mask */ + +#define MPU_RASR_XN_Pos 28U /*!< MPU RASR: ATTRS.XN Position */ +#define MPU_RASR_XN_Msk (1UL << MPU_RASR_XN_Pos) /*!< MPU RASR: ATTRS.XN Mask */ + +#define MPU_RASR_AP_Pos 24U /*!< MPU RASR: ATTRS.AP Position */ +#define MPU_RASR_AP_Msk (0x7UL << MPU_RASR_AP_Pos) /*!< MPU RASR: ATTRS.AP Mask */ + +#define MPU_RASR_TEX_Pos 19U /*!< MPU RASR: ATTRS.TEX Position */ +#define MPU_RASR_TEX_Msk (0x7UL << MPU_RASR_TEX_Pos) /*!< MPU RASR: ATTRS.TEX Mask */ + +#define MPU_RASR_S_Pos 18U /*!< MPU RASR: ATTRS.S Position */ +#define MPU_RASR_S_Msk (1UL << MPU_RASR_S_Pos) /*!< MPU RASR: ATTRS.S Mask */ + +#define MPU_RASR_C_Pos 17U /*!< MPU RASR: ATTRS.C Position */ +#define MPU_RASR_C_Msk (1UL << MPU_RASR_C_Pos) /*!< MPU RASR: ATTRS.C Mask */ + +#define MPU_RASR_B_Pos 16U /*!< MPU RASR: ATTRS.B Position */ +#define MPU_RASR_B_Msk (1UL << MPU_RASR_B_Pos) /*!< MPU RASR: ATTRS.B Mask */ + +#define MPU_RASR_SRD_Pos 8U /*!< MPU RASR: Sub-Region Disable Position */ +#define MPU_RASR_SRD_Msk (0xFFUL << MPU_RASR_SRD_Pos) /*!< MPU RASR: Sub-Region Disable Mask */ + +#define MPU_RASR_SIZE_Pos 1U /*!< MPU RASR: Region Size Field Position */ +#define MPU_RASR_SIZE_Msk (0x1FUL << MPU_RASR_SIZE_Pos) /*!< MPU RASR: Region Size Field Mask */ + +#define MPU_RASR_ENABLE_Pos 0U /*!< MPU RASR: Region enable bit Position */ +#define MPU_RASR_ENABLE_Msk (1UL /*<< MPU_RASR_ENABLE_Pos*/) /*!< MPU RASR: Region enable bit Disable Mask */ + +/*@} end of group CMSIS_MPU */ +#endif + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_CoreDebug Core Debug Registers (CoreDebug) + \brief Type definitions for the Core Debug Registers + @{ + */ + +/** + \brief Structure type to access the Core Debug Register (CoreDebug). + */ +typedef struct +{ + __IOM uint32_t DHCSR; /*!< Offset: 0x000 (R/W) Debug Halting Control and Status Register */ + __OM uint32_t DCRSR; /*!< Offset: 0x004 ( /W) Debug Core Register Selector Register */ + __IOM uint32_t DCRDR; /*!< Offset: 0x008 (R/W) Debug Core Register Data Register */ + __IOM uint32_t DEMCR; /*!< Offset: 0x00C (R/W) Debug Exception and Monitor Control Register */ +} CoreDebug_Type; + +/* Debug Halting Control and Status Register Definitions */ +#define CoreDebug_DHCSR_DBGKEY_Pos 16U /*!< CoreDebug DHCSR: DBGKEY Position */ +#define CoreDebug_DHCSR_DBGKEY_Msk (0xFFFFUL << CoreDebug_DHCSR_DBGKEY_Pos) /*!< CoreDebug DHCSR: DBGKEY Mask */ + +#define CoreDebug_DHCSR_S_RESET_ST_Pos 25U /*!< CoreDebug DHCSR: S_RESET_ST Position */ +#define CoreDebug_DHCSR_S_RESET_ST_Msk (1UL << CoreDebug_DHCSR_S_RESET_ST_Pos) /*!< CoreDebug DHCSR: S_RESET_ST Mask */ + +#define CoreDebug_DHCSR_S_RETIRE_ST_Pos 24U /*!< CoreDebug DHCSR: S_RETIRE_ST Position */ +#define CoreDebug_DHCSR_S_RETIRE_ST_Msk (1UL << CoreDebug_DHCSR_S_RETIRE_ST_Pos) /*!< CoreDebug DHCSR: S_RETIRE_ST Mask */ + +#define CoreDebug_DHCSR_S_LOCKUP_Pos 19U /*!< CoreDebug DHCSR: S_LOCKUP Position */ +#define CoreDebug_DHCSR_S_LOCKUP_Msk (1UL << CoreDebug_DHCSR_S_LOCKUP_Pos) /*!< CoreDebug DHCSR: S_LOCKUP Mask */ + +#define CoreDebug_DHCSR_S_SLEEP_Pos 18U /*!< CoreDebug DHCSR: S_SLEEP Position */ +#define CoreDebug_DHCSR_S_SLEEP_Msk (1UL << CoreDebug_DHCSR_S_SLEEP_Pos) /*!< CoreDebug DHCSR: S_SLEEP Mask */ + +#define CoreDebug_DHCSR_S_HALT_Pos 17U /*!< CoreDebug DHCSR: S_HALT Position */ +#define CoreDebug_DHCSR_S_HALT_Msk (1UL << CoreDebug_DHCSR_S_HALT_Pos) /*!< CoreDebug DHCSR: S_HALT Mask */ + +#define CoreDebug_DHCSR_S_REGRDY_Pos 16U /*!< CoreDebug DHCSR: S_REGRDY Position */ +#define CoreDebug_DHCSR_S_REGRDY_Msk (1UL << CoreDebug_DHCSR_S_REGRDY_Pos) /*!< CoreDebug DHCSR: S_REGRDY Mask */ + +#define CoreDebug_DHCSR_C_SNAPSTALL_Pos 5U /*!< CoreDebug DHCSR: C_SNAPSTALL Position */ +#define CoreDebug_DHCSR_C_SNAPSTALL_Msk (1UL << CoreDebug_DHCSR_C_SNAPSTALL_Pos) /*!< CoreDebug DHCSR: C_SNAPSTALL Mask */ + +#define CoreDebug_DHCSR_C_MASKINTS_Pos 3U /*!< CoreDebug DHCSR: C_MASKINTS Position */ +#define CoreDebug_DHCSR_C_MASKINTS_Msk (1UL << CoreDebug_DHCSR_C_MASKINTS_Pos) /*!< CoreDebug DHCSR: C_MASKINTS Mask */ + +#define CoreDebug_DHCSR_C_STEP_Pos 2U /*!< CoreDebug DHCSR: C_STEP Position */ +#define CoreDebug_DHCSR_C_STEP_Msk (1UL << CoreDebug_DHCSR_C_STEP_Pos) /*!< CoreDebug DHCSR: C_STEP Mask */ + +#define CoreDebug_DHCSR_C_HALT_Pos 1U /*!< CoreDebug DHCSR: C_HALT Position */ +#define CoreDebug_DHCSR_C_HALT_Msk (1UL << CoreDebug_DHCSR_C_HALT_Pos) /*!< CoreDebug DHCSR: C_HALT Mask */ + +#define CoreDebug_DHCSR_C_DEBUGEN_Pos 0U /*!< CoreDebug DHCSR: C_DEBUGEN Position */ +#define CoreDebug_DHCSR_C_DEBUGEN_Msk (1UL /*<< CoreDebug_DHCSR_C_DEBUGEN_Pos*/) /*!< CoreDebug DHCSR: C_DEBUGEN Mask */ + +/* Debug Core Register Selector Register Definitions */ +#define CoreDebug_DCRSR_REGWnR_Pos 16U /*!< CoreDebug DCRSR: REGWnR Position */ +#define CoreDebug_DCRSR_REGWnR_Msk (1UL << CoreDebug_DCRSR_REGWnR_Pos) /*!< CoreDebug DCRSR: REGWnR Mask */ + +#define CoreDebug_DCRSR_REGSEL_Pos 0U /*!< CoreDebug DCRSR: REGSEL Position */ +#define CoreDebug_DCRSR_REGSEL_Msk (0x1FUL /*<< CoreDebug_DCRSR_REGSEL_Pos*/) /*!< CoreDebug DCRSR: REGSEL Mask */ + +/* Debug Exception and Monitor Control Register Definitions */ +#define CoreDebug_DEMCR_TRCENA_Pos 24U /*!< CoreDebug DEMCR: TRCENA Position */ +#define CoreDebug_DEMCR_TRCENA_Msk (1UL << CoreDebug_DEMCR_TRCENA_Pos) /*!< CoreDebug DEMCR: TRCENA Mask */ + +#define CoreDebug_DEMCR_MON_REQ_Pos 19U /*!< CoreDebug DEMCR: MON_REQ Position */ +#define CoreDebug_DEMCR_MON_REQ_Msk (1UL << CoreDebug_DEMCR_MON_REQ_Pos) /*!< CoreDebug DEMCR: MON_REQ Mask */ + +#define CoreDebug_DEMCR_MON_STEP_Pos 18U /*!< CoreDebug DEMCR: MON_STEP Position */ +#define CoreDebug_DEMCR_MON_STEP_Msk (1UL << CoreDebug_DEMCR_MON_STEP_Pos) /*!< CoreDebug DEMCR: MON_STEP Mask */ + +#define CoreDebug_DEMCR_MON_PEND_Pos 17U /*!< CoreDebug DEMCR: MON_PEND Position */ +#define CoreDebug_DEMCR_MON_PEND_Msk (1UL << CoreDebug_DEMCR_MON_PEND_Pos) /*!< CoreDebug DEMCR: MON_PEND Mask */ + +#define CoreDebug_DEMCR_MON_EN_Pos 16U /*!< CoreDebug DEMCR: MON_EN Position */ +#define CoreDebug_DEMCR_MON_EN_Msk (1UL << CoreDebug_DEMCR_MON_EN_Pos) /*!< CoreDebug DEMCR: MON_EN Mask */ + +#define CoreDebug_DEMCR_VC_HARDERR_Pos 10U /*!< CoreDebug DEMCR: VC_HARDERR Position */ +#define CoreDebug_DEMCR_VC_HARDERR_Msk (1UL << CoreDebug_DEMCR_VC_HARDERR_Pos) /*!< CoreDebug DEMCR: VC_HARDERR Mask */ + +#define CoreDebug_DEMCR_VC_INTERR_Pos 9U /*!< CoreDebug DEMCR: VC_INTERR Position */ +#define CoreDebug_DEMCR_VC_INTERR_Msk (1UL << CoreDebug_DEMCR_VC_INTERR_Pos) /*!< CoreDebug DEMCR: VC_INTERR Mask */ + +#define CoreDebug_DEMCR_VC_BUSERR_Pos 8U /*!< CoreDebug DEMCR: VC_BUSERR Position */ +#define CoreDebug_DEMCR_VC_BUSERR_Msk (1UL << CoreDebug_DEMCR_VC_BUSERR_Pos) /*!< CoreDebug DEMCR: VC_BUSERR Mask */ + +#define CoreDebug_DEMCR_VC_STATERR_Pos 7U /*!< CoreDebug DEMCR: VC_STATERR Position */ +#define CoreDebug_DEMCR_VC_STATERR_Msk (1UL << CoreDebug_DEMCR_VC_STATERR_Pos) /*!< CoreDebug DEMCR: VC_STATERR Mask */ + +#define CoreDebug_DEMCR_VC_CHKERR_Pos 6U /*!< CoreDebug DEMCR: VC_CHKERR Position */ +#define CoreDebug_DEMCR_VC_CHKERR_Msk (1UL << CoreDebug_DEMCR_VC_CHKERR_Pos) /*!< CoreDebug DEMCR: VC_CHKERR Mask */ + +#define CoreDebug_DEMCR_VC_NOCPERR_Pos 5U /*!< CoreDebug DEMCR: VC_NOCPERR Position */ +#define CoreDebug_DEMCR_VC_NOCPERR_Msk (1UL << CoreDebug_DEMCR_VC_NOCPERR_Pos) /*!< CoreDebug DEMCR: VC_NOCPERR Mask */ + +#define CoreDebug_DEMCR_VC_MMERR_Pos 4U /*!< CoreDebug DEMCR: VC_MMERR Position */ +#define CoreDebug_DEMCR_VC_MMERR_Msk (1UL << CoreDebug_DEMCR_VC_MMERR_Pos) /*!< CoreDebug DEMCR: VC_MMERR Mask */ + +#define CoreDebug_DEMCR_VC_CORERESET_Pos 0U /*!< CoreDebug DEMCR: VC_CORERESET Position */ +#define CoreDebug_DEMCR_VC_CORERESET_Msk (1UL /*<< CoreDebug_DEMCR_VC_CORERESET_Pos*/) /*!< CoreDebug DEMCR: VC_CORERESET Mask */ + +/*@} end of group CMSIS_CoreDebug */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_bitfield Core register bit field macros + \brief Macros for use with bit field definitions (xxx_Pos, xxx_Msk). + @{ + */ + +/** + \brief Mask and shift a bit field value for use in a register bit range. + \param[in] field Name of the register bit field. + \param[in] value Value of the bit field. This parameter is interpreted as an uint32_t type. + \return Masked and shifted value. +*/ +#define _VAL2FLD(field, value) (((uint32_t)(value) << field ## _Pos) & field ## _Msk) + +/** + \brief Mask and shift a register value to extract a bit filed value. + \param[in] field Name of the register bit field. + \param[in] value Value of register. This parameter is interpreted as an uint32_t type. + \return Masked and shifted bit field value. +*/ +#define _FLD2VAL(field, value) (((uint32_t)(value) & field ## _Msk) >> field ## _Pos) + +/*@} end of group CMSIS_core_bitfield */ + + +/** + \ingroup CMSIS_core_register + \defgroup CMSIS_core_base Core Definitions + \brief Definitions for base addresses, unions, and structures. + @{ + */ + +/* Memory mapping of Core Hardware */ +#define SCS_BASE (0xE000E000UL) /*!< System Control Space Base Address */ +#define ITM_BASE (0xE0000000UL) /*!< ITM Base Address */ +#define DWT_BASE (0xE0001000UL) /*!< DWT Base Address */ +#define TPI_BASE (0xE0040000UL) /*!< TPI Base Address */ +#define CoreDebug_BASE (0xE000EDF0UL) /*!< Core Debug Base Address */ +#define SysTick_BASE (SCS_BASE + 0x0010UL) /*!< SysTick Base Address */ +#define NVIC_BASE (SCS_BASE + 0x0100UL) /*!< NVIC Base Address */ +#define SCB_BASE (SCS_BASE + 0x0D00UL) /*!< System Control Block Base Address */ + +#define SCnSCB ((SCnSCB_Type *) SCS_BASE ) /*!< System control Register not in SCB */ +#define SCB ((SCB_Type *) SCB_BASE ) /*!< SCB configuration struct */ +#define SysTick ((SysTick_Type *) SysTick_BASE ) /*!< SysTick configuration struct */ +#define NVIC ((NVIC_Type *) NVIC_BASE ) /*!< NVIC configuration struct */ +#define ITM ((ITM_Type *) ITM_BASE ) /*!< ITM configuration struct */ +#define DWT ((DWT_Type *) DWT_BASE ) /*!< DWT configuration struct */ +#define TPI ((TPI_Type *) TPI_BASE ) /*!< TPI configuration struct */ +#define CoreDebug ((CoreDebug_Type *) CoreDebug_BASE) /*!< Core Debug configuration struct */ + +#if defined (__MPU_PRESENT) && (__MPU_PRESENT == 1U) + #define MPU_BASE (SCS_BASE + 0x0D90UL) /*!< Memory Protection Unit */ + #define MPU ((MPU_Type *) MPU_BASE ) /*!< Memory Protection Unit */ +#endif + +/*@} */ + + + +/******************************************************************************* + * Hardware Abstraction Layer + Core Function Interface contains: + - Core NVIC Functions + - Core SysTick Functions + - Core Debug Functions + - Core Register Access Functions + ******************************************************************************/ +/** + \defgroup CMSIS_Core_FunctionInterface Functions and Instructions Reference +*/ + + + +/* ########################## NVIC functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_NVICFunctions NVIC Functions + \brief Functions that manage interrupts and exceptions via the NVIC. + @{ + */ + +#ifdef CMSIS_NVIC_VIRTUAL + #ifndef CMSIS_NVIC_VIRTUAL_HEADER_FILE + #define CMSIS_NVIC_VIRTUAL_HEADER_FILE "cmsis_nvic_virtual.h" + #endif + #include CMSIS_NVIC_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetPriorityGrouping __NVIC_SetPriorityGrouping + #define NVIC_GetPriorityGrouping __NVIC_GetPriorityGrouping + #define NVIC_EnableIRQ __NVIC_EnableIRQ + #define NVIC_GetEnableIRQ __NVIC_GetEnableIRQ + #define NVIC_DisableIRQ __NVIC_DisableIRQ + #define NVIC_GetPendingIRQ __NVIC_GetPendingIRQ + #define NVIC_SetPendingIRQ __NVIC_SetPendingIRQ + #define NVIC_ClearPendingIRQ __NVIC_ClearPendingIRQ + #define NVIC_GetActive __NVIC_GetActive + #define NVIC_SetPriority __NVIC_SetPriority + #define NVIC_GetPriority __NVIC_GetPriority + #define NVIC_SystemReset __NVIC_SystemReset +#endif /* CMSIS_NVIC_VIRTUAL */ + +#ifdef CMSIS_VECTAB_VIRTUAL + #ifndef CMSIS_VECTAB_VIRTUAL_HEADER_FILE + #define CMSIS_VECTAB_VIRTUAL_HEADER_FILE "cmsis_vectab_virtual.h" + #endif + #include CMSIS_VECTAB_VIRTUAL_HEADER_FILE +#else + #define NVIC_SetVector __NVIC_SetVector + #define NVIC_GetVector __NVIC_GetVector +#endif /* (CMSIS_VECTAB_VIRTUAL) */ + +#define NVIC_USER_IRQ_OFFSET 16 + + +/* The following EXC_RETURN values are saved the LR on exception entry */ +#define EXC_RETURN_HANDLER (0xFFFFFFF1UL) /* return to Handler mode, uses MSP after return */ +#define EXC_RETURN_THREAD_MSP (0xFFFFFFF9UL) /* return to Thread mode, uses MSP after return */ +#define EXC_RETURN_THREAD_PSP (0xFFFFFFFDUL) /* return to Thread mode, uses PSP after return */ + + + +/** + \brief Set Priority Grouping + \details Sets the priority grouping field using the required unlock sequence. + The parameter PriorityGroup is assigned to the field SCB->AIRCR [10:8] PRIGROUP field. + Only values from 0..7 are used. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Priority grouping field. + */ +__STATIC_INLINE void __NVIC_SetPriorityGrouping(uint32_t PriorityGroup) +{ + uint32_t reg_value; + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + + reg_value = SCB->AIRCR; /* read old register configuration */ + reg_value &= ~((uint32_t)(SCB_AIRCR_VECTKEY_Msk | SCB_AIRCR_PRIGROUP_Msk)); /* clear bits to change */ + reg_value = (reg_value | + ((uint32_t)0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (PriorityGroupTmp << 8U) ); /* Insert write key and priorty group */ + SCB->AIRCR = reg_value; +} + + +/** + \brief Get Priority Grouping + \details Reads the priority grouping field from the NVIC Interrupt Controller. + \return Priority grouping field (SCB->AIRCR [10:8] PRIGROUP field). + */ +__STATIC_INLINE uint32_t __NVIC_GetPriorityGrouping(void) +{ + return ((uint32_t)((SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) >> SCB_AIRCR_PRIGROUP_Pos)); +} + + +/** + \brief Enable Interrupt + \details Enables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_EnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Interrupt Enable status + \details Returns a device specific interrupt enable status from the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt is not enabled. + \return 1 Interrupt is enabled. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetEnableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISER[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Disable Interrupt + \details Disables a device specific interrupt in the NVIC interrupt controller. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_DisableIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICER[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + __DSB(); + __ISB(); + } +} + + +/** + \brief Get Pending Interrupt + \details Reads the NVIC pending register and returns the pending bit for the specified device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not pending. + \return 1 Interrupt status is pending. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Pending Interrupt + \details Sets the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ISPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Clear Pending Interrupt + \details Clears the pending bit of a device specific interrupt in the NVIC pending register. + \param [in] IRQn Device specific interrupt number. + \note IRQn must not be negative. + */ +__STATIC_INLINE void __NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->ICPR[(((uint32_t)IRQn) >> 5UL)] = (uint32_t)(1UL << (((uint32_t)IRQn) & 0x1FUL)); + } +} + + +/** + \brief Get Active Interrupt + \details Reads the active register in the NVIC and returns the active bit for the device specific interrupt. + \param [in] IRQn Device specific interrupt number. + \return 0 Interrupt status is not active. + \return 1 Interrupt status is active. + \note IRQn must not be negative. + */ +__STATIC_INLINE uint32_t __NVIC_GetActive(IRQn_Type IRQn) +{ + if ((int32_t)(IRQn) >= 0) + { + return((uint32_t)(((NVIC->IABR[(((uint32_t)IRQn) >> 5UL)] & (1UL << (((uint32_t)IRQn) & 0x1FUL))) != 0UL) ? 1UL : 0UL)); + } + else + { + return(0U); + } +} + + +/** + \brief Set Interrupt Priority + \details Sets the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \param [in] priority Priority to set. + \note The priority cannot be set for every processor exception. + */ +__STATIC_INLINE void __NVIC_SetPriority(IRQn_Type IRQn, uint32_t priority) +{ + if ((int32_t)(IRQn) >= 0) + { + NVIC->IP[((uint32_t)IRQn)] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } + else + { + SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] = (uint8_t)((priority << (8U - __NVIC_PRIO_BITS)) & (uint32_t)0xFFUL); + } +} + + +/** + \brief Get Interrupt Priority + \details Reads the priority of a device specific interrupt or a processor exception. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Interrupt Priority. + Value is aligned automatically to the implemented priority bits of the microcontroller. + */ +__STATIC_INLINE uint32_t __NVIC_GetPriority(IRQn_Type IRQn) +{ + + if ((int32_t)(IRQn) >= 0) + { + return(((uint32_t)NVIC->IP[((uint32_t)IRQn)] >> (8U - __NVIC_PRIO_BITS))); + } + else + { + return(((uint32_t)SCB->SHP[(((uint32_t)IRQn) & 0xFUL)-4UL] >> (8U - __NVIC_PRIO_BITS))); + } +} + + +/** + \brief Encode Priority + \details Encodes the priority for an interrupt with the given priority group, + preemptive priority value, and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS), the smallest possible priority group is set. + \param [in] PriorityGroup Used priority group. + \param [in] PreemptPriority Preemptive priority value (starting from 0). + \param [in] SubPriority Subpriority value (starting from 0). + \return Encoded priority. Value can be used in the function \ref NVIC_SetPriority(). + */ +__STATIC_INLINE uint32_t NVIC_EncodePriority (uint32_t PriorityGroup, uint32_t PreemptPriority, uint32_t SubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + return ( + ((PreemptPriority & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL)) << SubPriorityBits) | + ((SubPriority & (uint32_t)((1UL << (SubPriorityBits )) - 1UL))) + ); +} + + +/** + \brief Decode Priority + \details Decodes an interrupt priority value with a given priority group to + preemptive priority value and subpriority value. + In case of a conflict between priority grouping and available + priority bits (__NVIC_PRIO_BITS) the smallest possible priority group is set. + \param [in] Priority Priority value, which can be retrieved with the function \ref NVIC_GetPriority(). + \param [in] PriorityGroup Used priority group. + \param [out] pPreemptPriority Preemptive priority value (starting from 0). + \param [out] pSubPriority Subpriority value (starting from 0). + */ +__STATIC_INLINE void NVIC_DecodePriority (uint32_t Priority, uint32_t PriorityGroup, uint32_t* const pPreemptPriority, uint32_t* const pSubPriority) +{ + uint32_t PriorityGroupTmp = (PriorityGroup & (uint32_t)0x07UL); /* only values 0..7 are used */ + uint32_t PreemptPriorityBits; + uint32_t SubPriorityBits; + + PreemptPriorityBits = ((7UL - PriorityGroupTmp) > (uint32_t)(__NVIC_PRIO_BITS)) ? (uint32_t)(__NVIC_PRIO_BITS) : (uint32_t)(7UL - PriorityGroupTmp); + SubPriorityBits = ((PriorityGroupTmp + (uint32_t)(__NVIC_PRIO_BITS)) < (uint32_t)7UL) ? (uint32_t)0UL : (uint32_t)((PriorityGroupTmp - 7UL) + (uint32_t)(__NVIC_PRIO_BITS)); + + *pPreemptPriority = (Priority >> SubPriorityBits) & (uint32_t)((1UL << (PreemptPriorityBits)) - 1UL); + *pSubPriority = (Priority ) & (uint32_t)((1UL << (SubPriorityBits )) - 1UL); +} + + +/** + \brief Set Interrupt Vector + \details Sets an interrupt vector in SRAM based interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + VTOR must been relocated to SRAM before. + \param [in] IRQn Interrupt number + \param [in] vector Address of interrupt handler function + */ +__STATIC_INLINE void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + + +/** + \brief Get Interrupt Vector + \details Reads an interrupt vector from interrupt vector table. + The interrupt number can be positive to specify a device specific interrupt, + or negative to specify a processor exception. + \param [in] IRQn Interrupt number. + \return Address of interrupt handler function + */ +__STATIC_INLINE uint32_t __NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *)SCB->VTOR; + return vectors[(int32_t)IRQn + NVIC_USER_IRQ_OFFSET]; +} + + +/** + \brief System Reset + \details Initiates a system reset request to reset the MCU. + */ +__NO_RETURN __STATIC_INLINE void __NVIC_SystemReset(void) +{ + __DSB(); /* Ensure all outstanding memory accesses included + buffered write are completed before reset */ + SCB->AIRCR = (uint32_t)((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) | + (SCB->AIRCR & SCB_AIRCR_PRIGROUP_Msk) | + SCB_AIRCR_SYSRESETREQ_Msk ); /* Keep priority group unchanged */ + __DSB(); /* Ensure completion of memory access */ + + for(;;) /* wait until reset */ + { + __NOP(); + } +} + +/*@} end of CMSIS_Core_NVICFunctions */ + + +/* ########################## FPU functions #################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_FpuFunctions FPU Functions + \brief Function that provides FPU type. + @{ + */ + +/** + \brief get FPU type + \details returns the FPU type + \returns + - \b 0: No FPU + - \b 1: Single precision FPU + - \b 2: Double + Single precision FPU + */ +__STATIC_INLINE uint32_t SCB_GetFPUType(void) +{ + return 0U; /* No FPU */ +} + + +/*@} end of CMSIS_Core_FpuFunctions */ + + + +/* ################################## SysTick function ############################################ */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_Core_SysTickFunctions SysTick Functions + \brief Functions that configure the System. + @{ + */ + +#if defined (__Vendor_SysTickConfig) && (__Vendor_SysTickConfig == 0U) + +/** + \brief System Tick Configuration + \details Initializes the System Timer and its interrupt, and starts the System Tick Timer. + Counter is in free running mode to generate periodic interrupts. + \param [in] ticks Number of ticks between two interrupts. + \return 0 Function succeeded. + \return 1 Function failed. + \note When the variable __Vendor_SysTickConfig is set to 1, then the + function SysTick_Config is not included. In this case, the file device.h + must contain a vendor-specific implementation of this function. + */ +__STATIC_INLINE uint32_t SysTick_Config(uint32_t ticks) +{ + if ((ticks - 1UL) > SysTick_LOAD_RELOAD_Msk) + { + return (1UL); /* Reload value impossible */ + } + + SysTick->LOAD = (uint32_t)(ticks - 1UL); /* set reload register */ + NVIC_SetPriority (SysTick_IRQn, (1UL << __NVIC_PRIO_BITS) - 1UL); /* set Priority for Systick Interrupt */ + SysTick->VAL = 0UL; /* Load the SysTick Counter Value */ + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | + SysTick_CTRL_TICKINT_Msk | + SysTick_CTRL_ENABLE_Msk; /* Enable SysTick IRQ and SysTick Timer */ + return (0UL); /* Function successful */ +} + +#endif + +/*@} end of CMSIS_Core_SysTickFunctions */ + + + +/* ##################################### Debug In/Output function ########################################### */ +/** + \ingroup CMSIS_Core_FunctionInterface + \defgroup CMSIS_core_DebugFunctions ITM Functions + \brief Functions that access the ITM debug interface. + @{ + */ + +extern volatile int32_t ITM_RxBuffer; /*!< External variable to receive characters. */ +#define ITM_RXBUFFER_EMPTY ((int32_t)0x5AA55AA5U) /*!< Value identifying \ref ITM_RxBuffer is ready for next character. */ + + +/** + \brief ITM Send Character + \details Transmits a character via the ITM channel 0, and + \li Just returns when no debugger is connected that has booked the output. + \li Is blocking when a debugger is connected, but the previous character sent has not been transmitted. + \param [in] ch Character to transmit. + \returns Character to transmit. + */ +__STATIC_INLINE uint32_t ITM_SendChar (uint32_t ch) +{ + if (((ITM->TCR & ITM_TCR_ITMENA_Msk) != 0UL) && /* ITM enabled */ + ((ITM->TER & 1UL ) != 0UL) ) /* ITM Port #0 enabled */ + { + while (ITM->PORT[0U].u32 == 0UL) + { + __NOP(); + } + ITM->PORT[0U].u8 = (uint8_t)ch; + } + return (ch); +} + + +/** + \brief ITM Receive Character + \details Inputs a character via the external variable \ref ITM_RxBuffer. + \return Received character. + \return -1 No character pending. + */ +__STATIC_INLINE int32_t ITM_ReceiveChar (void) +{ + int32_t ch = -1; /* no character available */ + + if (ITM_RxBuffer != ITM_RXBUFFER_EMPTY) + { + ch = ITM_RxBuffer; + ITM_RxBuffer = ITM_RXBUFFER_EMPTY; /* ready for next character */ + } + + return (ch); +} + + +/** + \brief ITM Check Character + \details Checks whether a character is pending for reading in the variable \ref ITM_RxBuffer. + \return 0 No character available. + \return 1 Character available. + */ +__STATIC_INLINE int32_t ITM_CheckChar (void) +{ + + if (ITM_RxBuffer == ITM_RXBUFFER_EMPTY) + { + return (0); /* no character available */ + } + else + { + return (1); /* character available */ + } +} + +/*@} end of CMSIS_core_DebugFunctions */ + + + + +#ifdef __cplusplus +} +#endif + +#endif /* __CORE_SC300_H_DEPENDANT */ + +#endif /* __CMSIS_GENERIC */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv7.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv7.h new file mode 100644 index 0000000000..01422033d0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv7.h @@ -0,0 +1,270 @@ +/****************************************************************************** + * @file mpu_armv7.h + * @brief CMSIS MPU API for Armv7-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV7_H +#define ARM_MPU_ARMV7_H + +#define ARM_MPU_REGION_SIZE_32B ((uint8_t)0x04U) ///!< MPU Region Size 32 Bytes +#define ARM_MPU_REGION_SIZE_64B ((uint8_t)0x05U) ///!< MPU Region Size 64 Bytes +#define ARM_MPU_REGION_SIZE_128B ((uint8_t)0x06U) ///!< MPU Region Size 128 Bytes +#define ARM_MPU_REGION_SIZE_256B ((uint8_t)0x07U) ///!< MPU Region Size 256 Bytes +#define ARM_MPU_REGION_SIZE_512B ((uint8_t)0x08U) ///!< MPU Region Size 512 Bytes +#define ARM_MPU_REGION_SIZE_1KB ((uint8_t)0x09U) ///!< MPU Region Size 1 KByte +#define ARM_MPU_REGION_SIZE_2KB ((uint8_t)0x0AU) ///!< MPU Region Size 2 KBytes +#define ARM_MPU_REGION_SIZE_4KB ((uint8_t)0x0BU) ///!< MPU Region Size 4 KBytes +#define ARM_MPU_REGION_SIZE_8KB ((uint8_t)0x0CU) ///!< MPU Region Size 8 KBytes +#define ARM_MPU_REGION_SIZE_16KB ((uint8_t)0x0DU) ///!< MPU Region Size 16 KBytes +#define ARM_MPU_REGION_SIZE_32KB ((uint8_t)0x0EU) ///!< MPU Region Size 32 KBytes +#define ARM_MPU_REGION_SIZE_64KB ((uint8_t)0x0FU) ///!< MPU Region Size 64 KBytes +#define ARM_MPU_REGION_SIZE_128KB ((uint8_t)0x10U) ///!< MPU Region Size 128 KBytes +#define ARM_MPU_REGION_SIZE_256KB ((uint8_t)0x11U) ///!< MPU Region Size 256 KBytes +#define ARM_MPU_REGION_SIZE_512KB ((uint8_t)0x12U) ///!< MPU Region Size 512 KBytes +#define ARM_MPU_REGION_SIZE_1MB ((uint8_t)0x13U) ///!< MPU Region Size 1 MByte +#define ARM_MPU_REGION_SIZE_2MB ((uint8_t)0x14U) ///!< MPU Region Size 2 MBytes +#define ARM_MPU_REGION_SIZE_4MB ((uint8_t)0x15U) ///!< MPU Region Size 4 MBytes +#define ARM_MPU_REGION_SIZE_8MB ((uint8_t)0x16U) ///!< MPU Region Size 8 MBytes +#define ARM_MPU_REGION_SIZE_16MB ((uint8_t)0x17U) ///!< MPU Region Size 16 MBytes +#define ARM_MPU_REGION_SIZE_32MB ((uint8_t)0x18U) ///!< MPU Region Size 32 MBytes +#define ARM_MPU_REGION_SIZE_64MB ((uint8_t)0x19U) ///!< MPU Region Size 64 MBytes +#define ARM_MPU_REGION_SIZE_128MB ((uint8_t)0x1AU) ///!< MPU Region Size 128 MBytes +#define ARM_MPU_REGION_SIZE_256MB ((uint8_t)0x1BU) ///!< MPU Region Size 256 MBytes +#define ARM_MPU_REGION_SIZE_512MB ((uint8_t)0x1CU) ///!< MPU Region Size 512 MBytes +#define ARM_MPU_REGION_SIZE_1GB ((uint8_t)0x1DU) ///!< MPU Region Size 1 GByte +#define ARM_MPU_REGION_SIZE_2GB ((uint8_t)0x1EU) ///!< MPU Region Size 2 GBytes +#define ARM_MPU_REGION_SIZE_4GB ((uint8_t)0x1FU) ///!< MPU Region Size 4 GBytes + +#define ARM_MPU_AP_NONE 0U ///!< MPU Access Permission no access +#define ARM_MPU_AP_PRIV 1U ///!< MPU Access Permission privileged access only +#define ARM_MPU_AP_URO 2U ///!< MPU Access Permission unprivileged access read-only +#define ARM_MPU_AP_FULL 3U ///!< MPU Access Permission full access +#define ARM_MPU_AP_PRO 5U ///!< MPU Access Permission privileged access read-only +#define ARM_MPU_AP_RO 6U ///!< MPU Access Permission read-only access + +/** MPU Region Base Address Register Value +* +* \param Region The region to be configured, number 0 to 15. +* \param BaseAddress The base address for the region. +*/ +#define ARM_MPU_RBAR(Region, BaseAddress) \ + (((BaseAddress) & MPU_RBAR_ADDR_Msk) | \ + ((Region) & MPU_RBAR_REGION_Msk) | \ + (MPU_RBAR_VALID_Msk)) + +/** +* MPU Memory Access Attributes +* +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +*/ +#define ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable) \ + ((((TypeExtField ) << MPU_RASR_TEX_Pos) & MPU_RASR_TEX_Msk) | \ + (((IsShareable ) << MPU_RASR_S_Pos) & MPU_RASR_S_Msk) | \ + (((IsCacheable ) << MPU_RASR_C_Pos) & MPU_RASR_C_Msk) | \ + (((IsBufferable ) << MPU_RASR_B_Pos) & MPU_RASR_B_Msk)) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param AccessAttributes Memory access attribution, see \ref ARM_MPU_ACCESS_. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR_EX(DisableExec, AccessPermission, AccessAttributes, SubRegionDisable, Size) \ + ((((DisableExec ) << MPU_RASR_XN_Pos) & MPU_RASR_XN_Msk) | \ + (((AccessPermission) << MPU_RASR_AP_Pos) & MPU_RASR_AP_Msk) | \ + (((AccessAttributes) ) & (MPU_RASR_TEX_Msk | MPU_RASR_S_Msk | MPU_RASR_C_Msk | MPU_RASR_B_Msk))) + +/** +* MPU Region Attribute and Size Register Value +* +* \param DisableExec Instruction access disable bit, 1= disable instruction fetches. +* \param AccessPermission Data access permissions, allows you to configure read/write access for User and Privileged mode. +* \param TypeExtField Type extension field, allows you to configure memory access type, for example strongly ordered, peripheral. +* \param IsShareable Region is shareable between multiple bus masters. +* \param IsCacheable Region is cacheable, i.e. its value may be kept in cache. +* \param IsBufferable Region is bufferable, i.e. using write-back caching. Cacheable but non-bufferable regions use write-through policy. +* \param SubRegionDisable Sub-region disable field. +* \param Size Region size of the region to be configured, for example 4K, 8K. +*/ +#define ARM_MPU_RASR(DisableExec, AccessPermission, TypeExtField, IsShareable, IsCacheable, IsBufferable, SubRegionDisable, Size) \ + ARM_MPU_RASR_EX(DisableExec, AccessPermission, ARM_MPU_ACCESS_(TypeExtField, IsShareable, IsCacheable, IsBufferable), SubRegionDisable, Size) + +/** +* MPU Memory Access Attribute for strongly ordered memory. +* - TEX: 000b +* - Shareable +* - Non-cacheable +* - Non-bufferable +*/ +#define ARM_MPU_ACCESS_ORDERED ARM_MPU_ACCESS_(0U, 1U, 0U, 0U) + +/** +* MPU Memory Access Attribute for device memory. +* - TEX: 000b (if non-shareable) or 010b (if shareable) +* - Shareable or non-shareable +* - Non-cacheable +* - Bufferable (if shareable) or non-bufferable (if non-shareable) +* +* \param IsShareable Configures the device memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_DEVICE(IsShareable) ((IsShareable) ? ARM_MPU_ACCESS_(0U, 1U, 0U, 1U) : ARM_MPU_ACCESS_(2U, 0U, 0U, 0U)) + +/** +* MPU Memory Access Attribute for normal memory. +* - TEX: 1BBb (reflecting outer cacheability rules) +* - Shareable or non-shareable +* - Cacheable or non-cacheable (reflecting inner cacheability rules) +* - Bufferable or non-bufferable (reflecting inner cacheability rules) +* +* \param OuterCp Configures the outer cache policy. +* \param InnerCp Configures the inner cache policy. +* \param IsShareable Configures the memory as shareable or non-shareable. +*/ +#define ARM_MPU_ACCESS_NORMAL(OuterCp, InnerCp, IsShareable) ARM_MPU_ACCESS_((4U | (OuterCp)), IsShareable, ((InnerCp) & 2U), ((InnerCp) & 1U)) + +/** +* MPU Memory Access Attribute non-cacheable policy. +*/ +#define ARM_MPU_CACHEP_NOCACHE 0U + +/** +* MPU Memory Access Attribute write-back, write and read allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_WRA 1U + +/** +* MPU Memory Access Attribute write-through, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WT_NWA 2U + +/** +* MPU Memory Access Attribute write-back, no write allocate policy. +*/ +#define ARM_MPU_CACHEP_WB_NWA 3U + + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; //!< The region base address register value (RBAR) + uint32_t RASR; //!< The region attribute and size register value (RASR) \ref MPU_RASR +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + MPU->RNR = rnr; + MPU->RASR = 0U; +} + +/** Configure an MPU region. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rbar, uint32_t rasr) +{ + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rsar Value for RSAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(uint32_t rnr, uint32_t rbar, uint32_t rasr) +{ + MPU->RNR = rnr; + MPU->RBAR = rbar; + MPU->RASR = rasr; +} + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + while (cnt > MPU_TYPE_RALIASES) { + orderedCpy(&(MPU->RBAR), &(table->RBAR), MPU_TYPE_RALIASES*rowWordSize); + table += MPU_TYPE_RALIASES; + cnt -= MPU_TYPE_RALIASES; + } + orderedCpy(&(MPU->RBAR), &(table->RBAR), cnt*rowWordSize); +} + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv8.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv8.h new file mode 100644 index 0000000000..62571da5b8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/mpu_armv8.h @@ -0,0 +1,333 @@ +/****************************************************************************** + * @file mpu_armv8.h + * @brief CMSIS MPU API for Armv8-M MPU + * @version V5.0.4 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef ARM_MPU_ARMV8_H +#define ARM_MPU_ARMV8_H + +/** \brief Attribute for device memory (outer only) */ +#define ARM_MPU_ATTR_DEVICE ( 0U ) + +/** \brief Attribute for non-cacheable, normal memory */ +#define ARM_MPU_ATTR_NON_CACHEABLE ( 4U ) + +/** \brief Attribute for normal memory (outer and inner) +* \param NT Non-Transient: Set to 1 for non-transient data. +* \param WB Write-Back: Set to 1 to use write-back update policy. +* \param RA Read Allocation: Set to 1 to use cache allocation on read miss. +* \param WA Write Allocation: Set to 1 to use cache allocation on write miss. +*/ +#define ARM_MPU_ATTR_MEMORY_(NT, WB, RA, WA) \ + (((NT & 1U) << 3U) | ((WB & 1U) << 2U) | ((RA & 1U) << 1U) | (WA & 1U)) + +/** \brief Device memory type non Gathering, non Re-ordering, non Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRnE (0U) + +/** \brief Device memory type non Gathering, non Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGnRE (1U) + +/** \brief Device memory type non Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_nGRE (2U) + +/** \brief Device memory type Gathering, Re-ordering, Early Write Acknowledgement */ +#define ARM_MPU_ATTR_DEVICE_GRE (3U) + +/** \brief Memory Attribute +* \param O Outer memory attributes +* \param I O == ARM_MPU_ATTR_DEVICE: Device memory attributes, else: Inner memory attributes +*/ +#define ARM_MPU_ATTR(O, I) (((O & 0xFU) << 4U) | (((O & 0xFU) != 0U) ? (I & 0xFU) : ((I & 0x3U) << 2U))) + +/** \brief Normal memory non-shareable */ +#define ARM_MPU_SH_NON (0U) + +/** \brief Normal memory outer shareable */ +#define ARM_MPU_SH_OUTER (2U) + +/** \brief Normal memory inner shareable */ +#define ARM_MPU_SH_INNER (3U) + +/** \brief Memory access permissions +* \param RO Read-Only: Set to 1 for read-only memory. +* \param NP Non-Privileged: Set to 1 for non-privileged memory. +*/ +#define ARM_MPU_AP_(RO, NP) (((RO & 1U) << 1U) | (NP & 1U)) + +/** \brief Region Base Address Register value +* \param BASE The base address bits [31:5] of a memory region. The value is zero extended. Effective address gets 32 byte aligned. +* \param SH Defines the Shareability domain for this memory region. +* \param RO Read-Only: Set to 1 for a read-only memory region. +* \param NP Non-Privileged: Set to 1 for a non-privileged memory region. +* \oaram XN eXecute Never: Set to 1 for a non-executable memory region. +*/ +#define ARM_MPU_RBAR(BASE, SH, RO, NP, XN) \ + ((BASE & MPU_RBAR_BASE_Msk) | \ + ((SH << MPU_RBAR_SH_Pos) & MPU_RBAR_SH_Msk) | \ + ((ARM_MPU_AP_(RO, NP) << MPU_RBAR_AP_Pos) & MPU_RBAR_AP_Msk) | \ + ((XN << MPU_RBAR_XN_Pos) & MPU_RBAR_XN_Msk)) + +/** \brief Region Limit Address Register value +* \param LIMIT The limit address bits [31:5] for this memory region. The value is one extended. +* \param IDX The attribute index to be associated with this memory region. +*/ +#define ARM_MPU_RLAR(LIMIT, IDX) \ + ((LIMIT & MPU_RLAR_LIMIT_Msk) | \ + ((IDX << MPU_RLAR_AttrIndx_Pos) & MPU_RLAR_AttrIndx_Msk) | \ + (MPU_RLAR_EN_Msk)) + +/** +* Struct for a single MPU Region +*/ +typedef struct { + uint32_t RBAR; /*!< Region Base Address Register value */ + uint32_t RLAR; /*!< Region Limit Address Register value */ +} ARM_MPU_Region_t; + +/** Enable the MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} + +#ifdef MPU_NS +/** Enable the Non-secure MPU. +* \param MPU_Control Default access permissions for unconfigured regions. +*/ +__STATIC_INLINE void ARM_MPU_Enable_NS(uint32_t MPU_Control) +{ + __DSB(); + __ISB(); + MPU_NS->CTRL = MPU_Control | MPU_CTRL_ENABLE_Msk; +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR |= SCB_SHCSR_MEMFAULTENA_Msk; +#endif +} + +/** Disable the Non-secure MPU. +*/ +__STATIC_INLINE void ARM_MPU_Disable_NS(void) +{ + __DSB(); + __ISB(); +#ifdef SCB_SHCSR_MEMFAULTENA_Msk + SCB_NS->SHCSR &= ~SCB_SHCSR_MEMFAULTENA_Msk; +#endif + MPU_NS->CTRL &= ~MPU_CTRL_ENABLE_Msk; +} +#endif + +/** Set the memory attribute encoding to the given MPU. +* \param mpu Pointer to the MPU to be configured. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttrEx(MPU_Type* mpu, uint8_t idx, uint8_t attr) +{ + const uint8_t reg = idx / 4U; + const uint32_t pos = ((idx % 4U) * 8U); + const uint32_t mask = 0xFFU << pos; + + if (reg >= (sizeof(mpu->MAIR) / sizeof(mpu->MAIR[0]))) { + return; // invalid index + } + + mpu->MAIR[reg] = ((mpu->MAIR[reg] & ~mask) | ((attr << pos) & mask)); +} + +/** Set the memory attribute encoding. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU, idx, attr); +} + +#ifdef MPU_NS +/** Set the memory attribute encoding to the Non-secure MPU. +* \param idx The attribute index to be set [0-7] +* \param attr The attribute value to be set. +*/ +__STATIC_INLINE void ARM_MPU_SetMemAttr_NS(uint8_t idx, uint8_t attr) +{ + ARM_MPU_SetMemAttrEx(MPU_NS, idx, attr); +} +#endif + +/** Clear and disable the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegionEx(MPU_Type* mpu, uint32_t rnr) +{ + mpu->RNR = rnr; + mpu->RLAR = 0U; +} + +/** Clear and disable the given MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU, rnr); +} + +#ifdef MPU_NS +/** Clear and disable the given Non-secure MPU region. +* \param rnr Region number to be cleared. +*/ +__STATIC_INLINE void ARM_MPU_ClrRegion_NS(uint32_t rnr) +{ + ARM_MPU_ClrRegionEx(MPU_NS, rnr); +} +#endif + +/** Configure the given MPU region of the given MPU. +* \param mpu Pointer to MPU to be used. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegionEx(MPU_Type* mpu, uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + mpu->RNR = rnr; + mpu->RBAR = rbar; + mpu->RLAR = rlar; +} + +/** Configure the given MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU, rnr, rbar, rlar); +} + +#ifdef MPU_NS +/** Configure the given Non-secure MPU region. +* \param rnr Region number to be configured. +* \param rbar Value for RBAR register. +* \param rlar Value for RLAR register. +*/ +__STATIC_INLINE void ARM_MPU_SetRegion_NS(uint32_t rnr, uint32_t rbar, uint32_t rlar) +{ + ARM_MPU_SetRegionEx(MPU_NS, rnr, rbar, rlar); +} +#endif + +/** Memcopy with strictly ordered memory access, e.g. for register targets. +* \param dst Destination data is copied to. +* \param src Source data is copied from. +* \param len Amount of data words to be copied. +*/ +__STATIC_INLINE void orderedCpy(volatile uint32_t* dst, const uint32_t* __RESTRICT src, uint32_t len) +{ + uint32_t i; + for (i = 0U; i < len; ++i) + { + dst[i] = src[i]; + } +} + +/** Load the given number of MPU regions from a table to the given MPU. +* \param mpu Pointer to the MPU registers to be used. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_LoadEx(MPU_Type* mpu, uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + const uint32_t rowWordSize = sizeof(ARM_MPU_Region_t)/4U; + if (cnt == 1U) { + mpu->RNR = rnr; + orderedCpy(&(mpu->RBAR), &(table->RBAR), rowWordSize); + } else { + uint32_t rnrBase = rnr & ~(MPU_TYPE_RALIASES-1U); + uint32_t rnrOffset = rnr % MPU_TYPE_RALIASES; + + mpu->RNR = rnrBase; + while ((rnrOffset + cnt) > MPU_TYPE_RALIASES) { + uint32_t c = MPU_TYPE_RALIASES - rnrOffset; + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), c*rowWordSize); + table += c; + cnt -= c; + rnrOffset = 0U; + rnrBase += MPU_TYPE_RALIASES; + mpu->RNR = rnrBase; + } + + orderedCpy(&(mpu->RBAR)+(rnrOffset*2U), &(table->RBAR), cnt*rowWordSize); + } +} + +/** Load the given number of MPU regions from a table. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU, rnr, table, cnt); +} + +#ifdef MPU_NS +/** Load the given number of MPU regions from a table to the Non-secure MPU. +* \param rnr First region number to be configured. +* \param table Pointer to the MPU configuration table. +* \param cnt Amount of regions to be configured. +*/ +__STATIC_INLINE void ARM_MPU_Load_NS(uint32_t rnr, ARM_MPU_Region_t const* table, uint32_t cnt) +{ + ARM_MPU_LoadEx(MPU_NS, rnr, table, cnt); +} +#endif + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/tz_context.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/tz_context.h new file mode 100644 index 0000000000..0d09749f3a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/CMSIS_Include/tz_context.h @@ -0,0 +1,70 @@ +/****************************************************************************** + * @file tz_context.h + * @brief Context Management for Armv8-M TrustZone + * @version V1.0.1 + * @date 10. January 2018 + ******************************************************************************/ +/* + * Copyright (c) 2017-2018 Arm Limited. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the License); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined ( __ICCARM__ ) + #pragma system_include /* treat file as system include file for MISRA check */ +#elif defined (__clang__) + #pragma clang system_header /* treat file as system include file */ +#endif + +#ifndef TZ_CONTEXT_H +#define TZ_CONTEXT_H + +#include + +#ifndef TZ_MODULEID_T +#define TZ_MODULEID_T +/// \details Data type that identifies secure software modules called by a process. +typedef uint32_t TZ_ModuleId_t; +#endif + +/// \details TZ Memory ID identifies an allocated memory slot. +typedef uint32_t TZ_MemoryId_t; + +/// Initialize secure context memory system +/// \return execution status (1: success, 0: error) +uint32_t TZ_InitContextSystem_S (void); + +/// Allocate context memory for calling secure software modules in TrustZone +/// \param[in] module identifies software modules called from non-secure mode +/// \return value != 0 id TrustZone memory slot identifier +/// \return value 0 no memory available or internal error +TZ_MemoryId_t TZ_AllocModuleContext_S (TZ_ModuleId_t module); + +/// Free context memory that was previously allocated with \ref TZ_AllocModuleContext_S +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_FreeModuleContext_S (TZ_MemoryId_t id); + +/// Load secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_LoadContext_S (TZ_MemoryId_t id); + +/// Store secure context (called on RTOS thread context switch) +/// \param[in] id TrustZone memory slot identifier +/// \return execution status (1: success, 0: error) +uint32_t TZ_StoreContext_S (TZ_MemoryId_t id); + +#endif // TZ_CONTEXT_H diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_CodeRAM.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_CodeRAM.c new file mode 100644 index 0000000000..cee9ba617b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_CodeRAM.c @@ -0,0 +1,33 @@ +/** + ****************************************************************************** + * @file lib_CodeRAM.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Codes executed in SRAM. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_CodeRAM.h" + +/** + * @brief Enter idle mode with flash deep standby. + * @note This function is executed in RAM. + * @param None + * @retval None + */ +__RAM_FUNC void PMU_EnterIdle_FlashDSTB(void) +{ + /* Flash deep standby */ + FLASH->PASS = 0x55AAAA55; + FLASH->DSTB = 0xAA5555AA; + /* Enter Idle mode */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + __WFI(); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_LoadNVR.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_LoadNVR.c new file mode 100644 index 0000000000..e3fbc7c00e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_LoadNVR.c @@ -0,0 +1,700 @@ +/** + ****************************************************************************** + * @file lib_LoadNVR.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Load information from NVR. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_LoadNVR.h" + + +/** + * @breif Loads Analog trim data from NVR manually. + * @note Successful Operation: + * - Load [0x80DC0] or [0x80DD0] to ANA registers(B C D E) + * - Load [0x80DE0] or [0x80DE8] to ANA registers(10) + * @param None + * @retval 0: Function succeeded. + !0: Function failed. + bit[0]=1: Function failed(ANA registers(B C D E) Checksum error). + bit[1]=1: Function failed(ANA registers(10) Checksum error). + */ +uint32_t NVR_LoadANADataManual(void) +{ + uint32_t checksum; + uint32_t op_reg; + uint32_t ana_data; + uint32_t key_reg = 0xFFFFFFFF; + uint32_t ret = 0; + + /* Get Analog data1 */ + ana_data = *NVR_ANA_TRIMDATA1; + op_reg = *NVR_ANA_OPREG1; + /* Calculate checksum1 */ + checksum = ~(ana_data + op_reg + key_reg); + /* Compare checksum1 */ + if (checksum == (*NVR_ANA_CHECKSUM1)) + { + ANA->REGB = (uint8_t)(ana_data); + ANA->REGC = (uint8_t)(ana_data >> 8); + ANA->REGD = (uint8_t)(ana_data >> 16); + ANA->REGE = (uint8_t)(ana_data >> 24); + } + else + { + /* Get Analog data2 */ + ana_data = *NVR_ANA_TRIMDATA2; + op_reg = *NVR_ANA_OPREG2; + /* Calculate checksum2 */ + checksum = ~(ana_data + op_reg + key_reg); + /* Compare checksum2 */ + if (checksum == (*NVR_ANA_CHECKSUM2)) + { + ANA->REGB = (uint8_t)(ana_data); + ANA->REGC = (uint8_t)(ana_data >> 8); + ANA->REGD = (uint8_t)(ana_data >> 16); + ANA->REGE = (uint8_t)(ana_data >> 24); + } + else + { + ret |= BIT0; + } + } + + /* Get Analog data1 */ + ana_data = *NVR_ANA1_REG10; + /* Calculate checksum1 */ + checksum = ~ana_data; + /* Compare checksum1 */ + if (checksum == (*NVR_ANA1_REG10_CHKSUM)) + { + ANA->REG10 = (uint8_t)(ana_data); + } + else + { + /* Get Analog data2 */ + ana_data = *NVR_ANA2_REG10; + /* Calculate checksum2 */ + checksum = ~ana_data; + /* Compare checksum2 */ + if (checksum == (*NVR_ANA2_REG10_CHKSUM)) + { + ANA->REG10 = (uint8_t)(ana_data); + } + else + { + ret |= BIT1; + } + } + + return ret; +} + +/** + * @breif Gets the parameters of ADC voltage measuring. + * @note Voltage(unit:V) = aParameter*ADC_DATA + bParameter + OffsetParameter + * ADC_DATA: ADC channel original data + * aParameter/bParameter/OffsetParameter: Get from this function + * @param [in]Mode: + * NVR_3V_EXTERNAL_NODIV + * NVR_3V_EXTERNAL_RESDIV + * NVR_3V_BAT1_RESDIV + * NVR_3V_BATRTC_RESDIV + * NVR_5V_EXTERNAL_NODIV + * NVR_5V_EXTERNAL_RESDIV + * NVR_5V_BAT1_RESDIV + * NVR_5V_BATRTC_RESDIV + * @param [out]Parameter: The parameters get from NVR + * @retval 0: Function succeeded. + 1: Function failed(Checksum error). + */ +uint32_t NVR_GetVoltageParameters(uint32_t Mode, NVR_ADCVOLPARA *Parameter) +{ + uint32_t checksum; + uint32_t i; + int32_t tmp_int; + + /* Check the parameters */ + assert_parameters(IS_NVR_ADCVOL_MODE(Mode)); + + /*----- Power supply: 5V -----*/ + if (0x100UL & Mode) + { + /* Parameter */ + checksum = 0UL; + for (i=0; i<8; i++) + checksum += *(NVR_5VPARA_BASEADDR1+i); + checksum = ~(checksum); + if (checksum != *(NVR_5VPARA_BASEADDR1+i)) /* Checksum1 error */ + { + checksum = 0UL; + for (i=0; i<8; i++) + checksum += *(NVR_5VPARA_BASEADDR2+i); + checksum = ~(checksum); + if (checksum != *(NVR_5VPARA_BASEADDR2+i)) /* Checksum2 error */ + { + return 1; + } + else + { + tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR2+2*(Mode-0x100UL)); + Parameter->aParameter = (float)(tmp_int / 100000.0); + tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR2+2*(Mode-0x100UL)+1); + Parameter->bParameter = (float)(tmp_int / 100000.0); + } + } + else + { + tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR1+2*(Mode-0x100UL)); + Parameter->aParameter = (float)(tmp_int / 100000.0); + tmp_int = (int32_t)*(NVR_5VPARA_BASEADDR1+2*(Mode-0x100UL)+1); + Parameter->bParameter = (float)(tmp_int / 100000.0); + } + /* Offset */ + /* Calculate checksum1 */ + checksum = 0UL; + for (i = 0; i < 4; i++) + checksum += *(NVR_5VADCCHx_NODIV1 + i); + checksum = ~(checksum); + if (checksum != *(NVR_5VADCCHx_NODIV1 + i)) + { + /* Calculate checksum2 */ + checksum = 0UL; + for (i = 0; i < 4; i++) + checksum += *(NVR_5VADCCHx_NODIV2+i); + checksum = ~(checksum); + if (checksum != *(NVR_5VADCCHx_NODIV2 + i)) + { + return 1; + } + else + { + Parameter->OffsetParameter = (float)((int32_t)*(NVR_5VADCCHx_NODIV2 + (Mode-0x100UL))); + return 0; + } + } + else + { + Parameter->OffsetParameter = (float)((int32_t)*(NVR_5VADCCHx_NODIV1 + (Mode-0x100UL))); + return 0; + } + } + /*----- Power supply: 3.3V -----*/ + else + { + checksum = 0UL; + for (i=0; i<8; i++) + checksum += *(NVR_3VPARA_BASEADDR1+i); + checksum = ~(checksum); + if (checksum != *(NVR_3VPARA_BASEADDR1+i)) /* Checksum1 error */ + { + checksum = 0UL; + for (i=0; i<8; i++) + checksum += *(NVR_3VPARA_BASEADDR2+i); + checksum = ~(checksum); + if (checksum != *(NVR_3VPARA_BASEADDR2+i)) /* Checksum2 error */ + { + return 1; + } + else + { + tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR2+2*(Mode)); + Parameter->aParameter = (float)(tmp_int / 100000.0); + tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR2+2*(Mode)+1); + Parameter->bParameter = (float)(tmp_int / 100000.0); + } + } + else + { + tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR1+2*(Mode)); + Parameter->aParameter = (float)(tmp_int / 100000.0); + tmp_int = (int32_t)*(NVR_3VPARA_BASEADDR1+2*(Mode)+1); + Parameter->bParameter = (float)(tmp_int / 100000.0); + } + /* Calculate checksum1 */ + checksum = 0UL; + for (i = 0; i < 4; i++) + checksum += *(NVR_3VADCCHx_NODIV1 + i); + checksum = ~(checksum); + if (checksum != *(NVR_3VADCCHx_NODIV1 + i)) + { + /* Calculate checksum2 */ + checksum = 0UL; + for (i = 0; i < 4; i++) + checksum += *(NVR_3VADCCHx_NODIV2+i); + checksum = ~(checksum); + if (checksum != *(NVR_3VADCCHx_NODIV2 + i)) + { + return 1; + } + else + { + Parameter->OffsetParameter = (float)((int32_t)*(NVR_3VADCCHx_NODIV2 + (Mode))); + return 0; + } + } + else + { + Parameter->OffsetParameter = (float)((int32_t)*(NVR_3VADCCHx_NODIV1 + (Mode))); + return 0; + } + } +} + +/** + * @breif Gets RTC parameters(P0 P1 P2). + * @param [out]TempParams The pointer to struct NVR_TempParams. + * @retval 0: Function succeeded. + !0: Function failed. + bit[0]=1: Temperature Measure delta information checksum error, default value 0. + bit[1]=1: P0/P1/P2 paramters checksum error, default value 0 + */ +uint32_t NVR_GetTempParameters(NVR_TempParams *TempParams) +{ + uint32_t checksum; + uint32_t data_u32[4]; + int32_t TempDelta; + uint32_t retval = 0; + +/*------------------------ Temperature Measure delta -------------------------*/ + data_u32[0] = *NVR_REALTEMP1; + data_u32[1] = *NVR_MEATEMP1; + /* Calculate checksum1 */ + checksum = ~(data_u32[0] + data_u32[1]); + if (checksum == (*NVR_TEMP_CHECKSUM1)) //checksum1 true + { + TempDelta = (int32_t)data_u32[0] - (int32_t)data_u32[1]; + } + else + { + data_u32[0] = *NVR_REALTEMP2; + data_u32[1] = *NVR_MEATEMP2; + /* Calculate checksum2 */ + checksum = ~(data_u32[0] + data_u32[1]); + if (checksum == (*NVR_TEMP_CHECKSUM2)) //checksum2 true + { + TempDelta = (int32_t)data_u32[0] - (int32_t)data_u32[1]; + } + else + { + TempDelta = 0; + retval |= BIT0; + } + } +/*------------------------------ P parameters --------------------------------*/ + + data_u32[0] = *NVR_RTC1_P1_P0; + data_u32[1] = *NVR_RTC1_P2; + data_u32[2] = *NVR_RTC1_P5_P4; + data_u32[3] = *NVR_RTC1_P7_P6; + + /* Calculate checksum1 */ + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3]); + if (checksum == (*NVR_RTC1_PCHECHSUM)) //checksum1 true + { + /* Get information */ + TempParams->RTCTempP0 = (int16_t)(data_u32[0]); + TempParams->RTCTempP1 = (int16_t)(data_u32[0] >> 16); + TempParams->RTCTempP2 = (int32_t)((int32_t)(data_u32[1]) + (TempDelta*256)); + } + else + { + data_u32[0] = *NVR_RTC2_P1_P0; + data_u32[1] = *NVR_RTC2_P2; + data_u32[2] = *NVR_RTC2_P5_P4; + data_u32[3] = *NVR_RTC2_P7_P6; + /* Calculate checksum2 */ + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3]); + if (checksum == (*NVR_RTC2_PCHECHSUM)) //checksum2 true + { + /* Get information */ + TempParams->RTCTempP0 = (int16_t)(data_u32[0]); + TempParams->RTCTempP1 = (int16_t)(data_u32[0] >> 16); + TempParams->RTCTempP2 = (int32_t)((int32_t)(data_u32[1]) + (TempDelta*256)); + } + else + { + /* Get information */ + TempParams->RTCTempP0 = 0; + TempParams->RTCTempP1 = 0; + TempParams->RTCTempP2 = 0; + retval |= BIT1; + } + } + return retval; +} + +/** + * @breif Loads RTC ACPx pramameters from NVR to RTC registers. + Get RTC pramameters. + * @param [out]RTCTempData The pointer to struct NVR_RTCINFO. + [in]DivCLKSource The RTC division output clock source frequency + * @retval 0: Function succeeded. + !0: Function not succeeded, load default value to registers. + bit[0]=1: Temperature Measure delta information checksum error, default value 0. + bit[1]=1: P paramters checksum error, default value 0 + bit[2]=1: P4 checksum error, default value is 0 + bit[3]=1: ACKx checksum error, default value 0 + bit[4]=1: ACTI checksum error, default value is 0 + bit[5]=1: ACKTEMP checksum error, defalut value is 0 + */ +uint32_t NVR_GetInfo_LoadRTCData(NVR_RTCINFO *RTCTempData, uint32_t DivCLKSource) +{ + uint32_t data_u32[5]; + uint32_t checksum; + float pclk_mul; + uint32_t retval = 0; + +/*------------------------ Temperature Measure delta -------------------------*/ + data_u32[0] = *NVR_REALTEMP1; + data_u32[1] = *NVR_MEATEMP1; + /* Calculate checksum1 */ + checksum = ~(data_u32[0] + data_u32[1]); + if (checksum == (*NVR_TEMP_CHECKSUM1)) //checksum1 true + { + RTCTempData->RTCTempDelta = (int32_t)data_u32[0] - (int32_t)data_u32[1]; + } + else + { + data_u32[0] = *NVR_REALTEMP2; + data_u32[1] = *NVR_MEATEMP2; + /* Calculate checksum2 */ + checksum = ~(data_u32[0] + data_u32[1]); + if (checksum == (*NVR_TEMP_CHECKSUM2)) //checksum2 true + { + RTCTempData->RTCTempDelta = (int32_t)data_u32[0] - (int32_t)data_u32[1]; + } + else + { + RTCTempData->RTCTempDelta = 0; + retval |= BIT0; + } + } + +/*------------------------------ P parameters --------------------------------*/ + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* RTC div output clock source */ + pclk_mul = DivCLKSource / 6553600.0; + + data_u32[0] = *NVR_RTC1_P1_P0; + data_u32[1] = *NVR_RTC1_P2; + data_u32[2] = *NVR_RTC1_P5_P4; + data_u32[3] = *NVR_RTC1_P7_P6; + /* Calculate checksum1 */ + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3]); + if (checksum == (*NVR_RTC1_PCHECHSUM)) //checksum1 true + { + /* Get information */ + RTCTempData->RTCTempP0 = (int16_t)(data_u32[0]); + RTCTempData->RTCTempP1 = (int16_t)(data_u32[0] >> 16); + RTCTempData->RTCTempP2 = (int32_t)((int32_t)(data_u32[1]) + (RTCTempData->RTCTempDelta*256)); + RTCTempData->RTCTempP5 = (int16_t)(data_u32[2] >> 16); + RTCTempData->RTCTempP6 = (int16_t)(data_u32[3] * pclk_mul); + RTCTempData->RTCTempP7 = (int16_t)(data_u32[3] >> 16); + + /* Load data to ACPx register */ + RTC->ACP0 = (uint16_t)(data_u32[0] & 0xFFFF); + RTC->ACP1 = (uint16_t)((data_u32[0] >> 16) & 0xFFFF); + RTC->ACP2 = (uint32_t)((int32_t)(data_u32[1]) + (RTCTempData->RTCTempDelta*256)); + RTC->ACP5 = (uint16_t)((data_u32[2] >> 16) & 0xFFFF); + RTC->ACP6 = ((uint16_t)((int16_t)(data_u32[3] * pclk_mul))); + RTC->ACP7 = (uint16_t)((data_u32[3] >> 16) & 0xFFFF); + } + else + { + data_u32[0] = *NVR_RTC2_P1_P0; + data_u32[1] = *NVR_RTC2_P2; + data_u32[2] = *NVR_RTC2_P5_P4; + data_u32[3] = *NVR_RTC2_P7_P6; + /* Calculate checksum2 */ + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3]); + if (checksum == (*NVR_RTC2_PCHECHSUM)) //checksum2 true + { + /* Get information */ + RTCTempData->RTCTempP0 = (int16_t)(data_u32[0]); + RTCTempData->RTCTempP1 = (int16_t)(data_u32[0] >> 16); + RTCTempData->RTCTempP2 = (int32_t)((int32_t)(data_u32[1]) + (RTCTempData->RTCTempDelta*256)); + RTCTempData->RTCTempP5 = (int16_t)(data_u32[2] >> 16); + RTCTempData->RTCTempP6 = (int16_t)(data_u32[3] * pclk_mul); + RTCTempData->RTCTempP7 = (int16_t)(data_u32[3] >> 16); + + /* Load data to ACPx register */ + RTC->ACP0 = (uint16_t)(data_u32[0] & 0xFFFF); + RTC->ACP1 = (uint16_t)((data_u32[0] >> 16) & 0xFFFF); + RTC->ACP2 = (uint32_t)((int32_t)(data_u32[1]) + (RTCTempData->RTCTempDelta*256)); + RTC->ACP5 = (uint16_t)((data_u32[2] >> 16) & 0xFFFF); + RTC->ACP6 = (uint16_t)((int16_t)(data_u32[3] * pclk_mul)); + RTC->ACP7 = (uint16_t)((data_u32[3] >> 16) & 0xFFFF); + } + else + { + /* Get information */ + RTCTempData->RTCTempP0 = 0; + RTCTempData->RTCTempP1 = 0; + RTCTempData->RTCTempP2 = 0; + RTCTempData->RTCTempP5 = 0; + RTCTempData->RTCTempP6 = 0; + RTCTempData->RTCTempP7 = 0; + retval |= BIT1; + } + } + +/*----------------------------------- P4 -------------------------------------*/ + /* Calculate checksum1 */ + data_u32[0] = *NVR_RTC1_P4; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC1_P4_CHKSUM))//checksum1 true + { + /* Get information */ + RTCTempData->RTCTempP4 = (int16_t)data_u32[0]; + RTC->ACP4 = data_u32[0]; + } + else + { + data_u32[0] = *NVR_RTC2_P4; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC2_P4_CHKSUM))//checksum2 true + { + /* Get information */ + RTCTempData->RTCTempP4 = (int16_t)data_u32[0]; + RTC->ACP4 = data_u32[0]; + } + else + { + RTCTempData->RTCTempP4 = 0; + + retval |= BIT2; + } + } + +/*-------------------------- RTC ACKx parameters -----------------------------*/ + data_u32[0] = *NVR_RTC1_ACK0; + data_u32[1] = *NVR_RTC1_ACK1; + data_u32[2] = *NVR_RTC1_ACK2; + data_u32[3] = *NVR_RTC1_ACK3; + data_u32[4] = *NVR_RTC1_ACK4; + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3] + data_u32[4]); + if (checksum == (*NVR_RTC1_ACK_CHKSUM))//checksum1 true + { + /* Get information */ + RTCTempData->RTCTempK0 = data_u32[0]; + RTCTempData->RTCTempK1 = data_u32[1]; + RTCTempData->RTCTempK2 = data_u32[2]; + RTCTempData->RTCTempK3 = data_u32[3]; + RTCTempData->RTCTempK4 = data_u32[4]; + + /* Load data to ACKx register */ + RTC->ACK[0] = data_u32[0]; + RTC->ACK[1] = data_u32[1]; + RTC->ACK[2] = data_u32[2]; + RTC->ACK[3] = data_u32[3]; + RTC->ACK[4] = data_u32[4]; + } + else + { + data_u32[0] = *NVR_RTC2_ACK0; + data_u32[1] = *NVR_RTC2_ACK1; + data_u32[2] = *NVR_RTC2_ACK2; + data_u32[3] = *NVR_RTC2_ACK3; + data_u32[4] = *NVR_RTC2_ACK4; + checksum = ~(data_u32[0] + data_u32[1] + data_u32[2] + data_u32[3] + data_u32[4]); + if (checksum == (*NVR_RTC2_ACK_CHKSUM))//checksum2 true + { + /* Get information */ + RTCTempData->RTCTempK0 = data_u32[0]; + RTCTempData->RTCTempK1 = data_u32[1]; + RTCTempData->RTCTempK2 = data_u32[2]; + RTCTempData->RTCTempK3 = data_u32[3]; + RTCTempData->RTCTempK4 = data_u32[4]; + + /* Load data to ACKx register */ + RTC->ACK[0] = data_u32[0]; + RTC->ACK[1] = data_u32[1]; + RTC->ACK[2] = data_u32[2]; + RTC->ACK[3] = data_u32[3]; + RTC->ACK[4] = data_u32[4]; + } + else + { + /* Get information */ + RTCTempData->RTCTempK0 = 0; + RTCTempData->RTCTempK1 = 0; + RTCTempData->RTCTempK2 = 0; + RTCTempData->RTCTempK3 = 0; + RTCTempData->RTCTempK4 = 0; + + retval |= BIT3; + } + } + +/*-------------------------- RTC ACTI parameters -----------------------------*/ + data_u32[0] = *NVR_RTC1_ACTI; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC1_ACTI_CHKSUM)) + { + /* Get information */ + RTCTempData->RTCACTI = data_u32[0]; + /* Load data to ACKx register */ + RTC->ACTI = data_u32[0]; + } + else + { + data_u32[0] = *NVR_RTC2_ACTI; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC2_ACTI_CHKSUM)) + { + /* Get information */ + RTCTempData->RTCACTI = data_u32[0]; + /* Load data to ACKx register */ + RTC->ACTI = data_u32[0]; + } + else + { + /* Get information */ + RTCTempData->RTCACTI = 0; + + retval |= BIT4; + } + } + +/*------------------------- RTC ACKTemp parameters ---------------------------*/ + data_u32[0] = *NVR_RTC1_ACKTEMP; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC1_ACKTEMP_CHKSUM)) + { + /* Get information */ + RTCTempData->RTCACKTemp = data_u32[0]; + /* Load data to ACKx register */ + RTC->ACKTEMP = data_u32[0]; + } + else + { + data_u32[0] = *NVR_RTC2_ACKTEMP; + checksum = ~data_u32[0]; + if (checksum == (*NVR_RTC2_ACKTEMP_CHKSUM)) + { + /* Get information */ + RTCTempData->RTCACKTemp = data_u32[0]; + /* Load data to ACKx register */ + RTC->ACKTEMP = data_u32[0]; + } + else + { + /* Get information */ + RTCTempData->RTCACKTemp = 0; + + retval |= BIT5; + } + } +/*--------------------------------- ACF200 -----------------------------------*/ + RTCTempData->RTCACF200 = (uint32_t)(int32_t)((pclk_mul * 0x320000)); + RTC->ACF200 = (uint32_t)(int32_t)((pclk_mul * 0x320000)); + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + return retval; +} + +/** + * @breif Gets Power/Clock Measure result. + * @param [out]MEAResult The pointer to struct NVR_PWRMEARES. + * @retval 0: Function succeeded. + 1: Function failed(Checksum error). + */ +uint32_t NVR_GetMISCGain(NVR_MISCGain *MEAResult) +{ + uint32_t avcc_data, dvcc_data, bgp_data, rcl_data, rch_data; + uint32_t checksum; + + avcc_data = *NVR_AVCC_MEA1; + dvcc_data = *NVR_DVCC_MEA1; + bgp_data = *NVR_BGP_MEA1; + rcl_data = *NVR_RCL_MEA1; + rch_data = *NVR_RCH_MEA1; + /* Calculate checksum1 */ + checksum = ~(avcc_data + dvcc_data + bgp_data + rcl_data + rch_data); + if (checksum == (*NVR_PWR_CHECKSUM1)) + { + MEAResult->AVCCMEAResult = avcc_data; + MEAResult->DVCCMEAResult = dvcc_data; + MEAResult->BGPMEAResult = bgp_data; + MEAResult->RCLMEAResult = rcl_data; + MEAResult->RCHMEAResult = rch_data; + return 0; + } + + avcc_data = *NVR_AVCC_MEA2; + dvcc_data = *NVR_DVCC_MEA2; + bgp_data = *NVR_BGP_MEA2; + rcl_data = *NVR_RCL_MEA2; + rch_data = *NVR_RCH_MEA2; + /* Calculate checksum2 */ + checksum = ~(avcc_data + dvcc_data + bgp_data + rcl_data + rch_data); + if (checksum == (*NVR_PWR_CHECKSUM2)) + { + MEAResult->AVCCMEAResult = avcc_data; + MEAResult->DVCCMEAResult = dvcc_data; + MEAResult->BGPMEAResult = bgp_data; + MEAResult->RCLMEAResult = rcl_data; + MEAResult->RCHMEAResult = rch_data; + return 0; + } + else + { + return 1; + } +} + +/** + * @breif Gets Chip ID. + * @param [out]ChipID The pointer to struct NVR_CHIPID. + * @retval 0: Function succeeded. + 1: Function failed(Checksum error). + */ +uint32_t NVR_GetChipID(NVR_CHIPID *ChipID) +{ + uint32_t id0, id1; + uint32_t checksum; + + id0 = *NVR_CHIP1_ID0; + id1 = *NVR_CHIP1_ID1; + /* Calculate checksum1 */ + checksum = ~(id0 + id1); + if (checksum == (*NVR_CHIP1_CHECKSUM)) + { + ChipID->ChipID0 = id0; + ChipID->ChipID1 = id1; + return 0; + } + + id0 = *NVR_CHIP2_ID0; + id1 = *NVR_CHIP2_ID1; + /* Calculate checksum2 */ + checksum = ~(id0 + id1); + if (checksum == (*NVR_CHIP2_CHECKSUM)) + { + ChipID->ChipID0 = id0; + ChipID->ChipID1 = id1; + return 0; + } + else + { + return 1; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_cortex.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_cortex.c new file mode 100644 index 0000000000..74c87b8f64 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/lib_cortex.c @@ -0,0 +1,198 @@ +/** + ****************************************************************************** + * @file lib_cortex.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Cortex module driver. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_cortex.h" +#include "core_cm0.h" + +/** + * @brief 1. Clears Pending of a device specific External Interrupt. + * 2. Sets Priority of a device specific External Interrupt. + * 3. Enables a device specific External Interrupt. + * @param IRQn: External interrupt number . + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to target.h file) + * @param Priority: The preemption priority for the IRQn channel. + * This parameter can be a value between 0 and 3. + * A lower priority value indicates a higher priority + * @retval None + */ +void CORTEX_SetPriority_ClearPending_EnableIRQ(IRQn_Type IRQn, uint32_t Priority) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + assert_parameters(IS_CORTEX_NVIC_PREEMPTION_PRIORITY(Priority)); + + /* Clear Pending Interrupt */ + NVIC_ClearPendingIRQ(IRQn); + /* Set Interrupt Priority */ + NVIC_SetPriority(IRQn, Priority); + /* Enable Interrupt in NVIC */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Enables a device specific interrupt in the NVIC interrupt controller. + * @note To configure interrupts priority correctly before calling it. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval None + */ +void CORTEX_NVIC_EnableIRQ(IRQn_Type IRQn) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + /* Enable interrupt in NVIC */ + NVIC_EnableIRQ(IRQn); +} + +/** + * @brief Disables a device specific interrupt in the NVIC interrupt controller. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval None + */ +void CORTEX_NVIC_DisableIRQ(IRQn_Type IRQn) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + /* Disable interrupt in NVIC */ + NVIC_DisableIRQ(IRQn); +} + +/** + * @brief Initiates a system reset request to reset the MCU. + * @retval None + */ +void CORTEX_NVIC_SystemReset(void) +{ + /* System Reset */ + NVIC_SystemReset(); +} + +/** + * @brief Gets the Pending bit of an interrupt. + * @param IRQn: External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval 0 Interrupt status is not pending. + 1 Interrupt status is pending. + */ +uint32_t CORTEX_NVIC_GetPendingIRQ(IRQn_Type IRQn) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + /* Get priority for Cortex-M0 system or device specific interrupts */ + return NVIC_GetPendingIRQ(IRQn); +} + +/** + * @brief Sets Pending bit of an external interrupt. + * @param IRQn External interrupt number + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval None + */ +void CORTEX_NVIC_SetPendingIRQ(IRQn_Type IRQn) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + /* Set interrupt pending */ + NVIC_SetPendingIRQ(IRQn); +} + +/** + * @brief Clears the pending bit of an external interrupt. + * @param IRQn External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval None + */ +void CORTEX_NVIC_ClearPendingIRQ(IRQn_Type IRQn) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_DEVICE_IRQ(IRQn)); + /* Clear interrupt pending */ + NVIC_ClearPendingIRQ(IRQn); +} + +/** + * @brief Gets the priority of an interrupt. + * @param IRQn: External interrupt number. + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to the appropriate CMSIS device file (target.h)) + * @retval Interrupt Priority. Value is aligned automatically to the implemented + * priority bits of the microcontroller. + */ +uint32_t CORTEX_NVIC_GetPriority(IRQn_Type IRQn) +{ + /* Get priority for Cortex-M0 system or device specific interrupts */ + return NVIC_GetPriority(IRQn); +} + +/** + * @brief Sets the priority of an interrupt. + * @param IRQn: External interrupt number . + * This parameter can be an enumerator of IRQn_Type enumeration + * (For the complete target Devices IRQ Channels list, please refer to target.h file) + * @param Priority: The preemption priority for the IRQn channel. + * This parameter can be a value between 0 and 3. + * A lower priority value indicates a higher priority + * @retval None + */ +void CORTEX_NVIC_SetPriority(IRQn_Type IRQn, uint32_t Priority) +{ + /* Check parameters */ + assert_parameters(IS_CORTEX_NVIC_PREEMPTION_PRIORITY(Priority)); + /* Get priority for Cortex-M0 system or device specific interrupts */ + NVIC_SetPriority(IRQn, Priority); +} + +/** + * @brief Initializes the System Timer and its interrupt, and starts the System Tick Timer. + * Counter is in free running mode to generate periodic interrupts. + * @param TicksNumb: Specifies the ticks Number of ticks between two interrupts. + * @retval status: - 0 Function succeeded. + * - 1 Function failed. + */ +uint32_t CORTEX_SystemTick_Config(uint32_t TicksNum) +{ + return SysTick_Config(TicksNum); +} + +/** + * @brief Delay N system-clock cycle. + * @param nClock < 0x1000000 + * @retval None + */ +void CORTEX_Delay_nSysClock(__IO uint32_t nClock) +{ + uint32_t tmp; + + SysTick->LOAD = nClock; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk \ + |SysTick_CTRL_ENABLE_Msk; + + do + { + tmp = SysTick->CTRL; + } + while (!(tmp & SysTick_CTRL_COUNTFLAG_Msk)); + + SysTick->CTRL = 0; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/system_target.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/system_target.c new file mode 100644 index 0000000000..d8dcc96787 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/device/system_target.c @@ -0,0 +1,81 @@ +/** + ****************************************************************************** + * @file system_target.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief system source file. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "target.h" + +#define NVR_REGINFOCOUNT1 (0x80400) +#define NVR_REGINFOBAKOFFSET (0x100) + +/** + * @brief Setup the microcontroller system + * @note This function should be used only after reset. + * @param None + * @retval None + */ +void SystemInit(void) +{ + uint32_t i,nCount,nValue,nAddress,nChecksum; + + nCount = *(__IO uint32_t *)NVR_REGINFOCOUNT1; + nChecksum = nCount; + nChecksum = ~nChecksum; + if(nChecksum != *(__IO uint32_t *)(NVR_REGINFOCOUNT1+4)) + { + nCount = *(__IO uint32_t *)(NVR_REGINFOCOUNT1+NVR_REGINFOBAKOFFSET); + nChecksum = nCount; + nChecksum = ~nChecksum; + if(nChecksum != *(__IO uint32_t *)(NVR_REGINFOCOUNT1+NVR_REGINFOBAKOFFSET+4)) + { + while(1); + } + } + + for(i=0; i=0x40014800) && (nAddress<=0x40015000)) + { + RTC_WriteRegisters(nAddress, &nValue, 1); + } + else + { + *(__IO uint32_t *)(nAddress) = nValue; + } + } +} + +/** + * @brief Initializes registers. + * @param None + * @retval None + */ +void SystemUpdate(void) +{ + +} + + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_CodeRAM.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_CodeRAM.h new file mode 100644 index 0000000000..40dc6f0ec5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_CodeRAM.h @@ -0,0 +1,35 @@ +/** + ****************************************************************************** + * @file lib_CodeRAM.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Codes executed in SRAM. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CODERAM_H +#define __LIB_CODERAM_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + + +/* Exported Functions ------------------------------------------------------- */ + +__RAM_FUNC void PMU_EnterIdle_FlashDSTB(void) __IN_RAMSECTION; + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_CODERAM_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_LoadNVR.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_LoadNVR.h new file mode 100644 index 0000000000..b429b19513 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_LoadNVR.h @@ -0,0 +1,235 @@ +/** + ****************************************************************************** + * @file lib_LoadNVR.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Load information from NVR. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_LOADNVR_H +#define __LIB_LOADNVR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Power Measure Result */ +typedef struct +{ + uint32_t AVCCMEAResult; // LDO33 Measure Result + uint32_t DVCCMEAResult; // LDO15 Measure Result + uint32_t BGPMEAResult; // BGP Measure Result + uint32_t RCLMEAResult; // RCL Measure Result + uint32_t RCHMEAResult; // RCH Measure Result +} NVR_MISCGain; + +/* Chip ID */ +typedef struct +{ + uint32_t ChipID0; // ID word 0 + uint32_t ChipID1; // ID word 1 +} NVR_CHIPID; + +/* Temperature information */ +typedef struct +{ + float TempOffset; +} NVR_TEMPINFO; + +/* LCD information */ +typedef struct +{ + uint32_t MEALCDLDO; // Measure LCD LDO pre trim value + uint32_t MEALCDVol; // VLCD setting +} NVR_LCDINFO; + +/* RTC(temp) information */ +typedef struct +{ + int16_t RTCTempP0; //P0 + int16_t RTCTempP1; //P1 + int32_t RTCTempP2; //P2 + int16_t RTCTempP4; //P4 + int16_t RTCTempP5; //P5 + int16_t RTCTempP6; //P6 + int16_t RTCTempP7; //P7 + int16_t RTCTempK0; //K0 + int16_t RTCTempK1; //K1 + int16_t RTCTempK2; //K2 + int16_t RTCTempK3; //K3 + int16_t RTCTempK4; //K4 + int16_t RTCACTI; //Center temperature + uint32_t RTCACKTemp; //section X temperature + int32_t RTCTempDelta; //Temperature delta + uint32_t RTCACF200; //RTC_ACF200 +} NVR_RTCINFO; + +/* RTC(temp) information */ +typedef struct +{ + int16_t RTCTempP0; //P0 + int16_t RTCTempP1; //P1 + int32_t RTCTempP2; //P2 +} NVR_TempParams; + +/* ADC Voltage Parameters */ +typedef struct +{ + float aParameter; + float bParameter; + float OffsetParameter; +} NVR_ADCVOLPARA; +//Mode +#define NVR_3V_EXTERNAL_NODIV (0x000UL) // Power supply: 3.3V; Channel: External; Divider modeL: None +#define NVR_3V_EXTERNAL_RESDIV (0x001UL) // Power supply: 3.3V; Channel: External; Divider modeL: Resistive +#define NVR_3V_BAT1_RESDIV (0x002UL) // Power supply: 3.3V; Channel: VDD; Divider modeL: Resistive +#define NVR_3V_BATRTC_RESDIV (0x003UL) // Power supply: 3.3V; Channel: BATRTC; Divider modeL: Resistive +#define NVR_5V_EXTERNAL_NODIV (0x100UL) // Power supply: 5V; Channel: External; Divider modeL: None +#define NVR_5V_EXTERNAL_RESDIV (0x101UL) // Power supply: 5V; Channel: External; Divider modeL: Resistive +#define NVR_5V_BAT1_RESDIV (0x102UL) // Power supply: 5V; Channel: VDD; Divider modeL: Resistive +#define NVR_5V_BATRTC_RESDIV (0x103UL) // Power supply: 5V; Channel: BATRTC; Divider modeL: Resistive +#define IS_NVR_ADCVOL_MODE(__MODE__) (((__MODE__) == NVR_3V_EXTERNAL_NODIV) ||\ + ((__MODE__) == NVR_3V_EXTERNAL_RESDIV) ||\ + ((__MODE__) == NVR_3V_BAT1_RESDIV) ||\ + ((__MODE__) == NVR_3V_BATRTC_RESDIV) ||\ + ((__MODE__) == NVR_5V_EXTERNAL_NODIV) ||\ + ((__MODE__) == NVR_5V_EXTERNAL_RESDIV) ||\ + ((__MODE__) == NVR_5V_BAT1_RESDIV) ||\ + ((__MODE__) == NVR_5V_BATRTC_RESDIV)) + +//VOLMode +#define NVR_MEARES_3V 0 +#define NVR_MEARES_5V 1 +#define IS_MEARES(__VOLMODE__) (((__VOLMODE__) == NVR_MEARES_3V) ||\ + ((__VOLMODE__) == NVR_MEARES_5V)) +/********** NVR Address **********/ +//ADC Voltage Parameters +#define NVR_3VPARA_BASEADDR1 (__IO uint32_t *)(0x80C48) +#define NVR_3VPARA_BASEADDR2 (__IO uint32_t *)(0x80C6C) +#define NVR_5VPARA_BASEADDR1 (__IO uint32_t *)(0x80C00) +#define NVR_5VPARA_BASEADDR2 (__IO uint32_t *)(0x80C24) +//RTC DATA +//P4 +#define NVR_RTC1_P4 (__IO uint32_t *)(0x80800) +#define NVR_RTC1_P4_CHKSUM (__IO uint32_t *)(0x80804) +#define NVR_RTC2_P4 (__IO uint32_t *)(0x80808) +#define NVR_RTC2_P4_CHKSUM (__IO uint32_t *)(0x8080C) +//ACK1~ACK5 +#define NVR_RTC1_ACK0 (__IO uint32_t *)(0x80810) +#define NVR_RTC1_ACK1 (__IO uint32_t *)(0x80814) +#define NVR_RTC1_ACK2 (__IO uint32_t *)(0x80818) +#define NVR_RTC1_ACK3 (__IO uint32_t *)(0x8081C) +#define NVR_RTC1_ACK4 (__IO uint32_t *)(0x80820) +#define NVR_RTC1_ACK_CHKSUM (__IO uint32_t *)(0x80824) +#define NVR_RTC2_ACK0 (__IO uint32_t *)(0x80828) +#define NVR_RTC2_ACK1 (__IO uint32_t *)(0x8082C) +#define NVR_RTC2_ACK2 (__IO uint32_t *)(0x80830) +#define NVR_RTC2_ACK3 (__IO uint32_t *)(0x80834) +#define NVR_RTC2_ACK4 (__IO uint32_t *)(0x80838) +#define NVR_RTC2_ACK_CHKSUM (__IO uint32_t *)(0x8083C) +//ACTI +#define NVR_RTC1_ACTI (__IO uint32_t *)(0x80840) +#define NVR_RTC1_ACTI_CHKSUM (__IO uint32_t *)(0x80844) +#define NVR_RTC2_ACTI (__IO uint32_t *)(0x80848) +#define NVR_RTC2_ACTI_CHKSUM (__IO uint32_t *)(0x8084C) +//ACKTEMP +#define NVR_RTC1_ACKTEMP (__IO uint32_t *)(0x80850) +#define NVR_RTC1_ACKTEMP_CHKSUM (__IO uint32_t *)(0x80854) +#define NVR_RTC2_ACKTEMP (__IO uint32_t *)(0x80858) +#define NVR_RTC2_ACKTEMP_CHKSUM (__IO uint32_t *)(0x8085C) +//Analog trim data +#define NVR_ANA_TRIMDATA1 (__IO uint32_t *)(0x80DC0) +#define NVR_ANA_OPREG1 (__IO uint32_t *)(0x80DC4) +#define NVR_ANA_KEYREG1 (__IO uint32_t *)(0x80DC8) +#define NVR_ANA_CHECKSUM1 (__IO uint32_t *)(0x80DCC) +#define NVR_ANA_TRIMDATA2 (__IO uint32_t *)(0x80DD0) +#define NVR_ANA_OPREG2 (__IO uint32_t *)(0x80DD4) +#define NVR_ANA_KEYREG2 (__IO uint32_t *)(0x80DD8) +#define NVR_ANA_CHECKSUM2 (__IO uint32_t *)(0x80DDC) +#define NVR_ANA1_REG10 (__IO uint32_t *)(0x80DE0) +#define NVR_ANA1_REG10_CHKSUM (__IO uint32_t *)(0x80DE4) +#define NVR_ANA2_REG10 (__IO uint32_t *)(0x80DE8) +#define NVR_ANA2_REG10_CHKSUM (__IO uint32_t *)(0x80DEC) +//ADC_CHx +#define NVR_5VADCCHx_NODIV1 (__IO uint32_t *)(0x80C90) +#define NVR_5VADCCHx_RESDIV1 (__IO uint32_t *)(0x80C94) +#define NVR_5VADCCHx_NODIV2 (__IO uint32_t *)(0x80CA4) +#define NVR_5VADCCHx_RESDIV2 (__IO uint32_t *)(0x80CA8) +#define NVR_3VADCCHx_NODIV1 (__IO uint32_t *)(0x80CB8) +#define NVR_3VADCCHx_RESDIV1 (__IO uint32_t *)(0x80CBC) +#define NVR_3VADCCHx_NODIV2 (__IO uint32_t *)(0x80CCC) +#define NVR_3VADCCHx_RESDIV2 (__IO uint32_t *)(0x80CD0) +//BAT Measure Result +#define NVR_5VBAT1 (__IO uint32_t *)(0x80C98) +#define NVR_5VBATRTC1 (__IO uint32_t *)(0x80C9C) +#define NVR_5VBATCHKSUM1 (__IO uint32_t *)(0x80CA0) +#define NVR_5VBAT2 (__IO uint32_t *)(0x80CAC) +#define NVR_5VBATRTC2 (__IO uint32_t *)(0x80CB0) +#define NVR_5VBATCHKSUM2 (__IO uint32_t *)(0x80CB4) +#define NVR_3VBAT1 (__IO uint32_t *)(0x80CC0) +#define NVR_3VBATRTC1 (__IO uint32_t *)(0x80CC4) +#define NVR_3VBATCHKSUM1 (__IO uint32_t *)(0x80CC8) +#define NVR_3VBAT2 (__IO uint32_t *)(0x80CD4) +#define NVR_3VBATRTC2 (__IO uint32_t *)(0x80CD8) +#define NVR_3VBATCHKSUM2 (__IO uint32_t *)(0x80CDC) +//RTC AutoCal Px pramameters +#define NVR_RTC1_P1_P0 (__IO uint32_t *)(0x80D10) +#define NVR_RTC1_P2 (__IO uint32_t *)(0x80D14) +#define NVR_RTC1_P5_P4 (__IO uint32_t *)(0x80D18) +#define NVR_RTC1_P7_P6 (__IO uint32_t *)(0x80D1C) +#define NVR_RTC1_PCHECHSUM (__IO uint32_t *)(0x80D20) +#define NVR_RTC2_P1_P0 (__IO uint32_t *)(0x80D24) +#define NVR_RTC2_P2 (__IO uint32_t *)(0x80D28) +#define NVR_RTC2_P5_P4 (__IO uint32_t *)(0x80D2C) +#define NVR_RTC2_P7_P6 (__IO uint32_t *)(0x80D30) +#define NVR_RTC2_PCHECHSUM (__IO uint32_t *)(0x80D34) +//Power Measure Result +#define NVR_AVCC_MEA1 (__IO uint32_t *)(0x80D38) +#define NVR_DVCC_MEA1 (__IO uint32_t *)(0x80D3C) +#define NVR_BGP_MEA1 (__IO uint32_t *)(0x80D40) +#define NVR_RCL_MEA1 (__IO uint32_t *)(0x80D44) +#define NVR_RCH_MEA1 (__IO uint32_t *)(0x80D48) +#define NVR_PWR_CHECKSUM1 (__IO uint32_t *)(0x80D4C) +#define NVR_AVCC_MEA2 (__IO uint32_t *)(0x80D50) +#define NVR_DVCC_MEA2 (__IO uint32_t *)(0x80D54) +#define NVR_BGP_MEA2 (__IO uint32_t *)(0x80D58) +#define NVR_RCL_MEA2 (__IO uint32_t *)(0x80D5C) +#define NVR_RCH_MEA2 (__IO uint32_t *)(0x80D60) +#define NVR_PWR_CHECKSUM2 (__IO uint32_t *)(0x80D64) +//Chip ID +#define NVR_CHIP1_ID0 (__IO uint32_t *)(0x80D68) +#define NVR_CHIP1_ID1 (__IO uint32_t *)(0x80D6C) +#define NVR_CHIP1_CHECKSUM (__IO uint32_t *)(0x80D70) +#define NVR_CHIP2_ID0 (__IO uint32_t *)(0x80D74) +#define NVR_CHIP2_ID1 (__IO uint32_t *)(0x80D78) +#define NVR_CHIP2_CHECKSUM (__IO uint32_t *)(0x80D7C) +//Temperature information +#define NVR_REALTEMP1 (__IO uint32_t *)(0x80D80) +#define NVR_MEATEMP1 (__IO uint32_t *)(0x80D84) +#define NVR_TEMP_CHECKSUM1 (__IO uint32_t *)(0x80D88) +#define NVR_REALTEMP2 (__IO uint32_t *)(0x80D9C) +#define NVR_MEATEMP2 (__IO uint32_t *)(0x80D90) +#define NVR_TEMP_CHECKSUM2 (__IO uint32_t *)(0x80D94) + +uint32_t NVR_LoadANADataManual(void); +uint32_t NVR_GetInfo_LoadRTCData(NVR_RTCINFO *RTCTempData, uint32_t DivCLKSource); +uint32_t NVR_GetVoltageParameters(uint32_t Mode, NVR_ADCVOLPARA *Parameter); +uint32_t NVR_GetTempParameters(NVR_TempParams *TempParams); +uint32_t NVR_GetMISCGain(NVR_MISCGain *MEAResult); +uint32_t NVR_GetChipID(NVR_CHIPID *ChipID); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_LOADNVR_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_cortex.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_cortex.h new file mode 100644 index 0000000000..db55de4873 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/lib_cortex.h @@ -0,0 +1,49 @@ +/** + ****************************************************************************** + * @file lib_Cortex.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Cortex module driver. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CORTEX_H +#define __LIB_CORTEX_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + + +#define IS_CORTEX_NVIC_DEVICE_IRQ(IRQ) ((IRQ) >= 0x00) + +#define IS_CORTEX_NVIC_PREEMPTION_PRIORITY(PRIORITY) ((PRIORITY) < 0x4) + +/* Exported Functions ------------------------------------------------------- */ +void CORTEX_SetPriority_ClearPending_EnableIRQ(IRQn_Type IRQn, uint32_t Priority); + +void CORTEX_NVIC_EnableIRQ(IRQn_Type IRQn); +void CORTEX_NVIC_DisableIRQ(IRQn_Type IRQn); +uint32_t CORTEX_NVIC_GetPendingIRQ(IRQn_Type IRQn); +void CORTEX_NVIC_SetPendingIRQ(IRQn_Type IRQn); +void CORTEX_NVIC_ClearPendingIRQ(IRQn_Type IRQn); +uint32_t CORTEX_NVIC_GetPriority(IRQn_Type IRQn); +void CORTEX_NVIC_SetPriority(IRQn_Type IRQn, uint32_t Priority); +void CORTEX_NVIC_SystemReset(void); +uint32_t CORTEX_SystemTick_Config(uint32_t TicksNum); +void CORTEX_Delay_nSysClock(__IO uint32_t nClock); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_CORTEX_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/system_target.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/system_target.h new file mode 100644 index 0000000000..c897151964 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/system_target.h @@ -0,0 +1,41 @@ +/** + ****************************************************************************** + * @file system_target.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief system source file. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __SYSTEM_TARGET_H +#define __SYSTEM_TARGET_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "type_def.h" + +#define NVR_REGINFOCOUNT1 (0x80400) +#define NVR_REGINFOBAKOFFSET (0x100) + +/* ########################### System Configuration ######################### */ + +extern void SystemInit(void); +extern void SystemUpdate(void); + + +#ifdef USE_TARGET_DRIVER + #include "lib_conf.h" +#endif /* USE_TARGET_DRIVER */ + +#ifdef __cplusplus +} +#endif + +#endif /* __SYSTEM_TARGET_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/target.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/target.h new file mode 100644 index 0000000000..91b9ed6642 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/target.h @@ -0,0 +1,2799 @@ +/** +******************************************************************************** +* @file target.h +* @author Application Team +* @version V1.1.0 +* @date 2019-10-28 +* @brief Register define +******************************************************************************** +* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS +* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE +* TIME. AS A RESULT, XXXXX SHALL NOT BE HELD LIABLE FOR ANY DIRECT, +* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE +* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING +* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS. +******************************************************************************** +*/ + +#ifndef TARGET_H +#define TARGET_H + +#ifdef __cplusplus +extern "C" { +#endif + + +/** @addtogroup Configuration_of_CMSIS + * @{ + */ + + + +/* =========================================================================================================================== */ +/* ================ Interrupt Number Definition ================ */ +/* =========================================================================================================================== */ + +typedef enum { +/* ======================================= ARM Cortex-M0 Specific Interrupt Numbers ======================================== */ + Reset_IRQn = -15, /*!< -15 Reset Vector, invoked on Power up and warm reset */ + NonMaskableInt_IRQn = -14, /*!< -14 Non maskable Interrupt, cannot be stopped or preempted */ + HardFault_IRQn = -13, /*!< -13 Hard Fault, all classes of Fault */ + SVCall_IRQn = -5, /*!< -5 System Service Call via SVC instruction */ + PendSV_IRQn = -2, /*!< -2 Pendable request for system service */ + SysTick_IRQn = -1, /*!< -1 System Tick Timer */ +/* =========================================== target Specific Interrupt Numbers =========================================== */ + PMU_IRQn = 0, /*!< 0 PMU */ + RTC_IRQn = 1, /*!< 1 RTC */ + U32K0_IRQn = 2, /*!< 2 U32K0 */ + U32K1_IRQn = 3, /*!< 3 U32K1 */ + I2C_IRQn = 4, /*!< 4 I2C */ + SPI1_IRQn = 5, /*!< 5 SPI1 */ + UART0_IRQn = 6, /*!< 6 UART0 */ + UART1_IRQn = 7, /*!< 7 UART1 */ + UART2_IRQn = 8, /*!< 8 UART2 */ + UART3_IRQn = 9, /*!< 9 UART3 */ + UART4_IRQn = 10, /*!< 10 UART4 */ + UART5_IRQn = 11, /*!< 11 UART5 */ + ISO78160_IRQn = 12, /*!< 12 ISO78160 */ + ISO78161_IRQn = 13, /*!< 13 ISO78161 */ + TMR0_IRQn = 14, /*!< 14 TMR0 */ + TMR1_IRQn = 15, /*!< 15 TMR1 */ + TMR2_IRQn = 16, /*!< 16 TMR2 */ + TMR3_IRQn = 17, /*!< 17 TMR3 */ + PWM0_IRQn = 18, /*!< 18 PWM0 */ + PWM1_IRQn = 19, /*!< 19 PWM1 */ + PWM2_IRQn = 20, /*!< 20 PWM2 */ + PWM3_IRQn = 21, /*!< 21 PWM3 */ + DMA_IRQn = 22, /*!< 22 DMA */ + FLASH_IRQn = 23, /*!< 23 FLASH */ + ANA_IRQn = 24, /*!< 24 ANA */ + SPI2_IRQn = 27, /*!< 27 SPI2 */ + SPI3_IRQn = 28 /*!< 28 SPI3 */ +} IRQn_Type; + + + +/* =========================================================================================================================== */ +/* ================ Processor and Core Peripheral Section ================ */ +/* =========================================================================================================================== */ + +/* =========================== Configuration of the ARM Cortex-M0 Processor and Core Peripherals =========================== */ +#define __CM0_REV 0x0000U /*!< CM0 Core Revision */ +#define __NVIC_PRIO_BITS 2 /*!< Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __MPU_PRESENT 0 /*!< MPU present or not */ +#define __FPU_PRESENT 0 /*!< FPU present or not */ + + +/** @} */ /* End of group Configuration_of_CMSIS */ + +#include "core_cm0.h" /*!< ARM Cortex-M0 processor and core peripherals */ + +#ifndef __IM /*!< Fallback for older CMSIS versions */ + #define __IM __I +#endif +#ifndef __OM /*!< Fallback for older CMSIS versions */ + #define __OM __O +#endif +#ifndef __IOM /*!< Fallback for older CMSIS versions */ + #define __IOM __IO +#endif + + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Section ================ */ +/* =========================================================================================================================== */ + + +/** @addtogroup Device_Peripheral_peripherals + * @{ + */ + + + +/* =========================================================================================================================== */ +/* ================ ANA ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The Analog controller is used to control the analog function of TARGET. (ANA) + */ + +typedef struct { /*!< (@ 0x40014200) ANA Structure */ + __IOM uint32_t REG0; /*!< (@ 0x00000000) Analog register 0. */ + __IOM uint32_t REG1; /*!< (@ 0x00000004) Analog register 1. */ + __IOM uint32_t REG2; /*!< (@ 0x00000008) Analog register 2. */ + __IOM uint32_t REG3; /*!< (@ 0x0000000C) Analog register 3. */ + __IOM uint32_t REG4; /*!< (@ 0x00000010) Analog register 4. */ + __IOM uint32_t REG5; /*!< (@ 0x00000014) Analog register 5. */ + __IOM uint32_t REG6; /*!< (@ 0x00000018) Analog register 6. */ + __IOM uint32_t REG7; /*!< (@ 0x0000001C) Analog register 7. */ + __IOM uint32_t REG8; /*!< (@ 0x00000020) Analog register 8. */ + __IOM uint32_t REG9; /*!< (@ 0x00000024) Analog register 9. */ + __IOM uint32_t REGA; /*!< (@ 0x00000028) Analog register 10. */ + __IOM uint32_t REGB; /*!< (@ 0x0000002C) Analog register 11. */ + __IOM uint32_t REGC; /*!< (@ 0x00000030) Analog register 12. */ + __IOM uint32_t REGD; /*!< (@ 0x00000034) Analog register 13. */ + __IOM uint32_t REGE; /*!< (@ 0x00000038) Analog register 14. */ + __IOM uint32_t REGF; /*!< (@ 0x0000003C) Analog register 15. */ + __IOM uint32_t REG10; /*!< (@ 0x00000040) Analog register 16. */ + __IOM uint32_t REG11; /*!< (@ 0x00000044) Analog register 17. */ + __IM uint32_t RESERVED[2]; + __IOM uint32_t CTRL; /*!< (@ 0x00000050) Analog control register. */ + __IM uint32_t CMPOUT; /*!< (@ 0x00000054) Comparator result register. */ + __IM uint32_t RESERVED1; + __IM uint32_t ADCSTATE; /*!< (@ 0x0000005C) ADC State register. */ + __IOM uint32_t INTSTS; /*!< (@ 0x00000060) Analog interrupt status register. */ + __IOM uint32_t INTEN; /*!< (@ 0x00000064) Analog interrupt enable register. */ + __IOM uint32_t ADCCTRL0; /*!< (@ 0x00000068) ADC control register. */ + __IOM uint32_t CMPCTL; /*!< (@ 0x0000006C) CMP1/CMP2 control register. */ + __IM uint32_t ADCDATA[16]; /*!< (@ 0x00000070) ADC channel x data register. */ + __IOM uint32_t CMPCNT1; /*!< (@ 0x000000B0) Comparator x counter. */ + __IOM uint32_t CMPCNT2; /*!< (@ 0x000000B4) Comparator x counter. */ + __IOM uint32_t MISC; /*!< (@ 0x000000B8) Analog MISC control register. */ + __IM uint32_t RESERVED2; + __IM uint32_t ADCDOS; /*!< (@ 0x000000C0) ANA_ADCDOS. */ + __IM uint32_t RESERVED3[2]; + __IM uint32_t ADCDCPN; /*!< (@ 0x000000CC) ANA_ADCDCPN. */ + __IM uint32_t RESERVED4[2]; + __IM uint32_t ADCDCNM0; /*!< (@ 0x000000D8) ANA_ADCDCNM0. */ + __IM uint32_t RESERVED5; + __IM uint32_t ADCDATADMA; /*!< (@ 0x000000E0) ANA_ADCDATADMA. */ + __IOM uint32_t CMPTHR; /*!< (@ 0x000000E4) CMP1/CMP2 threshold register. */ + __IOM uint32_t ADCCTRL1; /*!< (@ 0x000000E8) ANA_ADCCTRL1. */ + __IOM uint32_t ADCCTRL2; /*!< (@ 0x000000EC) ANA_ADCCTRL2. */ + __IM uint32_t RESERVED6; + __IOM uint32_t ADCDATATHD1_0; /*!< (@ 0x000000F4) ANA_ADCDATATHD1_0. */ + __IOM uint32_t ADCDATATHD3_2; /*!< (@ 0x000000F8) ANA_ADCDATATHD3_2. */ + __IOM uint32_t ADCDATATHD_CH; /*!< (@ 0x000000FC) ANA_ADCDATATHD_CH. */ +} ANA_Type; /*!< Size = 256 (0x100) */ + + + +/* =========================================================================================================================== */ +/* ================ CRYPT ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief CRYPT accelerate the sign and verify process speed of ECC. (CRYPT) + */ + +typedef struct { /*!< (@ 0x40006000) CRYPT Structure */ + __IOM uint32_t CTRL; /*!< (@ 0x00000000) CRYPT control register. */ + __IOM uint32_t PTRA; /*!< (@ 0x00000004) CRYPT pointer A. */ + __IOM uint32_t PTRB; /*!< (@ 0x00000008) CRYPT pointer B. */ + __IOM uint32_t PTRO; /*!< (@ 0x0000000C) CRYPT pointer O. */ + __IM uint32_t CARRY; /*!< (@ 0x00000010) CRYPT carry/borrow bit register. */ +} CRYPT_Type; /*!< Size = 20 (0x14) */ + + + +/* =========================================================================================================================== */ +/* ================ DMA ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief DMA(Direct Memory Access) (DMA) + */ + +typedef struct { /*!< (@ 0x40010000) DMA Structure */ + __IOM uint32_t IE; /*!< (@ 0x00000000) DMA interrupt enable register. */ + __IOM uint32_t STS; /*!< (@ 0x00000004) DMA status register. */ + __IM uint32_t RESERVED[2]; + __IOM uint32_t C0CTL; /*!< (@ 0x00000010) DMA channel x control register. */ + __IOM uint32_t C0SRC; /*!< (@ 0x00000014) DMA source address register. */ + __IOM uint32_t C0DST; /*!< (@ 0x00000018) DMA channel x destination register. */ + __IOM uint32_t C0LEN; /*!< (@ 0x0000001C) DMA channel x transfer length register. */ + __IOM uint32_t C1CTL; /*!< (@ 0x00000020) DMA channel x control register. */ + __IOM uint32_t C1SRC; /*!< (@ 0x00000024) DMA source address register. */ + __IOM uint32_t C1DST; /*!< (@ 0x00000028) DMA channel x destination register. */ + __IOM uint32_t C1LEN; /*!< (@ 0x0000002C) DMA channel x transfer length register. */ + __IOM uint32_t C2CTL; /*!< (@ 0x00000030) DMA channel x control register. */ + __IOM uint32_t C2SRC; /*!< (@ 0x00000034) DMA source address register. */ + __IOM uint32_t C2DST; /*!< (@ 0x00000038) DMA channel x destination register. */ + __IOM uint32_t C2LEN; /*!< (@ 0x0000003C) DMA channel x transfer length register. */ + __IOM uint32_t C3CTL; /*!< (@ 0x00000040) DMA channel x control register. */ + __IOM uint32_t C3SRC; /*!< (@ 0x00000044) DMA source address register. */ + __IOM uint32_t C3DST; /*!< (@ 0x00000048) DMA channel x destination register. */ + __IOM uint32_t C3LEN; /*!< (@ 0x0000004C) DMA channel x transfer length register. */ + __IOM uint32_t AESCTL; /*!< (@ 0x00000050) DMA AES control register. */ + __IM uint32_t RESERVED1[3]; + __IOM uint32_t AESKEY[8]; /*!< (@ 0x00000060) DMA AES key x register. When mode is AES128, + only register KEY3~KEY0 is used. When mode + is AES192, only register KEY5~KEY0 is used. + When mode is AES256, register KEY7~KEY0 + is used. */ +} DMA_Type; /*!< Size = 128 (0x80) */ + + + +/* =========================================================================================================================== */ +/* ================ FLASH ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief FLASH Register (FLASH) + */ + +typedef struct { /*!< (@ 0x000FFF00) FLASH Structure */ + __IM uint32_t RESERVED[42]; + __IOM uint32_t ICEPROT; /*!< (@ 0x000000A8) ICE protect register. */ + __IM uint32_t RDPROT; /*!< (@ 0x000000AC) Flash read protect status register */ + __IOM uint32_t WRPROT; /*!< (@ 0x000000B0) Flash write protect control register */ + __IM uint32_t RESERVED1[2]; + __IM uint32_t STS; /*!< (@ 0x000000BC) Flash programming status register. */ + __IM uint32_t RESERVED2[3]; + __IOM uint32_t INTSTS; /*!< (@ 0x000000CC) FLASH Checksum interrupt status */ + __IOM uint32_t CSSADDR; /*!< (@ 0x000000D0) FLASH Checksum start address */ + __IOM uint32_t CSEADDR; /*!< (@ 0x000000D4) FLASH Checksum end address. */ + __IM uint32_t CSVALUE; /*!< (@ 0x000000D8) FLASH Checksum value register */ + __IOM uint32_t CSCVALUE; /*!< (@ 0x000000DC) FLASH Checksum compare value register. */ + __IOM uint32_t PASS; /*!< (@ 0x000000E0) FLASH password register */ + __IOM uint32_t CTRL; /*!< (@ 0x000000E4) FLASH control register. */ + __IOM uint32_t PGADDR; /*!< (@ 0x000000E8) FLASH program address register. */ + __IOM uint32_t PGDATA; /*!< (@ 0x000000EC) FLASH program word data register. */ + __IM uint32_t RESERVED3; + __IOM uint32_t SERASE; /*!< (@ 0x000000F4) FLASH sector erase control register. */ + __IOM uint32_t CERASE; /*!< (@ 0x000000F8) FLASH chip erase control register. */ + __IOM uint32_t DSTB; /*!< (@ 0x000000FC) FLASH deep standby control register. */ +} FLASH_Type; /*!< Size = 256 (0x100) */ + + + +/* =========================================================================================================================== */ +/* ================ GPIOA ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The GPIO controller is used to control the GPIOs of TARGET. (GPIOA) + */ + +typedef struct { /*!< (@ 0x40014010) GPIOA Structure */ + __IOM uint32_t OEN; /*!< (@ 0x00000000) IOA output enable register */ + __IOM uint32_t IE; /*!< (@ 0x00000004) IOA input enable register */ + __IOM uint32_t DAT; /*!< (@ 0x00000008) IOA data register */ + __IOM uint32_t ATT; /*!< (@ 0x0000000C) IOA attribute register */ + __IOM uint32_t IOAWKUEN; /*!< (@ 0x00000010) IOA wake-up enable register */ + __IM uint32_t STS; /*!< (@ 0x00000014) IOA input status register */ + __IOM uint32_t IOAINTSTS; /*!< (@ 0x00000018) IOA interrupt status register. */ + __IM uint32_t RESERVED[3]; + __IOM uint32_t SEL; /*!< (@ 0x00000028) IOA special function select register. */ + __IM uint32_t RESERVED1[5]; + __IOM uint32_t IOANODEG; /*!< (@ 0x00000040) IOA no-deglitch control register. */ +} GPIOA_Type; /*!< Size = 68 (0x44) */ + + + +/* =========================================================================================================================== */ +/* ================ GPIO ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The GPIO controller is used to control the GPIOs of TARGET. (GPIO) + */ + +typedef struct { /*!< (@ 0x40000020) GPIO Structure */ + __IOM uint32_t OEN; /*!< (@ 0x00000000) IO output enable register */ + __IOM uint32_t IE; /*!< (@ 0x00000004) IO input enable register */ + __IOM uint32_t DAT; /*!< (@ 0x00000008) IO data register */ + __IOM uint32_t ATT; /*!< (@ 0x0000000C) IO attribute register */ + __IM uint32_t STS; /*!< (@ 0x00000010) IO input status register */ +} GPIO_Type; /*!< Size = 20 (0x14) */ + + + +/* =========================================================================================================================== */ +/* ================ GPIOAF ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The GPIO controller is used to control the GPIOs of TARGET. (GPIOAF) + */ + +typedef struct { /*!< (@ 0x400000C0) GPIOAF Structure */ + __IOM uint32_t IOB_SEL; /*!< (@ 0x00000000) IOB special function select register. */ + __IM uint32_t RESERVED[2]; + __IOM uint32_t IOE_SEL; /*!< (@ 0x0000000C) IOE special function select register. */ + __IM uint32_t RESERVED1[4]; + __IOM uint32_t IO_MISC; /*!< (@ 0x00000020) IO misc. control register. */ +} GPIOAF_Type; /*!< Size = 36 (0x24) */ + + + +/* =========================================================================================================================== */ +/* ================ I2C ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief I2C-Inter Integrated Circuit (I2C) + */ + +typedef struct { /*!< (@ 0x40010800) I2C Structure */ + __IOM uint32_t DATA; /*!< (@ 0x00000000) I2C data register. */ + __IOM uint32_t ADDR; /*!< (@ 0x00000004) I2C address register. */ + __IOM uint32_t CTRL; /*!< (@ 0x00000008) I2C control/status register. */ + __IM uint32_t STS; /*!< (@ 0x0000000C) I2C status register. */ + __IM uint32_t RESERVED[2]; + __IOM uint32_t CTRL2; /*!< (@ 0x00000018) I2C interrupt enable register. */ +} I2C_Type; /*!< Size = 28 (0x1c) */ + + + +/* =========================================================================================================================== */ +/* ================ ISO7816 ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The ISO7816 controller is an enhance UART protocol which is able to do half-duplex communication on the 2 wires bus. (ISO7816) + */ + +typedef struct { /*!< (@ 0x40012000) ISO7816 Structure */ + __IM uint32_t RESERVED; + __IOM uint32_t BAUDDIVL; /*!< (@ 0x00000004) ISO7816 baud-rate low byte register */ + __IOM uint32_t BAUDDIVH; /*!< (@ 0x00000008) ISO7816 baud-rate high byte register */ + __IOM uint32_t DATA; /*!< (@ 0x0000000C) ISO7816 data register. */ + __IOM uint32_t INFO; /*!< (@ 0x00000010) ISO7816 information register. */ + __IOM uint32_t CFG; /*!< (@ 0x00000014) ISO7816 control register. */ + __IOM uint32_t CLK; /*!< (@ 0x00000018) ISO7816 clock divider control register. */ +} ISO7816_Type; /*!< Size = 28 (0x1c) */ + + + +/* =========================================================================================================================== */ +/* ================ LCD ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The LCD controller is used to display content on the LCD panel. (LCD) + */ + +typedef struct { /*!< (@ 0x40002000) LCD Structure */ + __IOM uint32_t FB[40]; /*!< (@ 0x00000000) LCD Frame buffer x register */ + __IM uint32_t RESERVED[24]; + __IOM uint32_t CTRL; /*!< (@ 0x00000100) LCD control register. */ + __IOM uint32_t CTRL2; /*!< (@ 0x00000104) LCD control register2. */ + __IOM uint32_t SEGCTRL0; /*!< (@ 0x00000108) LCD segment enable control register 0 */ + __IOM uint32_t SEGCTRL1; /*!< (@ 0x0000010C) LCD segment enable control register 1 */ + __IOM uint32_t SEGCTRL2; /*!< (@ 0x00000110) LCD segment enable control register 2 */ +} LCD_Type; /*!< Size = 276 (0x114) */ + + + +/* =========================================================================================================================== */ +/* ================ MISC1 ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The MISC controller is used to control some special function of TARGET, which will be power-off during sleep and deep-sleep mode. (MISC1) + */ + +typedef struct { /*!< (@ 0x40013000) MISC1 Structure */ + __IOM uint32_t SRAMINT; /*!< (@ 0x00000000) SRAM Parity Error Interrupt. */ + __IOM uint32_t SRAMINIT; /*!< (@ 0x00000004) SRAM initialize register. */ + __IM uint32_t PARERR; /*!< (@ 0x00000008) SRAM Parity Error address register. */ + __IOM uint32_t IREN; /*!< (@ 0x0000000C) IR enable control register. */ + __IOM uint32_t DUTYL; /*!< (@ 0x00000010) IR Duty low pulse control register. */ + __IOM uint32_t DUTYH; /*!< (@ 0x00000014) IR Duty high pulse control register. */ + __IOM uint32_t IRQLAT; /*!< (@ 0x00000018) Cortex M0 IRQ latency control register. */ + __IM uint32_t RESERVED; + __IM uint32_t HIADDR; /*!< (@ 0x00000020) AHB invalid access address. */ + __IM uint32_t PIADDR; /*!< (@ 0x00000024) APB invalid access address. */ +} MISC1_Type; /*!< Size = 40 (0x28) */ + + + +/* =========================================================================================================================== */ +/* ================ MISC2 ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief MISC2 controller is in retention domain which will be power-off at deep-sleep mode. (MISC2) + */ + +typedef struct { /*!< (@ 0x40013E00) MISC2 Structure */ + __IOM uint32_t FLASHWC; /*!< (@ 0x00000000) Flash wait cycle register. */ + __IOM uint32_t CLKSEL; /*!< (@ 0x00000004) Clock selection register. */ + __IOM uint32_t CLKDIVH; /*!< (@ 0x00000008) AHB clock divider control register. */ + __IOM uint32_t CLKDIVP; /*!< (@ 0x0000000C) APB clock divider control register. */ + __IOM uint32_t HCLKEN; /*!< (@ 0x00000010) AHB clock enable control register. */ + __IOM uint32_t PCLKEN; /*!< (@ 0x00000014) APB clock enable control register. */ +} MISC2_Type; /*!< Size = 24 (0x18) */ + + + +/* =========================================================================================================================== */ +/* ================ PMU ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief Power Management Unit. (PMU) + */ + +typedef struct { /*!< (@ 0x40014000) PMU Structure */ + __IOM uint32_t DSLEEPEN; /*!< (@ 0x00000000) PMU deep sleep enable register. */ + __IOM uint32_t DSLEEPPASS; /*!< (@ 0x00000004) PMU deep sleep password register. */ + __IOM uint32_t CONTROL; /*!< (@ 0x00000008) PMU control register. */ + __IOM uint32_t STS; /*!< (@ 0x0000000C) PMU Status register. */ + __IM uint32_t RESERVED[12]; + __IOM uint32_t WDTPASS; /*!< (@ 0x00000040) Watch dog timing unlock register. */ + __IOM uint32_t WDTEN; /*!< (@ 0x00000044) Watch dog timer enable register. */ + __IOM uint32_t WDTCLR; /*!< (@ 0x00000048) Watch dog timer clear register. */ + __IM uint32_t RESERVED1[237]; + __IOM uint32_t RAM[64]; /*!< (@ 0x00000400) PMU 32 bits Retention RAM x. */ +} PMU_Type; /*!< Size = 1280 (0x500) */ + + + +/* =========================================================================================================================== */ +/* ================ PWM ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief Timers are 16 bits timers with PWM and capture function. (PWM) + */ + +typedef struct { /*!< (@ 0x40012900) PWM Structure */ + __IOM uint32_t CTL; /*!< (@ 0x00000000) Control register of PWM Timer 0 */ + __IM uint32_t TAR; /*!< (@ 0x00000004) Current count register of PWM Timer x. */ + __IOM uint32_t CCTL[3]; /*!< (@ 0x00000008) Compare/capture control register x(x=0~3) for + PWM timer x. */ + __IOM uint32_t CCR[3]; /*!< (@ 0x00000014) Compare/capture data register x for PWM timer + x. */ +} PWM_Type; /*!< Size = 32 (0x20) */ + + + +/* =========================================================================================================================== */ +/* ================ PWM_SEL ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief Timers are 16 bits timers with PWM and capture function. (PWM_SEL) + */ + +typedef struct { /*!< (@ 0x400129F0) PWM_SEL Structure */ + __IOM uint32_t O_SEL; /*!< (@ 0x00000000) PWM output selection register. */ + __IOM uint32_t I_SEL01; /*!< (@ 0x00000004) Input of PWM0 and PWM1 selection register. */ + __IOM uint32_t I_SEL23; /*!< (@ 0x00000008) Input of PWM2 and PWM3 selection register. */ +} PWM_SEL_Type; /*!< Size = 12 (0xc) */ + + + +/* =========================================================================================================================== */ +/* ================ RTC ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The RTC controller is used to control time calculation and RTC auto calibration function. (RTC) + */ + +typedef struct { /*!< (@ 0x40014800) RTC Structure */ + __IOM uint32_t SEC; /*!< (@ 0x00000000) RTC second register */ + __IOM uint32_t MIN; /*!< (@ 0x00000004) RTC minute register */ + __IOM uint32_t HOUR; /*!< (@ 0x00000008) RTC hour register */ + __IOM uint32_t DAY; /*!< (@ 0x0000000C) RTC day register */ + __IOM uint32_t WEEK; /*!< (@ 0x00000010) RTC week register */ + __IOM uint32_t MON; /*!< (@ 0x00000014) RTC mon register */ + __IOM uint32_t YEAR; /*!< (@ 0x00000018) RTC year register */ + __IOM uint32_t TIME; /*!< (@ 0x0000001C) RTC accurate second/millisecond register */ + __IOM uint32_t WKUSEC; /*!< (@ 0x00000020) RTC wake-up second register. */ + __IOM uint32_t WKUMIN; /*!< (@ 0x00000024) RTC wake-up minute register */ + __IOM uint32_t WKUHOUR; /*!< (@ 0x00000028) RTC wake-up hour register */ + __IOM uint32_t WKUCNT; /*!< (@ 0x0000002C) RTC wake-up counter register */ + __IOM uint32_t CAL; /*!< (@ 0x00000030) RTC calibration register */ + __IOM uint32_t DIV; /*!< (@ 0x00000034) RTC calibration register */ + __IOM uint32_t CTL; /*!< (@ 0x00000038) RTC PLL divider control register. */ + __IOM uint32_t ITV; /*!< (@ 0x0000003C) RTC wake-up interval control */ + __IOM uint32_t SITV; /*!< (@ 0x00000040) RTC wake-up second interval control */ + __IOM uint32_t PWD; /*!< (@ 0x00000044) RTC password control register. */ + __IOM uint32_t CE; /*!< (@ 0x00000048) RTC write enable control register. */ + __IM uint32_t LOAD; /*!< (@ 0x0000004C) RTC read enable control register */ + __IOM uint32_t INTSTS; /*!< (@ 0x00000050) RTC interrupt status control register */ + __IOM uint32_t INTEN; /*!< (@ 0x00000054) RTC interrupt enable control register */ + __IOM uint32_t PSCA; /*!< (@ 0x00000058) RTC clock pre-scaler control register. */ + __IM uint32_t RESERVED[10]; + __IOM uint32_t ACTI; /*!< (@ 0x00000084) RTC auto-calibration center temperature control + register. */ + __IOM uint32_t ACF200; /*!< (@ 0x00000088) RTC auto-calibration 200*frequency control register. */ + __IM uint32_t RESERVED1; + __IOM uint32_t ACP0; /*!< (@ 0x00000090) RTC parameter P0 register. */ + __IOM uint32_t ACP1; /*!< (@ 0x00000094) RTC parameter P1 register. */ + __IOM uint32_t ACP2; /*!< (@ 0x00000098) RTC parameter P2 register. */ + __IM uint32_t ACP3; /*!< (@ 0x0000009C) RTC parameter P3 register. */ + __IOM uint32_t ACP4; /*!< (@ 0x000000A0) RTC parameter P4 register. */ + __IOM uint32_t ACP5; /*!< (@ 0x000000A4) RTC parameter P5 register. */ + __IOM uint32_t ACP6; /*!< (@ 0x000000A8) RTC parameter P6 register. */ + __IOM uint32_t ACP7; /*!< (@ 0x000000AC) RTC parameter P7 register. */ + __IOM uint32_t ACK[5]; /*!< (@ 0x000000B0) RTC auto-calibration parameter Kx control register. */ + __IM uint32_t RESERVED2[2]; + __IM uint32_t WKUCNTR; /*!< (@ 0x000000CC) This register is used to represent the current + WKUCNT value. */ + __IOM uint32_t ACKTEMP; /*!< (@ 0x000000D0) RTC auto-calibration k temperature section control + register. */ + __IOM uint32_t ALARMTIME; /*!< (@ 0x000000D4) RTC alarm accurate second/millisecond. */ + __IOM uint32_t ALARMSEC; /*!< (@ 0x000000D8) RTC alarm inaccurate second */ + __IOM uint32_t ALARMMIN; /*!< (@ 0x000000DC) RTC alarm minute */ + __IOM uint32_t ALARMHOUR; /*!< (@ 0x000000E0) RTC alarm hour */ + __IOM uint32_t ALARMCTL; /*!< (@ 0x000000E4) RTC alarm control */ + __IOM uint32_t ADCUCALK; /*!< (@ 0x000000E8) RTC ADC Ucal K coefficients */ + __IOM uint32_t ADCMACTL; /*!< (@ 0x000000EC) RTC ADC control */ + __IOM uint32_t ADCDTCTL; /*!< (@ 0x000000F0) RTC ADC data control */ +} RTC_Type; /*!< Size = 244 (0xf4) */ + + + +/* =========================================================================================================================== */ +/* ================ SPI ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief SPI(Serial Peripheral Interface). (SPI) + */ + +typedef struct { /*!< (@ 0x40011000) SPI Structure */ + __IOM uint32_t CTRL; /*!< (@ 0x00000000) SPI Control Register. */ + __IOM uint32_t TXSTS; /*!< (@ 0x00000004) SPI Transmit Status Register. */ + __IOM uint32_t TXDAT; /*!< (@ 0x00000008) SPI Transmit FIFO register. */ + __IOM uint32_t RXSTS; /*!< (@ 0x0000000C) SPI Receive Status Register. */ + __IM uint32_t RXDAT; /*!< (@ 0x00000010) SPI Receive FIFO Register. */ + __IOM uint32_t MISC; /*!< (@ 0x00000014) SPI Misc. Control Register. */ +} SPI_Type; /*!< Size = 24 (0x18) */ + + + +/* =========================================================================================================================== */ +/* ================ TMR ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief General purpose 32 bits timer, which are used to generate regulate interrupt for CM0. (TMR) + */ + +typedef struct { /*!< (@ 0x40012800) TMR Structure */ + __IOM uint32_t CTRL; /*!< (@ 0x00000000) Control register of Timer x */ + __IOM uint32_t VALUE; /*!< (@ 0x00000004) Current count register of Timer x */ + __IOM uint32_t RELOAD; /*!< (@ 0x00000008) Reload register of Timer x. */ + __IOM uint32_t INTSTS; /*!< (@ 0x0000000C) Interrupt status register of Timer x. */ +} TMR_Type; /*!< Size = 16 (0x10) */ + + + +/* =========================================================================================================================== */ +/* ================ UART ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief UART(Universal Asynchronous Receiver/Transmitter). (UART) + */ + +typedef struct { /*!< (@ 0x40011800) UART Structure */ + __IOM uint32_t DATA; /*!< (@ 0x00000000) UART data register. */ + __IOM uint32_t STATE; /*!< (@ 0x00000004) UART status register. */ + __IOM uint32_t CTRL; /*!< (@ 0x00000008) UART control register. */ + __IOM uint32_t INTSTS; /*!< (@ 0x0000000C) UART interrupt status register. */ + __IOM uint32_t BAUDDIV; /*!< (@ 0x00000010) UART baud rate divide register. */ + __IOM uint32_t CTRL2; /*!< (@ 0x00000014) UART control register 2. */ +} UART_Type; /*!< Size = 24 (0x18) */ + + + +/* =========================================================================================================================== */ +/* ================ U32K ================ */ +/* =========================================================================================================================== */ + + +/** + * @brief The UART 32K controller is used to receive data via UART protocol. (U32K) + */ + +typedef struct { /*!< (@ 0x40014100) U32K Structure */ + __IOM uint32_t CTRL0; /*!< (@ 0x00000000) UART 32K x control register 0. */ + __IOM uint32_t CTRL1; /*!< (@ 0x00000004) UART 32K x control register 1. */ + __IOM uint32_t BAUDDIV; /*!< (@ 0x00000008) UART 32K x baud rate control register. */ + __IM uint32_t DATA; /*!< (@ 0x0000000C) UART 32K x receive data buffer. */ + __IOM uint32_t STS; /*!< (@ 0x00000010) UART 32K x interrupt status register. */ +} U32K_Type; /*!< Size = 20 (0x14) */ + + +/** @} */ /* End of group Device_Peripheral_peripherals */ + + +/* =========================================================================================================================== */ +/* ================ Device Specific Peripheral Address Map ================ */ +/* =========================================================================================================================== */ + + +/** @addtogroup Device_Peripheral_peripheralAddr + * @{ + */ + +#define ANA_BASE 0x40014200UL +#define CRYPT_BASE 0x40006000UL +#define DMA_BASE 0x40010000UL +#define FLASH_BASE 0x000FFF00UL +#define GPIOA_BASE 0x40014010UL +#define GPIOB_BASE 0x40000020UL +#define GPIOC_BASE 0x40000040UL +#define GPIOD_BASE 0x40000060UL +#define GPIOE_BASE 0x40000080UL +#define GPIOF_BASE 0x400000A0UL +#define GPIOAF_BASE 0x400000C0UL +#define I2C_BASE 0x40010800UL +#define ISO78160_BASE 0x40012000UL +#define ISO78161_BASE 0x40012040UL +#define LCD_BASE 0x40002000UL +#define MISC1_BASE 0x40013000UL +#define MISC2_BASE 0x40013E00UL +#define PMU_BASE 0x40014000UL +#define PWM0_BASE 0x40012900UL +#define PWM1_BASE 0x40012920UL +#define PWM2_BASE 0x40012940UL +#define PWM3_BASE 0x40012960UL +#define PWM_SEL_BASE 0x400129F0UL +#define RTC_BASE 0x40014800UL +#define SPI1_BASE 0x40011000UL +#define SPI2_BASE 0x40015800UL +#define SPI3_BASE 0x40016000UL +#define TMR0_BASE 0x40012800UL +#define TMR1_BASE 0x40012820UL +#define TMR2_BASE 0x40012840UL +#define TMR3_BASE 0x40012860UL +#define UART0_BASE 0x40011800UL +#define UART1_BASE 0x40011820UL +#define UART2_BASE 0x40011840UL +#define UART3_BASE 0x40011860UL +#define UART4_BASE 0x40011880UL +#define UART5_BASE 0x400118A0UL +#define U32K0_BASE 0x40014100UL +#define U32K1_BASE 0x40014180UL + +/** @} */ /* End of group Device_Peripheral_peripheralAddr */ + + +/* =========================================================================================================================== */ +/* ================ Peripheral declaration ================ */ +/* =========================================================================================================================== */ + + +/** @addtogroup Device_Peripheral_declaration + * @{ + */ + +#define ANA ((ANA_Type*) ANA_BASE) +#define CRYPT ((CRYPT_Type*) CRYPT_BASE) +#define DMA ((DMA_Type*) DMA_BASE) +#define FLASH ((FLASH_Type*) FLASH_BASE) +#define GPIOA ((GPIOA_Type*) GPIOA_BASE) +#define GPIOB ((GPIO_Type*) GPIOB_BASE) +#define GPIOC ((GPIO_Type*) GPIOC_BASE) +#define GPIOD ((GPIO_Type*) GPIOD_BASE) +#define GPIOE ((GPIO_Type*) GPIOE_BASE) +#define GPIOF ((GPIO_Type*) GPIOF_BASE) +#define GPIOAF ((GPIOAF_Type*) GPIOAF_BASE) +#define I2C ((I2C_Type*) I2C_BASE) +#define ISO78160 ((ISO7816_Type*) ISO78160_BASE) +#define ISO78161 ((ISO7816_Type*) ISO78161_BASE) +#define LCD ((LCD_Type*) LCD_BASE) +#define MISC1 ((MISC1_Type*) MISC1_BASE) +#define MISC2 ((MISC2_Type*) MISC2_BASE) +#define PMU ((PMU_Type*) PMU_BASE) +#define PWM0 ((PWM_Type*) PWM0_BASE) +#define PWM1 ((PWM_Type*) PWM1_BASE) +#define PWM2 ((PWM_Type*) PWM2_BASE) +#define PWM3 ((PWM_Type*) PWM3_BASE) +#define PWM_SEL ((PWM_SEL_Type*) PWM_SEL_BASE) +#define RTC ((RTC_Type*) RTC_BASE) +#define SPI1 ((SPI_Type*) SPI1_BASE) +#define SPI2 ((SPI_Type*) SPI2_BASE) +#define SPI3 ((SPI_Type*) SPI3_BASE) +#define TMR0 ((TMR_Type*) TMR0_BASE) +#define TMR1 ((TMR_Type*) TMR1_BASE) +#define TMR2 ((TMR_Type*) TMR2_BASE) +#define TMR3 ((TMR_Type*) TMR3_BASE) +#define UART0 ((UART_Type*) UART0_BASE) +#define UART1 ((UART_Type*) UART1_BASE) +#define UART2 ((UART_Type*) UART2_BASE) +#define UART3 ((UART_Type*) UART3_BASE) +#define UART4 ((UART_Type*) UART4_BASE) +#define UART5 ((UART_Type*) UART5_BASE) +#define U32K0 ((U32K_Type*) U32K0_BASE) +#define U32K1 ((U32K_Type*) U32K1_BASE) + +/** @} */ /* End of group Device_Peripheral_declaration */ + + +/* =========================================================================================================================== */ +/* ================ Pos/Mask Peripheral Section ================ */ +/* =========================================================================================================================== */ + + +/** @addtogroup PosMask_peripherals + * @{ + */ + + + +/* =========================================================================================================================== */ +/* ================ ANA ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= REG0 ========================================================== */ +#define ANA_REG0_ADCFRQSEL_Pos (0UL) /*!< ANA REG0: ADCFRQSEL (Bit 0) */ +#define ANA_REG0_ADCFRQSEL_Msk (0x1UL) /*!< ANA REG0: ADCFRQSEL (Bitfield-Mask: 0x01) */ +#define ANA_REG0_ADCFRQSEL ANA_REG0_ADCFRQSEL_Msk +/* ========================================================= REG1 ========================================================== */ +#define ANA_REG1_ADCMODESEL_Pos (7UL) /*!< ANA REG1: ADCMODESEL (Bit 7) */ +#define ANA_REG1_ADCMODESEL_Msk (0x80UL) /*!< ANA REG1: ADCMODESEL (Bitfield-Mask: 0x01) */ +#define ANA_REG1_ADCMODESEL ANA_REG1_ADCMODESEL_Msk +/* ========================================================= REG2 ========================================================== */ +#define ANA_REG2_CMP2REFSEL_Pos (5UL) /*!< ANA REG2: CMP2REFSEL (Bit 5) */ +#define ANA_REG2_CMP2REFSEL_Msk (0x20UL) /*!< ANA REG2: CMP2REFSEL (Bitfield-Mask: 0x01) */ +#define ANA_REG2_CMP2REFSEL ANA_REG2_CMP2REFSEL_Msk +#define ANA_REG2_CMP1REFSEL_Pos (4UL) /*!< ANA REG2: CMP1REFSEL (Bit 4) */ +#define ANA_REG2_CMP1REFSEL_Msk (0x10UL) /*!< ANA REG2: CMP1REFSEL (Bitfield-Mask: 0x01) */ +#define ANA_REG2_CMP1REFSEL ANA_REG2_CMP1REFSEL_Msk +#define ANA_REG2_CMP2SEL_Pos (2UL) /*!< ANA REG2: CMP2SEL (Bit 2) */ +#define ANA_REG2_CMP2SEL_Msk (0xcUL) /*!< ANA REG2: CMP2SEL (Bitfield-Mask: 0x03) */ +#define ANA_REG2_CMP2SEL ANA_REG2_CMP2SEL_Msk +#define ANA_REG2_CMP1SEL_Pos (0UL) /*!< ANA REG2: CMP1SEL (Bit 0) */ +#define ANA_REG2_CMP1SEL_Msk (0x3UL) /*!< ANA REG2: CMP1SEL (Bitfield-Mask: 0x03) */ +#define ANA_REG2_CMP1SEL ANA_REG2_CMP1SEL_Msk +/* ========================================================= REG3 ========================================================== */ +#define ANA_REG3_XOHPDN_Pos (7UL) /*!< ANA REG3: XOHPDN (Bit 7) */ +#define ANA_REG3_XOHPDN_Msk (0x80UL) /*!< ANA REG3: XOHPDN (Bitfield-Mask: 0x01) */ +#define ANA_REG3_XOHPDN ANA_REG3_XOHPDN_Msk +#define ANA_REG3_PLLHPDN_Pos (6UL) /*!< ANA REG3: PLLHPDN (Bit 6) */ +#define ANA_REG3_PLLHPDN_Msk (0x40UL) /*!< ANA REG3: PLLHPDN (Bitfield-Mask: 0x01) */ +#define ANA_REG3_PLLHPDN ANA_REG3_PLLHPDN_Msk +#define ANA_REG3_PLLLPDN_Pos (5UL) /*!< ANA REG3: PLLLPDN (Bit 5) */ +#define ANA_REG3_PLLLPDN_Msk (0x20UL) /*!< ANA REG3: PLLLPDN (Bitfield-Mask: 0x01) */ +#define ANA_REG3_PLLLPDN ANA_REG3_PLLLPDN_Msk +#define ANA_REG3_RCHPD_Pos (4UL) /*!< ANA REG3: RCHPD (Bit 4) */ +#define ANA_REG3_RCHPD_Msk (0x10UL) /*!< ANA REG3: RCHPD (Bitfield-Mask: 0x01) */ +#define ANA_REG3_RCHPD ANA_REG3_RCHPD_Msk +#define ANA_REG3_BGPPD_Pos (3UL) /*!< ANA REG3: BGPPD (Bit 3) */ +#define ANA_REG3_BGPPD_Msk (0x8UL) /*!< ANA REG3: BGPPD (Bitfield-Mask: 0x01) */ +#define ANA_REG3_BGPPD ANA_REG3_BGPPD_Msk +#define ANA_REG3_CMP2PDN_Pos (2UL) /*!< ANA REG3: CMP2PDN (Bit 2) */ +#define ANA_REG3_CMP2PDN_Msk (0x4UL) /*!< ANA REG3: CMP2PDN (Bitfield-Mask: 0x01) */ +#define ANA_REG3_CMP2PDN ANA_REG3_CMP2PDN_Msk +#define ANA_REG3_CMP1PDN_Pos (1UL) /*!< ANA REG3: CMP1PDN (Bit 1) */ +#define ANA_REG3_CMP1PDN_Msk (0x2UL) /*!< ANA REG3: CMP1PDN (Bitfield-Mask: 0x01) */ +#define ANA_REG3_CMP1PDN ANA_REG3_CMP1PDN_Msk +/* ========================================================= REG4 ========================================================== */ +/* ========================================================= REG5 ========================================================== */ +#define ANA_REG5_AVCCLVDETPD_Pos (6UL) /*!< ANA REG5: AVCCLVDETPD (Bit 6) */ +#define ANA_REG5_AVCCLVDETPD_Msk (0x40UL) /*!< ANA REG5: AVCCLVDETPD (Bitfield-Mask: 0x01) */ +#define ANA_REG5_AVCCLVDETPD ANA_REG5_AVCCLVDETPD_Msk +#define ANA_REG5_CMP2IT_Pos (2UL) /*!< ANA REG5: CMP2IT (Bit 2) */ +#define ANA_REG5_CMP2IT_Msk (0xcUL) /*!< ANA REG5: CMP2IT (Bitfield-Mask: 0x03) */ +#define ANA_REG5_CMP2IT ANA_REG5_CMP2IT_Msk +#define ANA_REG5_CMP1IT_Pos (0UL) /*!< ANA REG5: CMP1IT (Bit 0) */ +#define ANA_REG5_CMP1IT_Msk (0x3UL) /*!< ANA REG5: CMP1IT (Bitfield-Mask: 0x03) */ +#define ANA_REG5_CMP1IT ANA_REG5_CMP1IT_Msk +/* ========================================================= REG6 ========================================================== */ +#define ANA_REG6_BATRTCDISC_Pos (7UL) /*!< ANA REG6: BATRTCDISC (Bit 7) */ +#define ANA_REG6_BATRTCDISC_Msk (0x80UL) /*!< ANA REG6: BATRTCDISC (Bitfield-Mask: 0x01) */ +#define ANA_REG6_BATRTCDISC ANA_REG6_BATRTCDISC_Msk +#define ANA_REG6_BAT1DISC_Pos (6UL) /*!< ANA REG6: BAT1DISC (Bit 6) */ +#define ANA_REG6_BAT1DISC_Msk (0x40UL) /*!< ANA REG6: BAT1DISC (Bitfield-Mask: 0x01) */ +#define ANA_REG6_BAT1DISC ANA_REG6_BAT1DISC_Msk +#define ANA_REG6_LCDBMODE_Pos (0UL) /*!< ANA REG6: LCDBMODE (Bit 0) */ +#define ANA_REG6_LCDBMODE_Msk (0x1UL) /*!< ANA REG6: LCDBMODE (Bitfield-Mask: 0x01) */ +#define ANA_REG6_LCDBMODE ANA_REG6_LCDBMODE_Msk +/* ========================================================= REG7 ========================================================== */ +#define ANA_REG7_VDCINHYSSEL_Pos (2UL) /*!< ANA REG7: VDCINHYSSEL (Bit 2) */ +#define ANA_REG7_VDCINHYSSEL_Msk (0x4UL) /*!< ANA REG7: VDCINHYSSEL (Bitfield-Mask: 0x01) */ +#define ANA_REG7_VDCINHYSSEL ANA_REG7_VDCINHYSSEL_Msk +/* ========================================================= REG8 ========================================================== */ +#define ANA_REG8_AVCCLDOPD_Pos (7UL) /*!< ANA REG8: AVCCLDOPD (Bit 7) */ +#define ANA_REG8_AVCCLDOPD_Msk (0x80UL) /*!< ANA REG8: AVCCLDOPD (Bitfield-Mask: 0x01) */ +#define ANA_REG8_AVCCLDOPD ANA_REG8_AVCCLDOPD_Msk +#define ANA_REG8_VDDPVDSEL_Pos (4UL) /*!< ANA REG8: VDDPVDSEL (Bit 4) */ +#define ANA_REG8_VDDPVDSEL_Msk (0x70UL) /*!< ANA REG8: VDDPVDSEL (Bitfield-Mask: 0x07) */ +#define ANA_REG8_VDDPVDSEL ANA_REG8_VDDPVDSEL_Msk +#define ANA_REG8_DVCCSEL_Pos (0UL) /*!< ANA REG8: DVCCSEL (Bit 0) */ +#define ANA_REG8_DVCCSEL_Msk (0x3UL) /*!< ANA REG8: DVCCSEL (Bitfield-Mask: 0x03) */ +#define ANA_REG8_DVCCSEL ANA_REG8_DVCCSEL_Msk +/* ========================================================= REG9 ========================================================== */ +#define ANA_REG9_VDDDETPD_Pos (7UL) /*!< ANA REG9: VDDDETPD (Bit 7) */ +#define ANA_REG9_VDDDETPD_Msk (0x80UL) /*!< ANA REG9: VDDDETPD (Bitfield-Mask: 0x01) */ +#define ANA_REG9_VDDDETPD ANA_REG9_VDDDETPD_Msk +#define ANA_REG9_PLLHSEL_Pos (3UL) /*!< ANA REG9: PLLHSEL (Bit 3) */ +#define ANA_REG9_PLLHSEL_Msk (0x78UL) /*!< ANA REG9: PLLHSEL (Bitfield-Mask: 0x0f) */ +#define ANA_REG9_PLLHSEL ANA_REG9_PLLHSEL_Msk +#define ANA_REG9_PLLLSEL_Pos (0UL) /*!< ANA REG9: PLLLSEL (Bit 0) */ +#define ANA_REG9_PLLLSEL_Msk (0x7UL) /*!< ANA REG9: PLLLSEL (Bitfield-Mask: 0x07) */ +#define ANA_REG9_PLLLSEL ANA_REG9_PLLLSEL_Msk +/* ========================================================= REGA ========================================================== */ +#define ANA_REGA_VDCINDETPD_Pos (7UL) /*!< ANA REGA: VDCINDETPD (Bit 7) */ +#define ANA_REGA_VDCINDETPD_Msk (0x80UL) /*!< ANA REGA: VDCINDETPD (Bitfield-Mask: 0x01) */ +#define ANA_REGA_VDCINDETPD ANA_REGA_VDCINDETPD_Msk +/* ========================================================= REGB ========================================================== */ +#define ANA_REGB_RCLTRIM_Pos (0UL) /*!< ANA REGB: RCLTRIM (Bit 0) */ +#define ANA_REGB_RCLTRIM_Msk (0x1fUL) /*!< ANA REGB: RCLTRIM (Bitfield-Mask: 0x1f) */ +#define ANA_REGB_RCLTRIM ANA_REGB_RCLTRIM_Msk +/* ========================================================= REGC ========================================================== */ +#define ANA_REGC_RCHTRIM_Pos (0UL) /*!< ANA REGC: RCHTRIM (Bit 0) */ +#define ANA_REGC_RCHTRIM_Msk (0x3fUL) /*!< ANA REGC: RCHTRIM (Bitfield-Mask: 0x3f) */ +#define ANA_REGC_RCHTRIM ANA_REGC_RCHTRIM_Msk +/* ========================================================= REGD ========================================================== */ +/* ========================================================= REGE ========================================================== */ +#define ANA_REGE_BKPWREN_Pos (7UL) /*!< ANA REGE: BKPWREN (Bit 7) */ +#define ANA_REGE_BKPWREN_Msk (0x80UL) /*!< ANA REGE: BKPWREN (Bitfield-Mask: 0x01) */ +#define ANA_REGE_BKPWREN ANA_REGE_BKPWREN_Msk +/* ========================================================= REGF ========================================================== */ +#define ANA_REGF_ADTREF3SEL_Pos (7UL) /*!< ANA REGF: ADTREF3SEL (Bit 7) */ +#define ANA_REGF_ADTREF3SEL_Msk (0x80UL) /*!< ANA REGF: ADTREF3SEL (Bitfield-Mask: 0x01) */ +#define ANA_REGF_ADTREF3SEL ANA_REGF_ADTREF3SEL_Msk +#define ANA_REGF_ADTREF2SEL_Pos (6UL) /*!< ANA REGF: ADTREF2SEL (Bit 6) */ +#define ANA_REGF_ADTREF2SEL_Msk (0x40UL) /*!< ANA REGF: ADTREF2SEL (Bitfield-Mask: 0x01) */ +#define ANA_REGF_ADTREF2SEL ANA_REGF_ADTREF2SEL_Msk +#define ANA_REGF_ADTREF1SEL_Pos (5UL) /*!< ANA REGF: ADTREF1SEL (Bit 5) */ +#define ANA_REGF_ADTREF1SEL_Msk (0x20UL) /*!< ANA REGF: ADTREF1SEL (Bitfield-Mask: 0x01) */ +#define ANA_REGF_ADTREF1SEL ANA_REGF_ADTREF1SEL_Msk +#define ANA_REGF_ADTSEL_Pos (4UL) /*!< ANA REGF: ADTSEL (Bit 4) */ +#define ANA_REGF_ADTSEL_Msk (0x10UL) /*!< ANA REGF: ADTSEL (Bitfield-Mask: 0x01) */ +#define ANA_REGF_ADTSEL ANA_REGF_ADTSEL_Msk +#define ANA_REGF_ADTPDN_Pos (3UL) /*!< ANA REGF: ADTPDN (Bit 3) */ +#define ANA_REGF_ADTPDN_Msk (0x8UL) /*!< ANA REGF: ADTPDN (Bitfield-Mask: 0x01) */ +#define ANA_REGF_ADTPDN ANA_REGF_ADTPDN_Msk +#define ANA_REGF_AVCCOEN_Pos (2UL) /*!< ANA REGF: AVCCOEN (Bit 2) */ +#define ANA_REGF_AVCCOEN_Msk (0x4UL) /*!< ANA REGF: AVCCOEN (Bitfield-Mask: 0x01) */ +#define ANA_REGF_AVCCOEN ANA_REGF_AVCCOEN_Msk +#define ANA_REGF_BATRTCDETEN_Pos (1UL) /*!< ANA REGF: BATRTCDETEN (Bit 1) */ +#define ANA_REGF_BATRTCDETEN_Msk (0x2UL) /*!< ANA REGF: BATRTCDETEN (Bitfield-Mask: 0x01) */ +#define ANA_REGF_BATRTCDETEN ANA_REGF_BATRTCDETEN_Msk +#define ANA_REGF_BAT1DETEN_Pos (0UL) /*!< ANA REGF: BAT1DETEN (Bit 0) */ +#define ANA_REGF_BAT1DETEN_Msk (0x1UL) /*!< ANA REGF: BAT1DETEN (Bitfield-Mask: 0x01) */ +#define ANA_REGF_BAT1DETEN ANA_REGF_BAT1DETEN_Msk +/* ========================================================= REG10 ========================================================= */ +/* ========================================================= REG11 ========================================================= */ +#define ANA_REG11_VINBUFPD_Pos (7UL) /*!< ANA REG11: VINBUFPD (Bit 7) */ +#define ANA_REG11_VINBUFPD_Msk (0x80UL) /*!< ANA REG11: VINBUFPD (Bitfield-Mask: 0x01) */ +#define ANA_REG11_VINBUFPD ANA_REG11_VINBUFPD_Msk +#define ANA_REG11_REFBUFPD_Pos (6UL) /*!< ANA REG11: REFBUFPD (Bit 6) */ +#define ANA_REG11_REFBUFPD_Msk (0x40UL) /*!< ANA REG11: REFBUFPD (Bitfield-Mask: 0x01) */ +#define ANA_REG11_REFBUFPD ANA_REG11_REFBUFPD_Msk +/* ========================================================= CTRL ========================================================== */ +#define ANA_CTRL_PDNS2_Pos (26UL) /*!< ANA CTRL: PDNS2 (Bit 26) */ +#define ANA_CTRL_PDNS2_Msk (0x4000000UL) /*!< ANA CTRL: PDNS2 (Bitfield-Mask: 0x01) */ +#define ANA_CTRL_PDNS2 ANA_CTRL_PDNS2_Msk +#define ANA_CTRL_CMP2DEB_Pos (22UL) /*!< ANA CTRL: CMP2DEB (Bit 22) */ +#define ANA_CTRL_CMP2DEB_Msk (0xc00000UL) /*!< ANA CTRL: CMP2DEB (Bitfield-Mask: 0x03) */ +#define ANA_CTRL_CMP2DEB ANA_CTRL_CMP2DEB_Msk +#define ANA_CTRL_CMP1DEB_Pos (20UL) /*!< ANA CTRL: CMP1DEB (Bit 20) */ +#define ANA_CTRL_CMP1DEB_Msk (0x300000UL) /*!< ANA CTRL: CMP1DEB (Bitfield-Mask: 0x03) */ +#define ANA_CTRL_CMP1DEB ANA_CTRL_CMP1DEB_Msk +#define ANA_CTRL_RCHTGT_Pos (8UL) /*!< ANA CTRL: RCHTGT (Bit 8) */ +#define ANA_CTRL_RCHTGT_Msk (0xff00UL) /*!< ANA CTRL: RCHTGT (Bitfield-Mask: 0xff) */ +#define ANA_CTRL_RCHTGT ANA_CTRL_RCHTGT_Msk +#define ANA_CTRL_PDNS_Pos (6UL) /*!< ANA CTRL: PDNS (Bit 6) */ +#define ANA_CTRL_PDNS_Msk (0x40UL) /*!< ANA CTRL: PDNS (Bitfield-Mask: 0x01) */ +#define ANA_CTRL_PDNS ANA_CTRL_PDNS_Msk +#define ANA_CTRL_CMP2SEL_Pos (2UL) /*!< ANA CTRL: CMP2SEL (Bit 2) */ +#define ANA_CTRL_CMP2SEL_Msk (0xcUL) /*!< ANA CTRL: CMP2SEL (Bitfield-Mask: 0x03) */ +#define ANA_CTRL_CMP2SEL ANA_CTRL_CMP2SEL_Msk +#define ANA_CTRL_CMP1SEL_Pos (0UL) /*!< ANA CTRL: CMP1SEL (Bit 0) */ +#define ANA_CTRL_CMP1SEL_Msk (0x3UL) /*!< ANA CTRL: CMP1SEL (Bitfield-Mask: 0x03) */ +#define ANA_CTRL_CMP1SEL ANA_CTRL_CMP1SEL_Msk +/* ======================================================== CMPOUT ========================================================= */ +#define ANA_CMPOUT_TADCO_Pos (14UL) /*!< ANA CMPOUT: TADCO (Bit 14) */ +#define ANA_CMPOUT_TADCO_Msk (0xc000UL) /*!< ANA CMPOUT: TADCO (Bitfield-Mask: 0x03) */ +#define ANA_CMPOUT_TADCO ANA_CMPOUT_TADCO_Msk +#define ANA_CMPOUT_AVCCLV_Pos (10UL) /*!< ANA CMPOUT: AVCCLV (Bit 10) */ +#define ANA_CMPOUT_AVCCLV_Msk (0x400UL) /*!< ANA CMPOUT: AVCCLV (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_AVCCLV ANA_CMPOUT_AVCCLV_Msk +#define ANA_CMPOUT_VDCINDROP_Pos (8UL) /*!< ANA CMPOUT: VDCINDROP (Bit 8) */ +#define ANA_CMPOUT_VDCINDROP_Msk (0x100UL) /*!< ANA CMPOUT: VDCINDROP (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_VDCINDROP ANA_CMPOUT_VDCINDROP_Msk +#define ANA_CMPOUT_VDDALARM_Pos (7UL) /*!< ANA CMPOUT: VDDALARM (Bit 7) */ +#define ANA_CMPOUT_VDDALARM_Msk (0x80UL) /*!< ANA CMPOUT: VDDALARM (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_VDDALARM ANA_CMPOUT_VDDALARM_Msk +#define ANA_CMPOUT_CMP2_Pos (3UL) /*!< ANA CMPOUT: CMP2 (Bit 3) */ +#define ANA_CMPOUT_CMP2_Msk (0x8UL) /*!< ANA CMPOUT: CMP2 (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_CMP2 ANA_CMPOUT_CMP2_Msk +#define ANA_CMPOUT_CMP1_Pos (2UL) /*!< ANA CMPOUT: CMP1 (Bit 2) */ +#define ANA_CMPOUT_CMP1_Msk (0x4UL) /*!< ANA CMPOUT: CMP1 (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_CMP1 ANA_CMPOUT_CMP1_Msk +#define ANA_CMPOUT_LOCKL_Pos (1UL) /*!< ANA CMPOUT: LOCKL (Bit 1) */ +#define ANA_CMPOUT_LOCKL_Msk (0x2UL) /*!< ANA CMPOUT: LOCKL (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_LOCKL ANA_CMPOUT_LOCKL_Msk +#define ANA_CMPOUT_LOCKH_Pos (0UL) /*!< ANA CMPOUT: LOCKH (Bit 0) */ +#define ANA_CMPOUT_LOCKH_Msk (0x1UL) /*!< ANA CMPOUT: LOCKH (Bitfield-Mask: 0x01) */ +#define ANA_CMPOUT_LOCKH ANA_CMPOUT_LOCKH_Msk +/* ======================================================= ADCSTATE ======================================================== */ +#define ANA_ADCSTATE_CAL_EN_Pos (5UL) /*!< ANA ADCSTATE: CAL_EN (Bit 5) */ +#define ANA_ADCSTATE_CAL_EN_Msk (0x20UL) /*!< ANA ADCSTATE: CAL_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCSTATE_CAL_EN ANA_ADCSTATE_CAL_EN_Msk +#define ANA_ADCSTATE_RESET_Pos (4UL) /*!< ANA ADCSTATE: RESET (Bit 4) */ +#define ANA_ADCSTATE_RESET_Msk (0x10UL) /*!< ANA ADCSTATE: RESET (Bitfield-Mask: 0x01) */ +#define ANA_ADCSTATE_RESET ANA_ADCSTATE_RESET_Msk +#define ANA_ADCSTATE_ADC_EN_Pos (3UL) /*!< ANA ADCSTATE: ADC_EN (Bit 3) */ +#define ANA_ADCSTATE_ADC_EN_Msk (0x8UL) /*!< ANA ADCSTATE: ADC_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCSTATE_ADC_EN ANA_ADCSTATE_ADC_EN_Msk +#define ANA_ADCSTATE_ADCSTATE_Pos (0UL) /*!< ANA ADCSTATE: ADCSTATE (Bit 0) */ +#define ANA_ADCSTATE_ADCSTATE_Msk (0x7UL) /*!< ANA ADCSTATE: ADCSTATE (Bitfield-Mask: 0x07) */ +#define ANA_ADCSTATE_ADCSTATE ANA_ADCSTATE_ADCSTATE_Msk +/* ======================================================== INTSTS ========================================================= */ +#define ANA_INTSTS_INTSTS21_Pos (21UL) /*!< ANA INTSTS: INTSTS21 (Bit 21) */ +#define ANA_INTSTS_INTSTS21_Msk (0x200000UL) /*!< ANA INTSTS: INTSTS21 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS21 ANA_INTSTS_INTSTS21_Msk +#define ANA_INTSTS_INTSTS20_Pos (20UL) /*!< ANA INTSTS: INTSTS20 (Bit 20) */ +#define ANA_INTSTS_INTSTS20_Msk (0x100000UL) /*!< ANA INTSTS: INTSTS20 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS20 ANA_INTSTS_INTSTS20_Msk +#define ANA_INTSTS_INTSTS19_Pos (19UL) /*!< ANA INTSTS: INTSTS19 (Bit 19) */ +#define ANA_INTSTS_INTSTS19_Msk (0x80000UL) /*!< ANA INTSTS: INTSTS19 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS19 ANA_INTSTS_INTSTS19_Msk +#define ANA_INTSTS_INTSTS18_Pos (18UL) /*!< ANA INTSTS: INTSTS18 (Bit 18) */ +#define ANA_INTSTS_INTSTS18_Msk (0x40000UL) /*!< ANA INTSTS: INTSTS18 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS18 ANA_INTSTS_INTSTS18_Msk +#define ANA_INTSTS_INTSTS17_Pos (17UL) /*!< ANA INTSTS: INTSTS17 (Bit 17) */ +#define ANA_INTSTS_INTSTS17_Msk (0x20000UL) /*!< ANA INTSTS: INTSTS17 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS17 ANA_INTSTS_INTSTS17_Msk +#define ANA_INTSTS_INTSTS16_Pos (16UL) /*!< ANA INTSTS: INTSTS16 (Bit 16) */ +#define ANA_INTSTS_INTSTS16_Msk (0x10000UL) /*!< ANA INTSTS: INTSTS16 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS16 ANA_INTSTS_INTSTS16_Msk +#define ANA_INTSTS_INTSTS15_Pos (15UL) /*!< ANA INTSTS: INTSTS15 (Bit 15) */ +#define ANA_INTSTS_INTSTS15_Msk (0x8000UL) /*!< ANA INTSTS: INTSTS15 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS15 ANA_INTSTS_INTSTS15_Msk +#define ANA_INTSTS_INTSTS14_Pos (14UL) /*!< ANA INTSTS: INTSTS14 (Bit 14) */ +#define ANA_INTSTS_INTSTS14_Msk (0x4000UL) /*!< ANA INTSTS: INTSTS14 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS14 ANA_INTSTS_INTSTS14_Msk +#define ANA_INTSTS_INTSTS13_Pos (13UL) /*!< ANA INTSTS: INTSTS13 (Bit 13) */ +#define ANA_INTSTS_INTSTS13_Msk (0x2000UL) /*!< ANA INTSTS: INTSTS13 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS13 ANA_INTSTS_INTSTS13_Msk +#define ANA_INTSTS_INTSTS12_Pos (12UL) /*!< ANA INTSTS: INTSTS12 (Bit 12) */ +#define ANA_INTSTS_INTSTS12_Msk (0x1000UL) /*!< ANA INTSTS: INTSTS12 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS12 ANA_INTSTS_INTSTS12_Msk +#define ANA_INTSTS_INTSTS11_Pos (11UL) /*!< ANA INTSTS: INTSTS11 (Bit 11) */ +#define ANA_INTSTS_INTSTS11_Msk (0x800UL) /*!< ANA INTSTS: INTSTS11 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS11 ANA_INTSTS_INTSTS11_Msk +#define ANA_INTSTS_INTSTS10_Pos (10UL) /*!< ANA INTSTS: INTSTS10 (Bit 10) */ +#define ANA_INTSTS_INTSTS10_Msk (0x400UL) /*!< ANA INTSTS: INTSTS10 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS10 ANA_INTSTS_INTSTS10_Msk +#define ANA_INTSTS_INTSTS8_Pos (8UL) /*!< ANA INTSTS: INTSTS8 (Bit 8) */ +#define ANA_INTSTS_INTSTS8_Msk (0x100UL) /*!< ANA INTSTS: INTSTS8 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS8 ANA_INTSTS_INTSTS8_Msk +#define ANA_INTSTS_INTSTS7_Pos (7UL) /*!< ANA INTSTS: INTSTS7 (Bit 7) */ +#define ANA_INTSTS_INTSTS7_Msk (0x80UL) /*!< ANA INTSTS: INTSTS7 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS7 ANA_INTSTS_INTSTS7_Msk +#define ANA_INTSTS_INTSTS3_Pos (3UL) /*!< ANA INTSTS: INTSTS3 (Bit 3) */ +#define ANA_INTSTS_INTSTS3_Msk (0x8UL) /*!< ANA INTSTS: INTSTS3 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS3 ANA_INTSTS_INTSTS3_Msk +#define ANA_INTSTS_INTSTS2_Pos (2UL) /*!< ANA INTSTS: INTSTS2 (Bit 2) */ +#define ANA_INTSTS_INTSTS2_Msk (0x4UL) /*!< ANA INTSTS: INTSTS2 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS2 ANA_INTSTS_INTSTS2_Msk +#define ANA_INTSTS_INTSTS1_Pos (1UL) /*!< ANA INTSTS: INTSTS1 (Bit 1) */ +#define ANA_INTSTS_INTSTS1_Msk (0x2UL) /*!< ANA INTSTS: INTSTS1 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS1 ANA_INTSTS_INTSTS1_Msk +#define ANA_INTSTS_INTSTS0_Pos (0UL) /*!< ANA INTSTS: INTSTS0 (Bit 0) */ +#define ANA_INTSTS_INTSTS0_Msk (0x1UL) /*!< ANA INTSTS: INTSTS0 (Bitfield-Mask: 0x01) */ +#define ANA_INTSTS_INTSTS0 ANA_INTSTS_INTSTS0_Msk +/* ========================================================= INTEN ========================================================= */ +#define ANA_INTEN_INTEN21_Pos (21UL) /*!< ANA INTEN: INTEN21 (Bit 21) */ +#define ANA_INTEN_INTEN21_Msk (0x200000UL) /*!< ANA INTEN: INTEN21 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN21 ANA_INTEN_INTEN21_Msk +#define ANA_INTEN_INTEN20_Pos (20UL) /*!< ANA INTEN: INTEN20 (Bit 20) */ +#define ANA_INTEN_INTEN20_Msk (0x100000UL) /*!< ANA INTEN: INTEN20 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN20 ANA_INTEN_INTEN20_Msk +#define ANA_INTEN_INTEN19_Pos (19UL) /*!< ANA INTEN: INTEN19 (Bit 19) */ +#define ANA_INTEN_INTEN19_Msk (0x80000UL) /*!< ANA INTEN: INTEN19 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN19 ANA_INTEN_INTEN19_Msk +#define ANA_INTEN_INTEN18_Pos (18UL) /*!< ANA INTEN: INTEN18 (Bit 18) */ +#define ANA_INTEN_INTEN18_Msk (0x40000UL) /*!< ANA INTEN: INTEN18 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN18 ANA_INTEN_INTEN18_Msk +#define ANA_INTEN_INTEN17_Pos (17UL) /*!< ANA INTEN: INTEN17 (Bit 17) */ +#define ANA_INTEN_INTEN17_Msk (0x20000UL) /*!< ANA INTEN: INTEN17 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN17 ANA_INTEN_INTEN17_Msk +#define ANA_INTEN_INTEN16_Pos (16UL) /*!< ANA INTEN: INTEN16 (Bit 16) */ +#define ANA_INTEN_INTEN16_Msk (0x10000UL) /*!< ANA INTEN: INTEN16 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN16 ANA_INTEN_INTEN16_Msk +#define ANA_INTEN_INTEN15_Pos (15UL) /*!< ANA INTEN: INTEN15 (Bit 15) */ +#define ANA_INTEN_INTEN15_Msk (0x8000UL) /*!< ANA INTEN: INTEN15 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN15 ANA_INTEN_INTEN15_Msk +#define ANA_INTEN_INTEN14_Pos (14UL) /*!< ANA INTEN: INTEN14 (Bit 14) */ +#define ANA_INTEN_INTEN14_Msk (0x4000UL) /*!< ANA INTEN: INTEN14 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN14 ANA_INTEN_INTEN14_Msk +#define ANA_INTEN_INTEN13_Pos (13UL) /*!< ANA INTEN: INTEN13 (Bit 13) */ +#define ANA_INTEN_INTEN13_Msk (0x2000UL) /*!< ANA INTEN: INTEN13 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN13 ANA_INTEN_INTEN13_Msk +#define ANA_INTEN_INTEN12_Pos (12UL) /*!< ANA INTEN: INTEN12 (Bit 12) */ +#define ANA_INTEN_INTEN12_Msk (0x1000UL) /*!< ANA INTEN: INTEN12 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN12 ANA_INTEN_INTEN12_Msk +#define ANA_INTEN_INTEN11_Pos (11UL) /*!< ANA INTEN: INTEN11 (Bit 11) */ +#define ANA_INTEN_INTEN11_Msk (0x800UL) /*!< ANA INTEN: INTEN11 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN11 ANA_INTEN_INTEN11_Msk +#define ANA_INTEN_INTEN10_Pos (10UL) /*!< ANA INTEN: INTEN10 (Bit 10) */ +#define ANA_INTEN_INTEN10_Msk (0x400UL) /*!< ANA INTEN: INTEN10 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN10 ANA_INTEN_INTEN10_Msk +#define ANA_INTEN_INTEN8_Pos (8UL) /*!< ANA INTEN: INTEN8 (Bit 8) */ +#define ANA_INTEN_INTEN8_Msk (0x100UL) /*!< ANA INTEN: INTEN8 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN8 ANA_INTEN_INTEN8_Msk +#define ANA_INTEN_INTEN7_Pos (7UL) /*!< ANA INTEN: INTEN7 (Bit 7) */ +#define ANA_INTEN_INTEN7_Msk (0x80UL) /*!< ANA INTEN: INTEN7 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN7 ANA_INTEN_INTEN7_Msk +#define ANA_INTEN_INTEN3_Pos (3UL) /*!< ANA INTEN: INTEN3 (Bit 3) */ +#define ANA_INTEN_INTEN3_Msk (0x8UL) /*!< ANA INTEN: INTEN3 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN3 ANA_INTEN_INTEN3_Msk +#define ANA_INTEN_INTEN2_Pos (2UL) /*!< ANA INTEN: INTEN2 (Bit 2) */ +#define ANA_INTEN_INTEN2_Msk (0x4UL) /*!< ANA INTEN: INTEN2 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN2 ANA_INTEN_INTEN2_Msk +#define ANA_INTEN_INTEN1_Pos (1UL) /*!< ANA INTEN: INTEN1 (Bit 1) */ +#define ANA_INTEN_INTEN1_Msk (0x2UL) /*!< ANA INTEN: INTEN1 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN1 ANA_INTEN_INTEN1_Msk +#define ANA_INTEN_INTEN0_Pos (0UL) /*!< ANA INTEN: INTEN0 (Bit 0) */ +#define ANA_INTEN_INTEN0_Msk (0x1UL) /*!< ANA INTEN: INTEN0 (Bitfield-Mask: 0x01) */ +#define ANA_INTEN_INTEN0 ANA_INTEN_INTEN0_Msk +/* ======================================================= ADCCTRL0 ======================================================== */ +#define ANA_ADCCTRL0_MTRIG_Pos (31UL) /*!< ANA ADCCTRL0: MTRIG (Bit 31) */ +#define ANA_ADCCTRL0_MTRIG_Msk (0x80000000UL) /*!< ANA ADCCTRL0: MTRIG (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL0_MTRIG ANA_ADCCTRL0_MTRIG_Msk +#define ANA_ADCCTRL0_STOP_Pos (19UL) /*!< ANA ADCCTRL0: STOP (Bit 19) */ +#define ANA_ADCCTRL0_STOP_Msk (0x80000UL) /*!< ANA ADCCTRL0: STOP (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL0_STOP ANA_ADCCTRL0_STOP_Msk +#define ANA_ADCCTRL0_AEN_Pos (16UL) /*!< ANA ADCCTRL0: AEN (Bit 16) */ +#define ANA_ADCCTRL0_AEN_Msk (0x70000UL) /*!< ANA ADCCTRL0: AEN (Bitfield-Mask: 0x07) */ +#define ANA_ADCCTRL0_AEN ANA_ADCCTRL0_AEN_Msk +#define ANA_ADCCTRL0_CLKSRCSEL_Pos (12UL) /*!< ANA ADCCTRL0: CLKSRCSEL (Bit 12) */ +#define ANA_ADCCTRL0_CLKSRCSEL_Msk (0x1000UL) /*!< ANA ADCCTRL0: CLKSRCSEL (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL0_CLKSRCSEL ANA_ADCCTRL0_CLKSRCSEL_Msk +/* ======================================================== CMPCTL ========================================================= */ +#define ANA_CMPCTL_PWR_DEB_SEL_Pos (24UL) /*!< ANA CMPCTL: PWR_DEB_SEL (Bit 24) */ +#define ANA_CMPCTL_PWR_DEB_SEL_Msk (0xff000000UL) /*!< ANA CMPCTL: PWR_DEB_SEL (Bitfield-Mask: 0xff) */ +#define ANA_CMPCTL_PWR_DEB_SEL ANA_CMPCTL_PWR_DEB_SEL_Msk +#define ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL_Pos (22UL) /*!< ANA CMPCTL: VDDALARM_CHK_FRQ_SEL (Bit 22) */ +#define ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL_Msk (0xc00000UL) /*!< ANA CMPCTL: VDDALARM_CHK_FRQ_SEL (Bitfield-Mask: 0x03) */ +#define ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL_Msk +#define ANA_CMPCTL_CMP2_IO_NODEB_Pos (21UL) /*!< ANA CMPCTL: CMP2_IO_NODEB (Bit 21) */ +#define ANA_CMPCTL_CMP2_IO_NODEB_Msk (0x200000UL) /*!< ANA CMPCTL: CMP2_IO_NODEB (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP2_IO_NODEB ANA_CMPCTL_CMP2_IO_NODEB_Msk +#define ANA_CMPCTL_CMP2_INT_MASK_EN_Pos (20UL) /*!< ANA CMPCTL: CMP2_INT_MASK_EN (Bit 20) */ +#define ANA_CMPCTL_CMP2_INT_MASK_EN_Msk (0x100000UL) /*!< ANA CMPCTL: CMP2_INT_MASK_EN (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP2_INT_MASK_EN ANA_CMPCTL_CMP2_INT_MASK_EN_Msk +#define ANA_CMPCTL_CMP1_IO_NODEB_Pos (17UL) /*!< ANA CMPCTL: CMP1_IO_NODEB (Bit 17) */ +#define ANA_CMPCTL_CMP1_IO_NODEB_Msk (0x20000UL) /*!< ANA CMPCTL: CMP1_IO_NODEB (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP1_IO_NODEB ANA_CMPCTL_CMP1_IO_NODEB_Msk +#define ANA_CMPCTL_CMP1_INT_MASK_EN_Pos (16UL) /*!< ANA CMPCTL: CMP1_INT_MASK_EN (Bit 16) */ +#define ANA_CMPCTL_CMP1_INT_MASK_EN_Msk (0x10000UL) /*!< ANA CMPCTL: CMP1_INT_MASK_EN (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP1_INT_MASK_EN ANA_CMPCTL_CMP1_INT_MASK_EN_Msk +#define ANA_CMPCTL_CMP2_CHK_NUM_Pos (12UL) /*!< ANA CMPCTL: CMP2_CHK_NUM (Bit 12) */ +#define ANA_CMPCTL_CMP2_CHK_NUM_Msk (0xf000UL) /*!< ANA CMPCTL: CMP2_CHK_NUM (Bitfield-Mask: 0x0f) */ +#define ANA_CMPCTL_CMP2_CHK_NUM ANA_CMPCTL_CMP2_CHK_NUM_Msk +#define ANA_CMPCTL_CMP2_THR_EN_Pos (11UL) /*!< ANA CMPCTL: CMP2_THR_EN (Bit 11) */ +#define ANA_CMPCTL_CMP2_THR_EN_Msk (0x800UL) /*!< ANA CMPCTL: CMP2_THR_EN (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP2_THR_EN ANA_CMPCTL_CMP2_THR_EN_Msk +#define ANA_CMPCTL_CMP2_CHK_FRQ_Pos (8UL) /*!< ANA CMPCTL: CMP2_CHK_FRQ (Bit 8) */ +#define ANA_CMPCTL_CMP2_CHK_FRQ_Msk (0x700UL) /*!< ANA CMPCTL: CMP2_CHK_FRQ (Bitfield-Mask: 0x07) */ +#define ANA_CMPCTL_CMP2_CHK_FRQ ANA_CMPCTL_CMP2_CHK_FRQ_Msk +#define ANA_CMPCTL_CMP1_CHK_NUM_Pos (4UL) /*!< ANA CMPCTL: CMP1_CHK_NUM (Bit 4) */ +#define ANA_CMPCTL_CMP1_CHK_NUM_Msk (0xf0UL) /*!< ANA CMPCTL: CMP1_CHK_NUM (Bitfield-Mask: 0x0f) */ +#define ANA_CMPCTL_CMP1_CHK_NUM ANA_CMPCTL_CMP1_CHK_NUM_Msk +#define ANA_CMPCTL_CMP1_THR_EN_Pos (3UL) /*!< ANA CMPCTL: CMP1_THR_EN (Bit 3) */ +#define ANA_CMPCTL_CMP1_THR_EN_Msk (0x8UL) /*!< ANA CMPCTL: CMP1_THR_EN (Bitfield-Mask: 0x01) */ +#define ANA_CMPCTL_CMP1_THR_EN ANA_CMPCTL_CMP1_THR_EN_Msk +#define ANA_CMPCTL_CMP1_CHK_FRQ_Pos (0UL) /*!< ANA CMPCTL: CMP1_CHK_FRQ (Bit 0) */ +#define ANA_CMPCTL_CMP1_CHK_FRQ_Msk (0x7UL) /*!< ANA CMPCTL: CMP1_CHK_FRQ (Bitfield-Mask: 0x07) */ +#define ANA_CMPCTL_CMP1_CHK_FRQ ANA_CMPCTL_CMP1_CHK_FRQ_Msk +/* ======================================================== ADCDATA ======================================================== */ +#define ANA_ADCDATA_ADCDATA_Pos (0UL) /*!< ANA ADCDATA: ADCDATA (Bit 0) */ +#define ANA_ADCDATA_ADCDATA_Msk (0xffffUL) /*!< ANA ADCDATA: ADCDATA (Bitfield-Mask: 0xffff) */ +#define ANA_ADCDATA_ADCDATA ANA_ADCDATA_ADCDATA_Msk +/* ======================================================== CMPCNT ========================================================= */ +#define ANA_CMPCNT_CNT_Pos (0UL) /*!< ANA CMPCNT: CNT (Bit 0) */ +#define ANA_CMPCNT_CNT_Msk (0xffffffffUL) /*!< ANA CMPCNT: CNT (Bitfield-Mask: 0xffffffff) */ +#define ANA_CMPCNT_CNT ANA_CMPCNT_CNT_Msk +/* ========================================================= MISC ========================================================== */ +#define ANA_MISC_TADCTH_Pos (4UL) /*!< ANA MISC: TADCTH (Bit 4) */ +#define ANA_MISC_TADCTH_Msk (0x30UL) /*!< ANA MISC: TADCTH (Bitfield-Mask: 0x03) */ +#define ANA_MISC_TADCTH ANA_MISC_TADCTH_Msk +/* ======================================================== ADCDOS ========================================================= */ +#define ANA_ADCDOS_DOS_Pos (0UL) /*!< ANA ADCDOS: DOS (Bit 0) */ +#define ANA_ADCDOS_DOS_Msk (0x1ffUL) /*!< ANA ADCDOS: DOS (Bitfield-Mask: 0x1ff) */ +#define ANA_ADCDOS_DOS ANA_ADCDOS_DOS_Msk +/* ======================================================== ADCDCPN ======================================================== */ +#define ANA_ADCDCPN_DCPN4_Pos (27UL) /*!< ANA ADCDCPN: DCPN4 (Bit 27) */ +#define ANA_ADCDCPN_DCPN4_Msk (0xf8000000UL) /*!< ANA ADCDCPN: DCPN4 (Bitfield-Mask: 0x1f) */ +#define ANA_ADCDCPN_DCPN4 ANA_ADCDCPN_DCPN4_Msk +#define ANA_ADCDCPN_DCPN3_Pos (18UL) /*!< ANA ADCDCPN: DCPN3 (Bit 18) */ +#define ANA_ADCDCPN_DCPN3_Msk (0x7fc0000UL) /*!< ANA ADCDCPN: DCPN3 (Bitfield-Mask: 0x1ff) */ +#define ANA_ADCDCPN_DCPN3 ANA_ADCDCPN_DCPN3_Msk +#define ANA_ADCDCPN_DCPN2_Pos (9UL) /*!< ANA ADCDCPN: DCPN2 (Bit 9) */ +#define ANA_ADCDCPN_DCPN2_Msk (0x3fe00UL) /*!< ANA ADCDCPN: DCPN2 (Bitfield-Mask: 0x1ff) */ +#define ANA_ADCDCPN_DCPN2 ANA_ADCDCPN_DCPN2_Msk +#define ANA_ADCDCPN_DCPN1_Pos (0UL) /*!< ANA ADCDCPN: DCPN1 (Bit 0) */ +#define ANA_ADCDCPN_DCPN1_Msk (0x1ffUL) /*!< ANA ADCDCPN: DCPN1 (Bitfield-Mask: 0x1ff) */ +#define ANA_ADCDCPN_DCPN1 ANA_ADCDCPN_DCPN1_Msk +/* ======================================================= ADCDCNM0 ======================================================== */ +#define ANA_ADCDCNM0_NM0_Pos (0UL) /*!< ANA ADCDCNM0: NM0 (Bit 0) */ +#define ANA_ADCDCNM0_NM0_Msk (0x1ffUL) /*!< ANA ADCDCNM0: NM0 (Bitfield-Mask: 0x1ff) */ +#define ANA_ADCDCNM0_NM0 ANA_ADCDCNM0_NM0_Msk +/* ====================================================== ADCDATADMA ======================================================= */ +#define ANA_ADCDATADMA_ADCDATA_DMA_Pos (0UL) /*!< ANA ADCDATADMA: ADCDATA_DMA (Bit 0) */ +#define ANA_ADCDATADMA_ADCDATA_DMA_Msk (0xffffUL) /*!< ANA ADCDATADMA: ADCDATA_DMA (Bitfield-Mask: 0xffff) */ +#define ANA_ADCDATADMA_ADCDATA_DMA ANA_ADCDATADMA_ADCDATA_DMA_Msk +/* ======================================================== CMPTHR ========================================================= */ +#define ANA_CMPTHR_CMP2_THR_Pos (16UL) /*!< ANA CMPTHR: CMP2_THR (Bit 16) */ +#define ANA_CMPTHR_CMP2_THR_Msk (0xffff0000UL) /*!< ANA CMPTHR: CMP2_THR (Bitfield-Mask: 0xffff) */ +#define ANA_CMPTHR_CMP2_THR ANA_CMPTHR_CMP2_THR_Msk +#define ANA_CMPTHR_CMP1_THR_Pos (0UL) /*!< ANA CMPTHR: CMP1_THR (Bit 0) */ +#define ANA_CMPTHR_CMP1_THR_Msk (0xffffUL) /*!< ANA CMPTHR: CMP1_THR (Bitfield-Mask: 0xffff) */ +#define ANA_CMPTHR_CMP1_THR ANA_CMPTHR_CMP1_THR_Msk +/* ======================================================= ADCCTRL1 ======================================================== */ +#define ANA_ADCCTRL1_RESDIV_CHx_Pos (16UL) /*!< ANA ADCCTRL1: RESDIV_CHx (Bit 16) */ +#define ANA_ADCCTRL1_RESDIV_CHx_Msk (0xffff0000UL) /*!< ANA ADCCTRL1: RESDIV_CHx (Bitfield-Mask: 0xffff) */ +#define ANA_ADCCTRL1_RESDIV_CHx ANA_ADCCTRL1_RESDIV_CHx_Msk +#define ANA_ADCCTRL1_UPPER_THD3_EN_Pos (15UL) /*!< ANA ADCCTRL1: UPPER_THD3_EN (Bit 15) */ +#define ANA_ADCCTRL1_UPPER_THD3_EN_Msk (0x8000UL) /*!< ANA ADCCTRL1: UPPER_THD3_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_UPPER_THD3_EN ANA_ADCCTRL1_UPPER_THD3_EN_Msk +#define ANA_ADCCTRL1_LOWER_THD3_EN_Pos (14UL) /*!< ANA ADCCTRL1: LOWER_THD3_EN (Bit 14) */ +#define ANA_ADCCTRL1_LOWER_THD3_EN_Msk (0x4000UL) /*!< ANA ADCCTRL1: LOWER_THD3_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_LOWER_THD3_EN ANA_ADCCTRL1_LOWER_THD3_EN_Msk +#define ANA_ADCCTRL1_UPPER_THD2_EN_Pos (13UL) /*!< ANA ADCCTRL1: UPPER_THD2_EN (Bit 13) */ +#define ANA_ADCCTRL1_UPPER_THD2_EN_Msk (0x2000UL) /*!< ANA ADCCTRL1: UPPER_THD2_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_UPPER_THD2_EN ANA_ADCCTRL1_UPPER_THD2_EN_Msk +#define ANA_ADCCTRL1_LOWER_THD2_EN_Pos (12UL) /*!< ANA ADCCTRL1: LOWER_THD2_EN (Bit 12) */ +#define ANA_ADCCTRL1_LOWER_THD2_EN_Msk (0x1000UL) /*!< ANA ADCCTRL1: LOWER_THD2_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_LOWER_THD2_EN ANA_ADCCTRL1_LOWER_THD2_EN_Msk +#define ANA_ADCCTRL1_UPPER_THD1_EN_Pos (11UL) /*!< ANA ADCCTRL1: UPPER_THD1_EN (Bit 11) */ +#define ANA_ADCCTRL1_UPPER_THD1_EN_Msk (0x800UL) /*!< ANA ADCCTRL1: UPPER_THD1_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_UPPER_THD1_EN ANA_ADCCTRL1_UPPER_THD1_EN_Msk +#define ANA_ADCCTRL1_LOWER_THD1_EN_Pos (10UL) /*!< ANA ADCCTRL1: LOWER_THD1_EN (Bit 10) */ +#define ANA_ADCCTRL1_LOWER_THD1_EN_Msk (0x400UL) /*!< ANA ADCCTRL1: LOWER_THD1_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_LOWER_THD1_EN ANA_ADCCTRL1_LOWER_THD1_EN_Msk +#define ANA_ADCCTRL1_UPPER_THD0_EN_Pos (9UL) /*!< ANA ADCCTRL1: UPPER_THD0_EN (Bit 9) */ +#define ANA_ADCCTRL1_UPPER_THD0_EN_Msk (0x200UL) /*!< ANA ADCCTRL1: UPPER_THD0_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_UPPER_THD0_EN ANA_ADCCTRL1_UPPER_THD0_EN_Msk +#define ANA_ADCCTRL1_LOWER_THD0_EN_Pos (8UL) /*!< ANA ADCCTRL1: LOWER_THD0_EN (Bit 8) */ +#define ANA_ADCCTRL1_LOWER_THD0_EN_Msk (0x100UL) /*!< ANA ADCCTRL1: LOWER_THD0_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL1_LOWER_THD0_EN ANA_ADCCTRL1_LOWER_THD0_EN_Msk +/* ======================================================= ADCCTRL2 ======================================================== */ +#define ANA_ADCCTRL2_SCAN_CHx_Pos (16UL) /*!< ANA ADCCTRL2: SCAN_CHx (Bit 16) */ +#define ANA_ADCCTRL2_SCAN_CHx_Msk (0xffff0000UL) /*!< ANA ADCCTRL2: SCAN_CHx (Bitfield-Mask: 0xffff) */ +#define ANA_ADCCTRL2_SCAN_CHx ANA_ADCCTRL2_SCAN_CHx_Msk +#define ANA_ADCCTRL2_CONV_ERR_Pos (11UL) /*!< ANA ADCCTRL2: CONV_ERR (Bit 11) */ +#define ANA_ADCCTRL2_CONV_ERR_Msk (0x800UL) /*!< ANA ADCCTRL2: CONV_ERR (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_CONV_ERR ANA_ADCCTRL2_CONV_ERR_Msk +#define ANA_ADCCTRL2_CAL_ERR_Pos (10UL) /*!< ANA ADCCTRL2: CAL_ERR (Bit 10) */ +#define ANA_ADCCTRL2_CAL_ERR_Msk (0x400UL) /*!< ANA ADCCTRL2: CAL_ERR (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_CAL_ERR ANA_ADCCTRL2_CAL_ERR_Msk +#define ANA_ADCCTRL2_CONV_ERR_CLR_Pos (9UL) /*!< ANA ADCCTRL2: CONV_ERR_CLR (Bit 9) */ +#define ANA_ADCCTRL2_CONV_ERR_CLR_Msk (0x200UL) /*!< ANA ADCCTRL2: CONV_ERR_CLR (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_CONV_ERR_CLR ANA_ADCCTRL2_CONV_ERR_CLR_Msk +#define ANA_ADCCTRL2_CAL_ERR_CLR_Pos (8UL) /*!< ANA ADCCTRL2: CAL_ERR_CLR (Bit 8) */ +#define ANA_ADCCTRL2_CAL_ERR_CLR_Msk (0x100UL) /*!< ANA ADCCTRL2: CAL_ERR_CLR (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_CAL_ERR_CLR ANA_ADCCTRL2_CAL_ERR_CLR_Msk +#define ANA_ADCCTRL2_ADC_CAL_DONE_Pos (7UL) /*!< ANA ADCCTRL2: ADC_CAL_DONE (Bit 7) */ +#define ANA_ADCCTRL2_ADC_CAL_DONE_Msk (0x80UL) /*!< ANA ADCCTRL2: ADC_CAL_DONE (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_ADC_CAL_DONE ANA_ADCCTRL2_ADC_CAL_DONE_Msk +#define ANA_ADCCTRL2_ADC_EN_TRG_CAL_Pos (6UL) /*!< ANA ADCCTRL2: ADC_EN_TRG_CAL (Bit 6) */ +#define ANA_ADCCTRL2_ADC_EN_TRG_CAL_Msk (0x40UL) /*!< ANA ADCCTRL2: ADC_EN_TRG_CAL (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_ADC_EN_TRG_CAL ANA_ADCCTRL2_ADC_EN_TRG_CAL_Msk +#define ANA_ADCCTRL2_BUSY_Pos (5UL) /*!< ANA ADCCTRL2: BUSY (Bit 5) */ +#define ANA_ADCCTRL2_BUSY_Msk (0x20UL) /*!< ANA ADCCTRL2: BUSY (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_BUSY ANA_ADCCTRL2_BUSY_Msk +#define ANA_ADCCTRL2_ADCCR_Pos (3UL) /*!< ANA ADCCTRL2: ADCCR (Bit 3) */ +#define ANA_ADCCTRL2_ADCCR_Msk (0x8UL) /*!< ANA ADCCTRL2: ADCCR (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_ADCCR ANA_ADCCTRL2_ADCCR_Msk +#define ANA_ADCCTRL2_RESET_Pos (1UL) /*!< ANA ADCCTRL2: RESET (Bit 1) */ +#define ANA_ADCCTRL2_RESET_Msk (0x2UL) /*!< ANA ADCCTRL2: RESET (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_RESET ANA_ADCCTRL2_RESET_Msk +#define ANA_ADCCTRL2_ADC_EN_Pos (0UL) /*!< ANA ADCCTRL2: ADC_EN (Bit 0) */ +#define ANA_ADCCTRL2_ADC_EN_Msk (0x1UL) /*!< ANA ADCCTRL2: ADC_EN (Bitfield-Mask: 0x01) */ +#define ANA_ADCCTRL2_ADC_EN ANA_ADCCTRL2_ADC_EN_Msk +/* ===================================================== ADCDATATHD1_0 ===================================================== */ +#define ANA_ADCDATATHD1_0_UPPER_THD1_Pos (24UL) /*!< ANA ADCDATATHD1_0: UPPER_THD1 (Bit 24) */ +#define ANA_ADCDATATHD1_0_UPPER_THD1_Msk (0xff000000UL) /*!< ANA ADCDATATHD1_0: UPPER_THD1 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD1_0_UPPER_THD1 ANA_ADCDATATHD1_0_UPPER_THD1_Msk +#define ANA_ADCDATATHD1_0_LOWER_THD1_Pos (16UL) /*!< ANA ADCDATATHD1_0: LOWER_THD1 (Bit 16) */ +#define ANA_ADCDATATHD1_0_LOWER_THD1_Msk (0xff0000UL) /*!< ANA ADCDATATHD1_0: LOWER_THD1 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD1_0_LOWER_THD1 ANA_ADCDATATHD1_0_LOWER_THD1_Msk +#define ANA_ADCDATATHD1_0_UPPER_THD0_Pos (8UL) /*!< ANA ADCDATATHD1_0: UPPER_THD0 (Bit 8) */ +#define ANA_ADCDATATHD1_0_UPPER_THD0_Msk (0xff00UL) /*!< ANA ADCDATATHD1_0: UPPER_THD0 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD1_0_UPPER_THD0 ANA_ADCDATATHD1_0_UPPER_THD0_Msk +#define ANA_ADCDATATHD1_0_LOWER_THD0_Pos (0UL) /*!< ANA ADCDATATHD1_0: LOWER_THD0 (Bit 0) */ +#define ANA_ADCDATATHD1_0_LOWER_THD0_Msk (0xffUL) /*!< ANA ADCDATATHD1_0: LOWER_THD0 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD1_0_LOWER_THD0 ANA_ADCDATATHD1_0_LOWER_THD0_Msk +/* ===================================================== ADCDATATHD3_2 ===================================================== */ +#define ANA_ADCDATATHD3_2_UPPER_THD3_Pos (24UL) /*!< ANA ADCDATATHD3_2: UPPER_THD3 (Bit 24) */ +#define ANA_ADCDATATHD3_2_UPPER_THD3_Msk (0xff000000UL) /*!< ANA ADCDATATHD3_2: UPPER_THD3 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD3_2_UPPER_THD3 ANA_ADCDATATHD3_2_UPPER_THD3_Msk +#define ANA_ADCDATATHD3_2_LOWER_THD3_Pos (16UL) /*!< ANA ADCDATATHD3_2: LOWER_THD3 (Bit 16) */ +#define ANA_ADCDATATHD3_2_LOWER_THD3_Msk (0xff0000UL) /*!< ANA ADCDATATHD3_2: LOWER_THD3 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD3_2_LOWER_THD3 ANA_ADCDATATHD3_2_LOWER_THD3_Msk +#define ANA_ADCDATATHD3_2_UPPER_THD2_Pos (8UL) /*!< ANA ADCDATATHD3_2: UPPER_THD2 (Bit 8) */ +#define ANA_ADCDATATHD3_2_UPPER_THD2_Msk (0xff00UL) /*!< ANA ADCDATATHD3_2: UPPER_THD2 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD3_2_UPPER_THD2 ANA_ADCDATATHD3_2_UPPER_THD2_Msk +#define ANA_ADCDATATHD3_2_LOWER_THD2_Pos (0UL) /*!< ANA ADCDATATHD3_2: LOWER_THD2 (Bit 0) */ +#define ANA_ADCDATATHD3_2_LOWER_THD2_Msk (0xffUL) /*!< ANA ADCDATATHD3_2: LOWER_THD2 (Bitfield-Mask: 0xff) */ +#define ANA_ADCDATATHD3_2_LOWER_THD2 ANA_ADCDATATHD3_2_LOWER_THD2_Msk +/* ===================================================== ADCDATATHD_CH ===================================================== */ +#define ANA_ADCDATATHD_CH_UPPER_THD3_TRGED_Pos (31UL) /*!< ANA ADCDATATHD_CH: UPPER_THD3_TRGED (Bit 31) */ +#define ANA_ADCDATATHD_CH_UPPER_THD3_TRGED_Msk (0x80000000UL) /*!< ANA ADCDATATHD_CH: UPPER_THD3_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_UPPER_THD3_TRGED ANA_ADCDATATHD_CH_UPPER_THD3_TRGED_Msk +#define ANA_ADCDATATHD_CH_LOWER_THD3_TRGED_Pos (30UL) /*!< ANA ADCDATATHD_CH: LOWER_THD3_TRGED (Bit 30) */ +#define ANA_ADCDATATHD_CH_LOWER_THD3_TRGED_Msk (0x40000000UL) /*!< ANA ADCDATATHD_CH: LOWER_THD3_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_LOWER_THD3_TRGED ANA_ADCDATATHD_CH_LOWER_THD3_TRGED_Msk +#define ANA_ADCDATATHD_CH_UPPER_THD2_TRGED_Pos (29UL) /*!< ANA ADCDATATHD_CH: UPPER_THD2_TRGED (Bit 29) */ +#define ANA_ADCDATATHD_CH_UPPER_THD2_TRGED_Msk (0x20000000UL) /*!< ANA ADCDATATHD_CH: UPPER_THD2_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_UPPER_THD2_TRGED ANA_ADCDATATHD_CH_UPPER_THD2_TRGED_Msk +#define ANA_ADCDATATHD_CH_LOWER_THD2_TRGED_Pos (28UL) /*!< ANA ADCDATATHD_CH: LOWER_THD2_TRGED (Bit 28) */ +#define ANA_ADCDATATHD_CH_LOWER_THD2_TRGED_Msk (0x10000000UL) /*!< ANA ADCDATATHD_CH: LOWER_THD2_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_LOWER_THD2_TRGED ANA_ADCDATATHD_CH_LOWER_THD2_TRGED_Msk +#define ANA_ADCDATATHD_CH_UPPER_THD1_TRGED_Pos (27UL) /*!< ANA ADCDATATHD_CH: UPPER_THD1_TRGED (Bit 27) */ +#define ANA_ADCDATATHD_CH_UPPER_THD1_TRGED_Msk (0x8000000UL) /*!< ANA ADCDATATHD_CH: UPPER_THD1_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_UPPER_THD1_TRGED ANA_ADCDATATHD_CH_UPPER_THD1_TRGED_Msk +#define ANA_ADCDATATHD_CH_LOWER_THD1_TRGED_Pos (26UL) /*!< ANA ADCDATATHD_CH: LOWER_THD1_TRGED (Bit 26) */ +#define ANA_ADCDATATHD_CH_LOWER_THD1_TRGED_Msk (0x4000000UL) /*!< ANA ADCDATATHD_CH: LOWER_THD1_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_LOWER_THD1_TRGED ANA_ADCDATATHD_CH_LOWER_THD1_TRGED_Msk +#define ANA_ADCDATATHD_CH_UPPER_THD0_TRGED_Pos (25UL) /*!< ANA ADCDATATHD_CH: UPPER_THD0_TRGED (Bit 25) */ +#define ANA_ADCDATATHD_CH_UPPER_THD0_TRGED_Msk (0x2000000UL) /*!< ANA ADCDATATHD_CH: UPPER_THD0_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_UPPER_THD0_TRGED ANA_ADCDATATHD_CH_UPPER_THD0_TRGED_Msk +#define ANA_ADCDATATHD_CH_LOWER_THD0_TRGED_Pos (24UL) /*!< ANA ADCDATATHD_CH: LOWER_THD0_TRGED (Bit 24) */ +#define ANA_ADCDATATHD_CH_LOWER_THD0_TRGED_Msk (0x1000000UL) /*!< ANA ADCDATATHD_CH: LOWER_THD0_TRGED (Bitfield-Mask: 0x01) */ +#define ANA_ADCDATATHD_CH_LOWER_THD0_TRGED ANA_ADCDATATHD_CH_LOWER_THD0_TRGED_Msk +#define ANA_ADCDATATHD_CH_THD3_SEL_Pos (22UL) /*!< ANA ADCDATATHD_CH: THD3_SEL (Bit 22) */ +#define ANA_ADCDATATHD_CH_THD3_SEL_Msk (0xc00000UL) /*!< ANA ADCDATATHD_CH: THD3_SEL (Bitfield-Mask: 0x03) */ +#define ANA_ADCDATATHD_CH_THD3_SEL ANA_ADCDATATHD_CH_THD3_SEL_Msk +#define ANA_ADCDATATHD_CH_THD2_SEL_Pos (20UL) /*!< ANA ADCDATATHD_CH: THD2_SEL (Bit 20) */ +#define ANA_ADCDATATHD_CH_THD2_SEL_Msk (0x300000UL) /*!< ANA ADCDATATHD_CH: THD2_SEL (Bitfield-Mask: 0x03) */ +#define ANA_ADCDATATHD_CH_THD2_SEL ANA_ADCDATATHD_CH_THD2_SEL_Msk +#define ANA_ADCDATATHD_CH_THD1_SEL_Pos (18UL) /*!< ANA ADCDATATHD_CH: THD1_SEL (Bit 18) */ +#define ANA_ADCDATATHD_CH_THD1_SEL_Msk (0xc0000UL) /*!< ANA ADCDATATHD_CH: THD1_SEL (Bitfield-Mask: 0x03) */ +#define ANA_ADCDATATHD_CH_THD1_SEL ANA_ADCDATATHD_CH_THD1_SEL_Msk +#define ANA_ADCDATATHD_CH_THD0_SEL_Pos (16UL) /*!< ANA ADCDATATHD_CH: THD0_SEL (Bit 16) */ +#define ANA_ADCDATATHD_CH_THD0_SEL_Msk (0x30000UL) /*!< ANA ADCDATATHD_CH: THD0_SEL (Bitfield-Mask: 0x03) */ +#define ANA_ADCDATATHD_CH_THD0_SEL ANA_ADCDATATHD_CH_THD0_SEL_Msk +#define ANA_ADCDATATHD_CH_THD3_CH_Pos (12UL) /*!< ANA ADCDATATHD_CH: THD3_CH (Bit 12) */ +#define ANA_ADCDATATHD_CH_THD3_CH_Msk (0xf000UL) /*!< ANA ADCDATATHD_CH: THD3_CH (Bitfield-Mask: 0x0f) */ +#define ANA_ADCDATATHD_CH_THD3_CH ANA_ADCDATATHD_CH_THD3_CH_Msk +#define ANA_ADCDATATHD_CH_THD2_CH_Pos (8UL) /*!< ANA ADCDATATHD_CH: THD2_CH (Bit 8) */ +#define ANA_ADCDATATHD_CH_THD2_CH_Msk (0xf00UL) /*!< ANA ADCDATATHD_CH: THD2_CH (Bitfield-Mask: 0x0f) */ +#define ANA_ADCDATATHD_CH_THD2_CH ANA_ADCDATATHD_CH_THD2_CH_Msk +#define ANA_ADCDATATHD_CH_THD1_CH_Pos (4UL) /*!< ANA ADCDATATHD_CH: THD1_CH (Bit 4) */ +#define ANA_ADCDATATHD_CH_THD1_CH_Msk (0xf0UL) /*!< ANA ADCDATATHD_CH: THD1_CH (Bitfield-Mask: 0x0f) */ +#define ANA_ADCDATATHD_CH_THD1_CH ANA_ADCDATATHD_CH_THD1_CH_Msk +#define ANA_ADCDATATHD_CH_THD0_CH_Pos (0UL) /*!< ANA ADCDATATHD_CH: THD0_CH (Bit 0) */ +#define ANA_ADCDATATHD_CH_THD0_CH_Msk (0xfUL) /*!< ANA ADCDATATHD_CH: THD0_CH (Bitfield-Mask: 0x0f) */ +#define ANA_ADCDATATHD_CH_THD0_CH ANA_ADCDATATHD_CH_THD0_CH_Msk + + +/* =========================================================================================================================== */ +/* ================ CRYPT ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CTRL ========================================================== */ +#define CRYPT_CTRL_NOSTOP_Pos (15UL) /*!< CRYPT CTRL: NOSTOP (Bit 15) */ +#define CRYPT_CTRL_NOSTOP_Msk (0x8000UL) /*!< CRYPT CTRL: NOSTOP (Bitfield-Mask: 0x01) */ +#define CRYPT_CTRL_NOSTOP CRYPT_CTRL_NOSTOP_Msk +#define CRYPT_CTRL_LENGTH_Pos (8UL) /*!< CRYPT CTRL: LENGTH (Bit 8) */ +#define CRYPT_CTRL_LENGTH_Msk (0xf00UL) /*!< CRYPT CTRL: LENGTH (Bitfield-Mask: 0x0f) */ +#define CRYPT_CTRL_LENGTH CRYPT_CTRL_LENGTH_Msk +#define CRYPT_CTRL_MODE_Pos (4UL) /*!< CRYPT CTRL: MODE (Bit 4) */ +#define CRYPT_CTRL_MODE_Msk (0x70UL) /*!< CRYPT CTRL: MODE (Bitfield-Mask: 0x07) */ +#define CRYPT_CTRL_MODE CRYPT_CTRL_MODE_Msk +#define CRYPT_CTRL_ACT_Pos (0UL) /*!< CRYPT CTRL: ACT (Bit 0) */ +#define CRYPT_CTRL_ACT_Msk (0x1UL) /*!< CRYPT CTRL: ACT (Bitfield-Mask: 0x01) */ +#define CRYPT_CTRL_ACT CRYPT_CTRL_ACT_Msk +/* ========================================================= PTRA ========================================================== */ +#define CRYPT_PTRA_PTRA_Pos (0UL) /*!< CRYPT PTRA: PTRA (Bit 0) */ +#define CRYPT_PTRA_PTRA_Msk (0xffffUL) /*!< CRYPT PTRA: PTRA (Bitfield-Mask: 0xffff) */ +#define CRYPT_PTRA_PTRA CRYPT_PTRA_PTRA_Msk +/* ========================================================= PTRB ========================================================== */ +#define CRYPT_PTRB_PTRB_Pos (0UL) /*!< CRYPT PTRB: PTRB (Bit 0) */ +#define CRYPT_PTRB_PTRB_Msk (0xffffUL) /*!< CRYPT PTRB: PTRB (Bitfield-Mask: 0xffff) */ +#define CRYPT_PTRB_PTRB CRYPT_PTRB_PTRB_Msk +/* ========================================================= PTRO ========================================================== */ +#define CRYPT_PTRO_PTRO_Pos (0UL) /*!< CRYPT PTRO: PTRO (Bit 0) */ +#define CRYPT_PTRO_PTRO_Msk (0xffffUL) /*!< CRYPT PTRO: PTRO (Bitfield-Mask: 0xffff) */ +#define CRYPT_PTRO_PTRO CRYPT_PTRO_PTRO_Msk +/* ========================================================= CARRY ========================================================= */ +#define CRYPT_CARRY_CARRY_Pos (0UL) /*!< CRYPT CARRY: CARRY (Bit 0) */ +#define CRYPT_CARRY_CARRY_Msk (0x1UL) /*!< CRYPT CARRY: CARRY (Bitfield-Mask: 0x01) */ +#define CRYPT_CARRY_CARRY CRYPT_CARRY_CARRY_Msk + + +/* =========================================================================================================================== */ +/* ================ DMA ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== IE =========================================================== */ +#define DMA_IE_C3DAIE_Pos (11UL) /*!< DMA IE: C3DAIE (Bit 11) */ +#define DMA_IE_C3DAIE_Msk (0x800UL) /*!< DMA IE: C3DAIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C3DAIE DMA_IE_C3DAIE_Msk +#define DMA_IE_C2DAIE_Pos (10UL) /*!< DMA IE: C2DAIE (Bit 10) */ +#define DMA_IE_C2DAIE_Msk (0x400UL) /*!< DMA IE: C2DAIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C2DAIE DMA_IE_C2DAIE_Msk +#define DMA_IE_C1DAIE_Pos (9UL) /*!< DMA IE: C1DAIE (Bit 9) */ +#define DMA_IE_C1DAIE_Msk (0x200UL) /*!< DMA IE: C1DAIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C1DAIE DMA_IE_C1DAIE_Msk +#define DMA_IE_C0DAIE_Pos (8UL) /*!< DMA IE: C0DAIE (Bit 8) */ +#define DMA_IE_C0DAIE_Msk (0x100UL) /*!< DMA IE: C0DAIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C0DAIE DMA_IE_C0DAIE_Msk +#define DMA_IE_C3FEIE_Pos (7UL) /*!< DMA IE: C3FEIE (Bit 7) */ +#define DMA_IE_C3FEIE_Msk (0x80UL) /*!< DMA IE: C3FEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C3FEIE DMA_IE_C3FEIE_Msk +#define DMA_IE_C2FEIE_Pos (6UL) /*!< DMA IE: C2FEIE (Bit 6) */ +#define DMA_IE_C2FEIE_Msk (0x40UL) /*!< DMA IE: C2FEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C2FEIE DMA_IE_C2FEIE_Msk +#define DMA_IE_C1FEIE_Pos (5UL) /*!< DMA IE: C1FEIE (Bit 5) */ +#define DMA_IE_C1FEIE_Msk (0x20UL) /*!< DMA IE: C1FEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C1FEIE DMA_IE_C1FEIE_Msk +#define DMA_IE_C0FEIE_Pos (4UL) /*!< DMA IE: C0FEIE (Bit 4) */ +#define DMA_IE_C0FEIE_Msk (0x10UL) /*!< DMA IE: C0FEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C0FEIE DMA_IE_C0FEIE_Msk +#define DMA_IE_C3PEIE_Pos (3UL) /*!< DMA IE: C3PEIE (Bit 3) */ +#define DMA_IE_C3PEIE_Msk (0x8UL) /*!< DMA IE: C3PEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C3PEIE DMA_IE_C3PEIE_Msk +#define DMA_IE_C2PEIE_Pos (2UL) /*!< DMA IE: C2PEIE (Bit 2) */ +#define DMA_IE_C2PEIE_Msk (0x4UL) /*!< DMA IE: C2PEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C2PEIE DMA_IE_C2PEIE_Msk +#define DMA_IE_C1PEIE_Pos (1UL) /*!< DMA IE: C1PEIE (Bit 1) */ +#define DMA_IE_C1PEIE_Msk (0x2UL) /*!< DMA IE: C1PEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C1PEIE DMA_IE_C1PEIE_Msk +#define DMA_IE_C0PEIE_Pos (0UL) /*!< DMA IE: C0PEIE (Bit 0) */ +#define DMA_IE_C0PEIE_Msk (0x1UL) /*!< DMA IE: C0PEIE (Bitfield-Mask: 0x01) */ +#define DMA_IE_C0PEIE DMA_IE_C0PEIE_Msk +/* ========================================================== STS ========================================================== */ +#define DMA_STS_C3DA_Pos (15UL) /*!< DMA STS: C3DA (Bit 15) */ +#define DMA_STS_C3DA_Msk (0x8000UL) /*!< DMA STS: C3DA (Bitfield-Mask: 0x01) */ +#define DMA_STS_C3DA DMA_STS_C3DA_Msk +#define DMA_STS_C2DA_Pos (14UL) /*!< DMA STS: C2DA (Bit 14) */ +#define DMA_STS_C2DA_Msk (0x4000UL) /*!< DMA STS: C2DA (Bitfield-Mask: 0x01) */ +#define DMA_STS_C2DA DMA_STS_C2DA_Msk +#define DMA_STS_C1DA_Pos (13UL) /*!< DMA STS: C1DA (Bit 13) */ +#define DMA_STS_C1DA_Msk (0x2000UL) /*!< DMA STS: C1DA (Bitfield-Mask: 0x01) */ +#define DMA_STS_C1DA DMA_STS_C1DA_Msk +#define DMA_STS_C0DA_Pos (12UL) /*!< DMA STS: C0DA (Bit 12) */ +#define DMA_STS_C0DA_Msk (0x1000UL) /*!< DMA STS: C0DA (Bitfield-Mask: 0x01) */ +#define DMA_STS_C0DA DMA_STS_C0DA_Msk +#define DMA_STS_C3FE_Pos (11UL) /*!< DMA STS: C3FE (Bit 11) */ +#define DMA_STS_C3FE_Msk (0x800UL) /*!< DMA STS: C3FE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C3FE DMA_STS_C3FE_Msk +#define DMA_STS_C2FE_Pos (10UL) /*!< DMA STS: C2FE (Bit 10) */ +#define DMA_STS_C2FE_Msk (0x400UL) /*!< DMA STS: C2FE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C2FE DMA_STS_C2FE_Msk +#define DMA_STS_C1FE_Pos (9UL) /*!< DMA STS: C1FE (Bit 9) */ +#define DMA_STS_C1FE_Msk (0x200UL) /*!< DMA STS: C1FE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C1FE DMA_STS_C1FE_Msk +#define DMA_STS_C0FE_Pos (8UL) /*!< DMA STS: C0FE (Bit 8) */ +#define DMA_STS_C0FE_Msk (0x100UL) /*!< DMA STS: C0FE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C0FE DMA_STS_C0FE_Msk +#define DMA_STS_C3PE_Pos (7UL) /*!< DMA STS: C3PE (Bit 7) */ +#define DMA_STS_C3PE_Msk (0x80UL) /*!< DMA STS: C3PE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C3PE DMA_STS_C3PE_Msk +#define DMA_STS_C2PE_Pos (6UL) /*!< DMA STS: C2PE (Bit 6) */ +#define DMA_STS_C2PE_Msk (0x40UL) /*!< DMA STS: C2PE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C2PE DMA_STS_C2PE_Msk +#define DMA_STS_C1PE_Pos (5UL) /*!< DMA STS: C1PE (Bit 5) */ +#define DMA_STS_C1PE_Msk (0x20UL) /*!< DMA STS: C1PE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C1PE DMA_STS_C1PE_Msk +#define DMA_STS_C0PE_Pos (4UL) /*!< DMA STS: C0PE (Bit 4) */ +#define DMA_STS_C0PE_Msk (0x10UL) /*!< DMA STS: C0PE (Bitfield-Mask: 0x01) */ +#define DMA_STS_C0PE DMA_STS_C0PE_Msk +#define DMA_STS_C3BUSY_Pos (3UL) /*!< DMA STS: C3BUSY (Bit 3) */ +#define DMA_STS_C3BUSY_Msk (0x8UL) /*!< DMA STS: C3BUSY (Bitfield-Mask: 0x01) */ +#define DMA_STS_C3BUSY DMA_STS_C3BUSY_Msk +#define DMA_STS_C2BUSY_Pos (2UL) /*!< DMA STS: C2BUSY (Bit 2) */ +#define DMA_STS_C2BUSY_Msk (0x4UL) /*!< DMA STS: C2BUSY (Bitfield-Mask: 0x01) */ +#define DMA_STS_C2BUSY DMA_STS_C2BUSY_Msk +#define DMA_STS_C1BUSY_Pos (1UL) /*!< DMA STS: C1BUSY (Bit 1) */ +#define DMA_STS_C1BUSY_Msk (0x2UL) /*!< DMA STS: C1BUSY (Bitfield-Mask: 0x01) */ +#define DMA_STS_C1BUSY DMA_STS_C1BUSY_Msk +#define DMA_STS_C0BUSY_Pos (0UL) /*!< DMA STS: C0BUSY (Bit 0) */ +#define DMA_STS_C0BUSY_Msk (0x1UL) /*!< DMA STS: C0BUSY (Bitfield-Mask: 0x01) */ +#define DMA_STS_C0BUSY DMA_STS_C0BUSY_Msk +/* ========================================================= CCTL ========================================================== */ +#define DMA_CCTL_FLEN_Pos (24UL) /*!< DMA CCTL: FLEN (Bit 24) */ +#define DMA_CCTL_FLEN_Msk (0xff000000UL) /*!< DMA CCTL: FLEN (Bitfield-Mask: 0xff) */ +#define DMA_CCTL_FLEN DMA_CCTL_FLEN_Msk +#define DMA_CCTL_PLEN_Pos (16UL) /*!< DMA CCTL: PLEN (Bit 16) */ +#define DMA_CCTL_PLEN_Msk (0xff0000UL) /*!< DMA CCTL: PLEN (Bitfield-Mask: 0xff) */ +#define DMA_CCTL_PLEN DMA_CCTL_PLEN_Msk +#define DMA_CCTL_STOP_Pos (15UL) /*!< DMA CCTL: STOP (Bit 15) */ +#define DMA_CCTL_STOP_Msk (0x8000UL) /*!< DMA CCTL: STOP (Bitfield-Mask: 0x01) */ +#define DMA_CCTL_STOP DMA_CCTL_STOP_Msk +#define DMA_CCTL_AESEN_Pos (14UL) /*!< DMA CCTL: AESEN (Bit 14) */ +#define DMA_CCTL_AESEN_Msk (0x4000UL) /*!< DMA CCTL: AESEN (Bitfield-Mask: 0x01) */ +#define DMA_CCTL_AESEN DMA_CCTL_AESEN_Msk +#define DMA_CCTL_CONT_Pos (13UL) /*!< DMA CCTL: CONT (Bit 13) */ +#define DMA_CCTL_CONT_Msk (0x2000UL) /*!< DMA CCTL: CONT (Bitfield-Mask: 0x01) */ +#define DMA_CCTL_CONT DMA_CCTL_CONT_Msk +#define DMA_CCTL_TMODE_Pos (12UL) /*!< DMA CCTL: TMODE (Bit 12) */ +#define DMA_CCTL_TMODE_Msk (0x1000UL) /*!< DMA CCTL: TMODE (Bitfield-Mask: 0x01) */ +#define DMA_CCTL_TMODE DMA_CCTL_TMODE_Msk +#define DMA_CCTL_DMASEL_Pos (7UL) /*!< DMA CCTL: DMASEL (Bit 7) */ +#define DMA_CCTL_DMASEL_Msk (0xf80UL) /*!< DMA CCTL: DMASEL (Bitfield-Mask: 0x1f) */ +#define DMA_CCTL_DMASEL DMA_CCTL_DMASEL_Msk +#define DMA_CCTL_DMODE_Pos (5UL) /*!< DMA CCTL: DMODE (Bit 5) */ +#define DMA_CCTL_DMODE_Msk (0x60UL) /*!< DMA CCTL: DMODE (Bitfield-Mask: 0x03) */ +#define DMA_CCTL_DMODE DMA_CCTL_DMODE_Msk +#define DMA_CCTL_SMODE_Pos (3UL) /*!< DMA CCTL: SMODE (Bit 3) */ +#define DMA_CCTL_SMODE_Msk (0x18UL) /*!< DMA CCTL: SMODE (Bitfield-Mask: 0x03) */ +#define DMA_CCTL_SMODE DMA_CCTL_SMODE_Msk +#define DMA_CCTL_SIZE_Pos (1UL) /*!< DMA CCTL: SIZE (Bit 1) */ +#define DMA_CCTL_SIZE_Msk (0x6UL) /*!< DMA CCTL: SIZE (Bitfield-Mask: 0x03) */ +#define DMA_CCTL_SIZE DMA_CCTL_SIZE_Msk +#define DMA_CCTL_EN_Pos (0UL) /*!< DMA CCTL: EN (Bit 0) */ +#define DMA_CCTL_EN_Msk (0x1UL) /*!< DMA CCTL: EN (Bitfield-Mask: 0x01) */ +#define DMA_CCTL_EN DMA_CCTL_EN_Msk +/* ========================================================= CSRC ========================================================== */ +#define DMA_CSRC_SRC_Pos (0UL) /*!< DMA CSRC: SRC (Bit 0) */ +#define DMA_CSRC_SRC_Msk (0xffffffffUL) /*!< DMA CSRC: SRC (Bitfield-Mask: 0xffffffff) */ +#define DMA_CSRC_SRC DMA_CSRC_SRC_Msk +/* ========================================================= CDST ========================================================== */ +#define DMA_CDST_DST_Pos (0UL) /*!< DMA CDST: DST (Bit 0) */ +#define DMA_CDST_DST_Msk (0xffffffffUL) /*!< DMA CDST: DST (Bitfield-Mask: 0xffffffff) */ +#define DMA_CDST_DST DMA_CDST_DST_Msk +/* ========================================================= CLEN ========================================================== */ +#define DMA_CLEN_CFLEN_Pos (8UL) /*!< DMA CLEN: CFLEN (Bit 8) */ +#define DMA_CLEN_CFLEN_Msk (0xff00UL) /*!< DMA CLEN: CFLEN (Bitfield-Mask: 0xff) */ +#define DMA_CLEN_CFLEN DMA_CLEN_CFLEN_Msk +#define DMA_CLEN_CPLEN_Pos (0UL) /*!< DMA CLEN: CPLEN (Bit 0) */ +#define DMA_CLEN_CPLEN_Msk (0xffUL) /*!< DMA CLEN: CPLEN (Bitfield-Mask: 0xff) */ +#define DMA_CLEN_CPLEN DMA_CLEN_CPLEN_Msk +/* ======================================================== AESCTL ========================================================= */ +#define DMA_AESCTL_MODE_Pos (2UL) /*!< DMA AESCTL: MODE (Bit 2) */ +#define DMA_AESCTL_MODE_Msk (0xcUL) /*!< DMA AESCTL: MODE (Bitfield-Mask: 0x03) */ +#define DMA_AESCTL_MODE DMA_AESCTL_MODE_Msk +#define DMA_AESCTL_ENC_Pos (0UL) /*!< DMA AESCTL: ENC (Bit 0) */ +#define DMA_AESCTL_ENC_Msk (0x1UL) /*!< DMA AESCTL: ENC (Bitfield-Mask: 0x01) */ +#define DMA_AESCTL_ENC DMA_AESCTL_ENC_Msk +/* ======================================================== AESKEY ========================================================= */ +#define DMA_AESKEY_KEY_Pos (0UL) /*!< DMA AESKEY: KEY (Bit 0) */ +#define DMA_AESKEY_KEY_Msk (0xffffffffUL) /*!< DMA AESKEY: KEY (Bitfield-Mask: 0xffffffff) */ +#define DMA_AESKEY_KEY DMA_AESKEY_KEY_Msk + + +/* =========================================================================================================================== */ +/* ================ FLASH ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== ICEPROT ======================================================== */ +#define FLASH_ICEPROT_ICEPROT_Pos (0UL) /*!< FLASH ICEPROT: ICEPROT (Bit 0) */ +#define FLASH_ICEPROT_ICEPROT_Msk (0xffffffffUL) /*!< FLASH ICEPROT: ICEPROT (Bitfield-Mask: 0xffffffff) */ +#define FLASH_ICEPROT_ICEPROT FLASH_ICEPROT_ICEPROT_Msk +/* ======================================================== RDPROT ========================================================= */ +#define FLASH_RDPROT_RDPORT_Pos (0UL) /*!< FLASH RDPROT: RDPORT (Bit 0) */ +#define FLASH_RDPROT_RDPORT_Msk (0xffffffffUL) /*!< FLASH RDPROT: RDPORT (Bitfield-Mask: 0xffffffff) */ +#define FLASH_RDPROT_RDPORT FLASH_RDPROT_RDPORT_Msk +/* ======================================================== WRPROT ========================================================= */ +#define FLASH_WRPROT_WRPORT_Pos (0UL) /*!< FLASH WRPROT: WRPORT (Bit 0) */ +#define FLASH_WRPROT_WRPORT_Msk (0xffffffffUL) /*!< FLASH WRPROT: WRPORT (Bitfield-Mask: 0xffffffff) */ +#define FLASH_WRPROT_WRPORT FLASH_WRPROT_WRPORT_Msk +/* ========================================================== STS ========================================================== */ +#define FLASH_STS_STS_Pos (0UL) /*!< FLASH STS: STS (Bit 0) */ +#define FLASH_STS_STS_Msk (0x1fUL) /*!< FLASH STS: STS (Bitfield-Mask: 0x1f) */ +#define FLASH_STS_STS FLASH_STS_STS_Msk +/* ======================================================== INTSTS ========================================================= */ +#define FLASH_INTSTS_CSERR_Pos (0UL) /*!< FLASH INTSTS: CSERR (Bit 0) */ +#define FLASH_INTSTS_CSERR_Msk (0x1UL) /*!< FLASH INTSTS: CSERR (Bitfield-Mask: 0x01) */ +#define FLASH_INTSTS_CSERR FLASH_INTSTS_CSERR_Msk +/* ======================================================== CSSADDR ======================================================== */ +#define FLASH_CSSADDR_CSSADDR_Pos (0UL) /*!< FLASH CSSADDR: CSSADDR (Bit 0) */ +#define FLASH_CSSADDR_CSSADDR_Msk (0x7ffffUL) /*!< FLASH CSSADDR: CSSADDR (Bitfield-Mask: 0x7ffff) */ +#define FLASH_CSSADDR_CSSADDR FLASH_CSSADDR_CSSADDR_Msk +/* ======================================================== CSEADDR ======================================================== */ +#define FLASH_CSEADDR_CSEADDR_Pos (0UL) /*!< FLASH CSEADDR: CSEADDR (Bit 0) */ +#define FLASH_CSEADDR_CSEADDR_Msk (0x7ffffUL) /*!< FLASH CSEADDR: CSEADDR (Bitfield-Mask: 0x7ffff) */ +#define FLASH_CSEADDR_CSEADDR FLASH_CSEADDR_CSEADDR_Msk +/* ======================================================== CSVALUE ======================================================== */ +#define FLASH_CSVALUE_CSVALUE_Pos (0UL) /*!< FLASH CSVALUE: CSVALUE (Bit 0) */ +#define FLASH_CSVALUE_CSVALUE_Msk (0xffffffffUL) /*!< FLASH CSVALUE: CSVALUE (Bitfield-Mask: 0xffffffff) */ +#define FLASH_CSVALUE_CSVALUE FLASH_CSVALUE_CSVALUE_Msk +/* ======================================================= CSCVALUE ======================================================== */ +#define FLASH_CSCVALUE_CSCVALUE_Pos (0UL) /*!< FLASH CSCVALUE: CSCVALUE (Bit 0) */ +#define FLASH_CSCVALUE_CSCVALUE_Msk (0xffffffffUL) /*!< FLASH CSCVALUE: CSCVALUE (Bitfield-Mask: 0xffffffff) */ +#define FLASH_CSCVALUE_CSCVALUE FLASH_CSCVALUE_CSCVALUE_Msk +/* ========================================================= PASS ========================================================== */ +#define FLASH_PASS_UNLOCK_Pos (0UL) /*!< FLASH PASS: UNLOCK (Bit 0) */ +#define FLASH_PASS_UNLOCK_Msk (0x1UL) /*!< FLASH PASS: UNLOCK (Bitfield-Mask: 0x01) */ +#define FLASH_PASS_UNLOCK FLASH_PASS_UNLOCK_Msk +/* ========================================================= CTRL ========================================================== */ +#define FLASH_CTRL_CSINTEN_Pos (2UL) /*!< FLASH CTRL: CSINTEN (Bit 2) */ +#define FLASH_CTRL_CSINTEN_Msk (0x4UL) /*!< FLASH CTRL: CSINTEN (Bitfield-Mask: 0x01) */ +#define FLASH_CTRL_CSINTEN FLASH_CTRL_CSINTEN_Msk +#define FLASH_CTRL_CSMODE_Pos (0UL) /*!< FLASH CTRL: CSMODE (Bit 0) */ +#define FLASH_CTRL_CSMODE_Msk (0x3UL) /*!< FLASH CTRL: CSMODE (Bitfield-Mask: 0x03) */ +#define FLASH_CTRL_CSMODE FLASH_CTRL_CSMODE_Msk +/* ======================================================== PGADDR ========================================================= */ +#define FLASH_PGADDR_PGADDR_Pos (0UL) /*!< FLASH PGADDR: PGADDR (Bit 0) */ +#define FLASH_PGADDR_PGADDR_Msk (0x3ffffUL) /*!< FLASH PGADDR: PGADDR (Bitfield-Mask: 0x3ffff) */ +#define FLASH_PGADDR_PGADDR FLASH_PGADDR_PGADDR_Msk +/* ======================================================== PGDATA ========================================================= */ +#define FLASH_PGDATA_PGDATA_Pos (0UL) /*!< FLASH PGDATA: PGDATA (Bit 0) */ +#define FLASH_PGDATA_PGDATA_Msk (0xffffffffUL) /*!< FLASH PGDATA: PGDATA (Bitfield-Mask: 0xffffffff) */ +#define FLASH_PGDATA_PGDATA FLASH_PGDATA_PGDATA_Msk +/* ======================================================== SERASE ========================================================= */ +#define FLASH_SERASE_SERASE_Pos (0UL) /*!< FLASH SERASE: SERASE (Bit 0) */ +#define FLASH_SERASE_SERASE_Msk (0x1UL) /*!< FLASH SERASE: SERASE (Bitfield-Mask: 0x01) */ +#define FLASH_SERASE_SERASE FLASH_SERASE_SERASE_Msk +/* ======================================================== CERASE ========================================================= */ +#define FLASH_CERASE_CERASE_Pos (0UL) /*!< FLASH CERASE: CERASE (Bit 0) */ +#define FLASH_CERASE_CERASE_Msk (0x1UL) /*!< FLASH CERASE: CERASE (Bitfield-Mask: 0x01) */ +#define FLASH_CERASE_CERASE FLASH_CERASE_CERASE_Msk +/* ========================================================= DSTB ========================================================== */ +#define FLASH_DSTB_DSTB_Pos (0UL) /*!< FLASH DSTB: DSTB (Bit 0) */ +#define FLASH_DSTB_DSTB_Msk (0x1UL) /*!< FLASH DSTB: DSTB (Bitfield-Mask: 0x01) */ +#define FLASH_DSTB_DSTB FLASH_DSTB_DSTB_Msk + + +/* =========================================================================================================================== */ +/* ================ GPIOA ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== OEN ========================================================== */ +#define GPIOA_OEN_IOAOEN_Pos (0UL) /*!< GPIOA OEN: IOAOEN (Bit 0) */ +#define GPIOA_OEN_IOAOEN_Msk (0xffffUL) /*!< GPIOA OEN: IOAOEN (Bitfield-Mask: 0xffff) */ +#define GPIOA_OEN_IOAOEN GPIOA_OEN_IOAOEN_Msk +/* ========================================================== IE =========================================================== */ +#define GPIOA_IE_IOAIE_Pos (0UL) /*!< GPIOA IE: IOAIE (Bit 0) */ +#define GPIOA_IE_IOAIE_Msk (0xffffUL) /*!< GPIOA IE: IOAIE (Bitfield-Mask: 0xffff) */ +#define GPIOA_IE_IOAIE GPIOA_IE_IOAIE_Msk +/* ========================================================== DAT ========================================================== */ +#define GPIOA_DAT_IOADAT_Pos (0UL) /*!< GPIOA DAT: IOADAT (Bit 0) */ +#define GPIOA_DAT_IOADAT_Msk (0xffffUL) /*!< GPIOA DAT: IOADAT (Bitfield-Mask: 0xffff) */ +#define GPIOA_DAT_IOADAT GPIOA_DAT_IOADAT_Msk +/* ========================================================== ATT ========================================================== */ +#define GPIOA_ATT_IOAATT_Pos (0UL) /*!< GPIOA ATT: IOAATT (Bit 0) */ +#define GPIOA_ATT_IOAATT_Msk (0xffffUL) /*!< GPIOA ATT: IOAATT (Bitfield-Mask: 0xffff) */ +#define GPIOA_ATT_IOAATT GPIOA_ATT_IOAATT_Msk +/* ======================================================= IOAWKUEN ======================================================== */ +#define GPIOA_IOAWKUEN_WKUEN_Pos (0UL) /*!< GPIOA IOAWKUEN: WKUEN (Bit 0) */ +#define GPIOA_IOAWKUEN_WKUEN_Msk (0xffffffffUL) /*!< GPIOA IOAWKUEN: WKUEN (Bitfield-Mask: 0xffffffff) */ +#define GPIOA_IOAWKUEN_WKUEN GPIOA_IOAWKUEN_WKUEN_Msk +/* ========================================================== STS ========================================================== */ +#define GPIOA_STS_IOASTS_Pos (0UL) /*!< GPIOA STS: IOASTS (Bit 0) */ +#define GPIOA_STS_IOASTS_Msk (0xffffUL) /*!< GPIOA STS: IOASTS (Bitfield-Mask: 0xffff) */ +#define GPIOA_STS_IOASTS GPIOA_STS_IOASTS_Msk +/* ======================================================= IOAINTSTS ======================================================= */ +#define GPIOA_IOAINTSTS_INTSTS_Pos (0UL) /*!< GPIOA IOAINTSTS: INTSTS (Bit 0) */ +#define GPIOA_IOAINTSTS_INTSTS_Msk (0xffffUL) /*!< GPIOA IOAINTSTS: INTSTS (Bitfield-Mask: 0xffff) */ +#define GPIOA_IOAINTSTS_INTSTS GPIOA_IOAINTSTS_INTSTS_Msk +/* ========================================================== SEL ========================================================== */ +#define GPIOA_SEL_SEL7_Pos (7UL) /*!< GPIOA SEL: SEL7 (Bit 7) */ +#define GPIOA_SEL_SEL7_Msk (0x80UL) /*!< GPIOA SEL: SEL7 (Bitfield-Mask: 0x01) */ +#define GPIOA_SEL_SEL7 GPIOA_SEL_SEL7_Msk +#define GPIOA_SEL_SEL6_Pos (6UL) /*!< GPIOA SEL: SEL6 (Bit 6) */ +#define GPIOA_SEL_SEL6_Msk (0x40UL) /*!< GPIOA SEL: SEL6 (Bitfield-Mask: 0x01) */ +#define GPIOA_SEL_SEL6 GPIOA_SEL_SEL6_Msk +#define GPIOA_SEL_SEL3_Pos (3UL) /*!< GPIOA SEL: SEL3 (Bit 3) */ +#define GPIOA_SEL_SEL3_Msk (0x8UL) /*!< GPIOA SEL: SEL3 (Bitfield-Mask: 0x01) */ +#define GPIOA_SEL_SEL3 GPIOA_SEL_SEL3_Msk +/* ======================================================= IOANODEG ======================================================== */ +#define GPIOA_IOANODEG_NODEG_Pos (0UL) /*!< GPIOA IOANODEG: NODEG (Bit 0) */ +#define GPIOA_IOANODEG_NODEG_Msk (0xffffUL) /*!< GPIOA IOANODEG: NODEG (Bitfield-Mask: 0xffff) */ +#define GPIOA_IOANODEG_NODEG GPIOA_IOANODEG_NODEG_Msk + + +/* =========================================================================================================================== */ +/* ================ GPIO ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== OEN ========================================================== */ +#define GPIO_OEN_IOXOEN_Pos (0UL) /*!< GPIO OEN: IOXOEN (Bit 0) */ +#define GPIO_OEN_IOXOEN_Msk (0xffffUL) /*!< GPIO OEN: IOXOEN (Bitfield-Mask: 0xffff) */ +#define GPIO_OEN_IOXOEN GPIO_OEN_IOXOEN_Msk +/* ========================================================== IE =========================================================== */ +#define GPIO_IE_IOXIE_Pos (0UL) /*!< GPIO IE: IOXIE (Bit 0) */ +#define GPIO_IE_IOXIE_Msk (0xffffUL) /*!< GPIO IE: IOXIE (Bitfield-Mask: 0xffff) */ +#define GPIO_IE_IOXIE GPIO_IE_IOXIE_Msk +/* ========================================================== DAT ========================================================== */ +#define GPIO_DAT_IOXDAT_Pos (0UL) /*!< GPIO DAT: IOXDAT (Bit 0) */ +#define GPIO_DAT_IOXDAT_Msk (0xffffUL) /*!< GPIO DAT: IOXDAT (Bitfield-Mask: 0xffff) */ +#define GPIO_DAT_IOXDAT GPIO_DAT_IOXDAT_Msk +/* ========================================================== ATT ========================================================== */ +#define GPIO_ATT_IOXATT_Pos (0UL) /*!< GPIO ATT: IOXATT (Bit 0) */ +#define GPIO_ATT_IOXATT_Msk (0xffffUL) /*!< GPIO ATT: IOXATT (Bitfield-Mask: 0xffff) */ +#define GPIO_ATT_IOXATT GPIO_ATT_IOXATT_Msk +/* ========================================================== STS ========================================================== */ +#define GPIO_STS_IOXSTS_Pos (0UL) /*!< GPIO STS: IOXSTS (Bit 0) */ +#define GPIO_STS_IOXSTS_Msk (0xffffUL) /*!< GPIO STS: IOXSTS (Bitfield-Mask: 0xffff) */ +#define GPIO_STS_IOXSTS GPIO_STS_IOXSTS_Msk + + +/* =========================================================================================================================== */ +/* ================ GPIOAF ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== IOB_SEL ======================================================== */ +#define GPIOAF_IOB_SEL_SEL6_Pos (6UL) /*!< GPIOAF IOB_SEL: SEL6 (Bit 6) */ +#define GPIOAF_IOB_SEL_SEL6_Msk (0x40UL) /*!< GPIOAF IOB_SEL: SEL6 (Bitfield-Mask: 0x01) */ +#define GPIOAF_IOB_SEL_SEL6 GPIOAF_IOB_SEL_SEL6_Msk +#define GPIOAF_IOB_SEL_SEL2_Pos (2UL) /*!< GPIOAF IOB_SEL: SEL2 (Bit 2) */ +#define GPIOAF_IOB_SEL_SEL2_Msk (0x4UL) /*!< GPIOAF IOB_SEL: SEL2 (Bitfield-Mask: 0x01) */ +#define GPIOAF_IOB_SEL_SEL2 GPIOAF_IOB_SEL_SEL2_Msk +#define GPIOAF_IOB_SEL_SEL1_Pos (1UL) /*!< GPIOAF IOB_SEL: SEL1 (Bit 1) */ +#define GPIOAF_IOB_SEL_SEL1_Msk (0x2UL) /*!< GPIOAF IOB_SEL: SEL1 (Bitfield-Mask: 0x01) */ +#define GPIOAF_IOB_SEL_SEL1 GPIOAF_IOB_SEL_SEL1_Msk +/* ======================================================== IOE_SEL ======================================================== */ +#define GPIOAF_IOE_SEL_SEL7_Pos (7UL) /*!< GPIOAF IOE_SEL: SEL7 (Bit 7) */ +#define GPIOAF_IOE_SEL_SEL7_Msk (0x80UL) /*!< GPIOAF IOE_SEL: SEL7 (Bitfield-Mask: 0x01) */ +#define GPIOAF_IOE_SEL_SEL7 GPIOAF_IOE_SEL_SEL7_Msk +/* ======================================================== IO_MISC ======================================================== */ +#define GPIOAF_IO_MISC_I2CIOC_Pos (5UL) /*!< GPIOAF IO_MISC: I2CIOC (Bit 5) */ +#define GPIOAF_IO_MISC_I2CIOC_Msk (0x20UL) /*!< GPIOAF IO_MISC: I2CIOC (Bitfield-Mask: 0x01) */ +#define GPIOAF_IO_MISC_I2CIOC GPIOAF_IO_MISC_I2CIOC_Msk +#define GPIOAF_IO_MISC_PLLHDIV_Pos (0UL) /*!< GPIOAF IO_MISC: PLLHDIV (Bit 0) */ +#define GPIOAF_IO_MISC_PLLHDIV_Msk (0x7UL) /*!< GPIOAF IO_MISC: PLLHDIV (Bitfield-Mask: 0x07) */ +#define GPIOAF_IO_MISC_PLLHDIV GPIOAF_IO_MISC_PLLHDIV_Msk + + +/* =========================================================================================================================== */ +/* ================ I2C ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DATA ========================================================== */ +#define I2C_DATA_DATA_Pos (0UL) /*!< I2C DATA: DATA (Bit 0) */ +#define I2C_DATA_DATA_Msk (0xffUL) /*!< I2C DATA: DATA (Bitfield-Mask: 0xff) */ +#define I2C_DATA_DATA I2C_DATA_DATA_Msk +/* ========================================================= ADDR ========================================================== */ +#define I2C_ADDR_SLA_Pos (1UL) /*!< I2C ADDR: SLA (Bit 1) */ +#define I2C_ADDR_SLA_Msk (0xfeUL) /*!< I2C ADDR: SLA (Bitfield-Mask: 0x7f) */ +#define I2C_ADDR_SLA I2C_ADDR_SLA_Msk +#define I2C_ADDR_GC_Pos (0UL) /*!< I2C ADDR: GC (Bit 0) */ +#define I2C_ADDR_GC_Msk (0x1UL) /*!< I2C ADDR: GC (Bitfield-Mask: 0x01) */ +#define I2C_ADDR_GC I2C_ADDR_GC_Msk +/* ========================================================= CTRL ========================================================== */ +#define I2C_CTRL_CR2_Pos (7UL) /*!< I2C CTRL: CR2 (Bit 7) */ +#define I2C_CTRL_CR2_Msk (0x80UL) /*!< I2C CTRL: CR2 (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_CR2 I2C_CTRL_CR2_Msk +#define I2C_CTRL_EN_Pos (6UL) /*!< I2C CTRL: EN (Bit 6) */ +#define I2C_CTRL_EN_Msk (0x40UL) /*!< I2C CTRL: EN (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_EN I2C_CTRL_EN_Msk +#define I2C_CTRL_STA_Pos (5UL) /*!< I2C CTRL: STA (Bit 5) */ +#define I2C_CTRL_STA_Msk (0x20UL) /*!< I2C CTRL: STA (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_STA I2C_CTRL_STA_Msk +#define I2C_CTRL_STO_Pos (4UL) /*!< I2C CTRL: STO (Bit 4) */ +#define I2C_CTRL_STO_Msk (0x10UL) /*!< I2C CTRL: STO (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_STO I2C_CTRL_STO_Msk +#define I2C_CTRL_SI_Pos (3UL) /*!< I2C CTRL: SI (Bit 3) */ +#define I2C_CTRL_SI_Msk (0x8UL) /*!< I2C CTRL: SI (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_SI I2C_CTRL_SI_Msk +#define I2C_CTRL_AA_Pos (2UL) /*!< I2C CTRL: AA (Bit 2) */ +#define I2C_CTRL_AA_Msk (0x4UL) /*!< I2C CTRL: AA (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_AA I2C_CTRL_AA_Msk +#define I2C_CTRL_CR1_Pos (1UL) /*!< I2C CTRL: CR1 (Bit 1) */ +#define I2C_CTRL_CR1_Msk (0x2UL) /*!< I2C CTRL: CR1 (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_CR1 I2C_CTRL_CR1_Msk +#define I2C_CTRL_CR0_Pos (0UL) /*!< I2C CTRL: CR0 (Bit 0) */ +#define I2C_CTRL_CR0_Msk (0x1UL) /*!< I2C CTRL: CR0 (Bitfield-Mask: 0x01) */ +#define I2C_CTRL_CR0 I2C_CTRL_CR0_Msk +/* ========================================================== STS ========================================================== */ +#define I2C_STS_STS_Pos (3UL) /*!< I2C STS: STS (Bit 3) */ +#define I2C_STS_STS_Msk (0xf8UL) /*!< I2C STS: STS (Bitfield-Mask: 0x1f) */ +#define I2C_STS_STS I2C_STS_STS_Msk +/* ========================================================= CTRL2 ========================================================= */ +#define I2C_CTRL2_INTEN_Pos (0UL) /*!< I2C CTRL2: INTEN (Bit 0) */ +#define I2C_CTRL2_INTEN_Msk (0x1UL) /*!< I2C CTRL2: INTEN (Bitfield-Mask: 0x01) */ +#define I2C_CTRL2_INTEN I2C_CTRL2_INTEN_Msk + + +/* =========================================================================================================================== */ +/* ================ ISO7816 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= BAUDDIVL ======================================================== */ +#define ISO7816_BAUDDIVL_BAUDDIVL_Pos (0UL) /*!< ISO7816 BAUDDIVL: BAUDDIVL (Bit 0) */ +#define ISO7816_BAUDDIVL_BAUDDIVL_Msk (0xffUL) /*!< ISO7816 BAUDDIVL: BAUDDIVL (Bitfield-Mask: 0xff) */ +#define ISO7816_BAUDDIVL_BAUDDIVL ISO7816_BAUDDIVL_BAUDDIVL_Msk +/* ======================================================= BAUDDIVH ======================================================== */ +#define ISO7816_BAUDDIVH_BAUDDIVH_Pos (0UL) /*!< ISO7816 BAUDDIVH: BAUDDIVH (Bit 0) */ +#define ISO7816_BAUDDIVH_BAUDDIVH_Msk (0xffUL) /*!< ISO7816 BAUDDIVH: BAUDDIVH (Bitfield-Mask: 0xff) */ +#define ISO7816_BAUDDIVH_BAUDDIVH ISO7816_BAUDDIVH_BAUDDIVH_Msk +/* ========================================================= DATA ========================================================== */ +#define ISO7816_DATA_DATA_Pos (0UL) /*!< ISO7816 DATA: DATA (Bit 0) */ +#define ISO7816_DATA_DATA_Msk (0xffUL) /*!< ISO7816 DATA: DATA (Bitfield-Mask: 0xff) */ +#define ISO7816_DATA_DATA ISO7816_DATA_DATA_Msk +/* ========================================================= INFO ========================================================== */ +#define ISO7816_INFO_DMATXDONE_Pos (9UL) /*!< ISO7816 INFO: DMATXDONE (Bit 9) */ +#define ISO7816_INFO_DMATXDONE_Msk (0x200UL) /*!< ISO7816 INFO: DMATXDONE (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_DMATXDONE ISO7816_INFO_DMATXDONE_Msk +#define ISO7816_INFO_TXRTYERRIF_Pos (8UL) /*!< ISO7816 INFO: TXRTYERRIF (Bit 8) */ +#define ISO7816_INFO_TXRTYERRIF_Msk (0x100UL) /*!< ISO7816 INFO: TXRTYERRIF (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_TXRTYERRIF ISO7816_INFO_TXRTYERRIF_Msk +#define ISO7816_INFO_RXOVIF_Pos (7UL) /*!< ISO7816 INFO: RXOVIF (Bit 7) */ +#define ISO7816_INFO_RXOVIF_Msk (0x80UL) /*!< ISO7816 INFO: RXOVIF (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_RXOVIF ISO7816_INFO_RXOVIF_Msk +#define ISO7816_INFO_TXDONEIF_Pos (6UL) /*!< ISO7816 INFO: TXDONEIF (Bit 6) */ +#define ISO7816_INFO_TXDONEIF_Msk (0x40UL) /*!< ISO7816 INFO: TXDONEIF (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_TXDONEIF ISO7816_INFO_TXDONEIF_Msk +#define ISO7816_INFO_RXIF_Pos (5UL) /*!< ISO7816 INFO: RXIF (Bit 5) */ +#define ISO7816_INFO_RXIF_Msk (0x20UL) /*!< ISO7816 INFO: RXIF (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_RXIF ISO7816_INFO_RXIF_Msk +#define ISO7816_INFO_RXERRIF_Pos (2UL) /*!< ISO7816 INFO: RXERRIF (Bit 2) */ +#define ISO7816_INFO_RXERRIF_Msk (0x4UL) /*!< ISO7816 INFO: RXERRIF (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_RXERRIF ISO7816_INFO_RXERRIF_Msk +#define ISO7816_INFO_CHKSUM_Pos (1UL) /*!< ISO7816 INFO: CHKSUM (Bit 1) */ +#define ISO7816_INFO_CHKSUM_Msk (0x2UL) /*!< ISO7816 INFO: CHKSUM (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_CHKSUM ISO7816_INFO_CHKSUM_Msk +#define ISO7816_INFO_RXACK_Pos (0UL) /*!< ISO7816 INFO: RXACK (Bit 0) */ +#define ISO7816_INFO_RXACK_Msk (0x1UL) /*!< ISO7816 INFO: RXACK (Bitfield-Mask: 0x01) */ +#define ISO7816_INFO_RXACK ISO7816_INFO_RXACK_Msk +/* ========================================================== CFG ========================================================== */ +#define ISO7816_CFG_RXACKSET_Pos (16UL) /*!< ISO7816 CFG: RXACKSET (Bit 16) */ +#define ISO7816_CFG_RXACKSET_Msk (0x10000UL) /*!< ISO7816 CFG: RXACKSET (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_RXACKSET ISO7816_CFG_RXACKSET_Msk +#define ISO7816_CFG_TXRTYCNT_Pos (12UL) /*!< ISO7816 CFG: TXRTYCNT (Bit 12) */ +#define ISO7816_CFG_TXRTYCNT_Msk (0xf000UL) /*!< ISO7816 CFG: TXRTYCNT (Bitfield-Mask: 0x0f) */ +#define ISO7816_CFG_TXRTYCNT ISO7816_CFG_TXRTYCNT_Msk +#define ISO7816_CFG_LSB_Pos (11UL) /*!< ISO7816 CFG: LSB (Bit 11) */ +#define ISO7816_CFG_LSB_Msk (0x800UL) /*!< ISO7816 CFG: LSB (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_LSB ISO7816_CFG_LSB_Msk +#define ISO7816_CFG_AUTORXACK_Pos (9UL) /*!< ISO7816 CFG: AUTORXACK (Bit 9) */ +#define ISO7816_CFG_AUTORXACK_Msk (0x200UL) /*!< ISO7816 CFG: AUTORXACK (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_AUTORXACK ISO7816_CFG_AUTORXACK_Msk +#define ISO7816_CFG_TXRTYERRIE_Pos (8UL) /*!< ISO7816 CFG: TXRTYERRIE (Bit 8) */ +#define ISO7816_CFG_TXRTYERRIE_Msk (0x100UL) /*!< ISO7816 CFG: TXRTYERRIE (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_TXRTYERRIE ISO7816_CFG_TXRTYERRIE_Msk +#define ISO7816_CFG_RXOVIE_Pos (7UL) /*!< ISO7816 CFG: RXOVIE (Bit 7) */ +#define ISO7816_CFG_RXOVIE_Msk (0x80UL) /*!< ISO7816 CFG: RXOVIE (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_RXOVIE ISO7816_CFG_RXOVIE_Msk +#define ISO7816_CFG_TXDONEIE_Pos (6UL) /*!< ISO7816 CFG: TXDONEIE (Bit 6) */ +#define ISO7816_CFG_TXDONEIE_Msk (0x40UL) /*!< ISO7816 CFG: TXDONEIE (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_TXDONEIE ISO7816_CFG_TXDONEIE_Msk +#define ISO7816_CFG_RXIE_Pos (5UL) /*!< ISO7816 CFG: RXIE (Bit 5) */ +#define ISO7816_CFG_RXIE_Msk (0x20UL) /*!< ISO7816 CFG: RXIE (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_RXIE ISO7816_CFG_RXIE_Msk +#define ISO7816_CFG_ACKLEN_Pos (4UL) /*!< ISO7816 CFG: ACKLEN (Bit 4) */ +#define ISO7816_CFG_ACKLEN_Msk (0x10UL) /*!< ISO7816 CFG: ACKLEN (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_ACKLEN ISO7816_CFG_ACKLEN_Msk +#define ISO7816_CFG_RXERRIE_Pos (2UL) /*!< ISO7816 CFG: RXERRIE (Bit 2) */ +#define ISO7816_CFG_RXERRIE_Msk (0x4UL) /*!< ISO7816 CFG: RXERRIE (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_RXERRIE ISO7816_CFG_RXERRIE_Msk +#define ISO7816_CFG_CHKP_Pos (1UL) /*!< ISO7816 CFG: CHKP (Bit 1) */ +#define ISO7816_CFG_CHKP_Msk (0x2UL) /*!< ISO7816 CFG: CHKP (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_CHKP ISO7816_CFG_CHKP_Msk +#define ISO7816_CFG_EN_Pos (0UL) /*!< ISO7816 CFG: EN (Bit 0) */ +#define ISO7816_CFG_EN_Msk (0x1UL) /*!< ISO7816 CFG: EN (Bitfield-Mask: 0x01) */ +#define ISO7816_CFG_EN ISO7816_CFG_EN_Msk +/* ========================================================== CLK ========================================================== */ +#define ISO7816_CLK_CLKEN_Pos (7UL) /*!< ISO7816 CLK: CLKEN (Bit 7) */ +#define ISO7816_CLK_CLKEN_Msk (0x80UL) /*!< ISO7816 CLK: CLKEN (Bitfield-Mask: 0x01) */ +#define ISO7816_CLK_CLKEN ISO7816_CLK_CLKEN_Msk +#define ISO7816_CLK_CLKDIV_Pos (0UL) /*!< ISO7816 CLK: CLKDIV (Bit 0) */ +#define ISO7816_CLK_CLKDIV_Msk (0x7fUL) /*!< ISO7816 CLK: CLKDIV (Bitfield-Mask: 0x7f) */ +#define ISO7816_CLK_CLKDIV ISO7816_CLK_CLKDIV_Msk + + +/* =========================================================================================================================== */ +/* ================ LCD ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== FB =========================================================== */ +#define LCD_FB_DATA_Pos (0UL) /*!< LCD FB: DATA (Bit 0) */ +#define LCD_FB_DATA_Msk (0xffffffffUL) /*!< LCD FB: DATA (Bitfield-Mask: 0xffffffff) */ +#define LCD_FB_DATA LCD_FB_DATA_Msk +/* ========================================================= CTRL ========================================================== */ +#define LCD_CTRL_EN_Pos (7UL) /*!< LCD CTRL: EN (Bit 7) */ +#define LCD_CTRL_EN_Msk (0x80UL) /*!< LCD CTRL: EN (Bitfield-Mask: 0x01) */ +#define LCD_CTRL_EN LCD_CTRL_EN_Msk +#define LCD_CTRL_TYPE_Pos (4UL) /*!< LCD CTRL: TYPE (Bit 4) */ +#define LCD_CTRL_TYPE_Msk (0x30UL) /*!< LCD CTRL: TYPE (Bitfield-Mask: 0x03) */ +#define LCD_CTRL_TYPE LCD_CTRL_TYPE_Msk +#define LCD_CTRL_DRV_Pos (2UL) /*!< LCD CTRL: DRV (Bit 2) */ +#define LCD_CTRL_DRV_Msk (0xcUL) /*!< LCD CTRL: DRV (Bitfield-Mask: 0x03) */ +#define LCD_CTRL_DRV LCD_CTRL_DRV_Msk +#define LCD_CTRL_FRQ_Pos (0UL) /*!< LCD CTRL: FRQ (Bit 0) */ +#define LCD_CTRL_FRQ_Msk (0x3UL) /*!< LCD CTRL: FRQ (Bitfield-Mask: 0x03) */ +#define LCD_CTRL_FRQ LCD_CTRL_FRQ_Msk +/* ========================================================= CTRL2 ========================================================= */ +#define LCD_CTRL2_SWPR_Pos (8UL) /*!< LCD CTRL2: SWPR (Bit 8) */ +#define LCD_CTRL2_SWPR_Msk (0xff00UL) /*!< LCD CTRL2: SWPR (Bitfield-Mask: 0xff) */ +#define LCD_CTRL2_SWPR LCD_CTRL2_SWPR_Msk +#define LCD_CTRL2_FBMODE_Pos (6UL) /*!< LCD CTRL2: FBMODE (Bit 6) */ +#define LCD_CTRL2_FBMODE_Msk (0xc0UL) /*!< LCD CTRL2: FBMODE (Bitfield-Mask: 0x03) */ +#define LCD_CTRL2_FBMODE LCD_CTRL2_FBMODE_Msk +#define LCD_CTRL2_BKFILL_Pos (4UL) /*!< LCD CTRL2: BKFILL (Bit 4) */ +#define LCD_CTRL2_BKFILL_Msk (0x10UL) /*!< LCD CTRL2: BKFILL (Bitfield-Mask: 0x01) */ +#define LCD_CTRL2_BKFILL LCD_CTRL2_BKFILL_Msk +/* ======================================================= SEGCTRL0 ======================================================== */ +#define LCD_SEGCTRL0_SEGCTRL_Pos (0UL) /*!< LCD SEGCTRL0: SEGCTRL (Bit 0) */ +#define LCD_SEGCTRL0_SEGCTRL_Msk (0xffffffffUL) /*!< LCD SEGCTRL0: SEGCTRL (Bitfield-Mask: 0xffffffff) */ +#define LCD_SEGCTRL0_SEGCTRL LCD_SEGCTRL0_SEGCTRL_Msk +/* ======================================================= SEGCTRL1 ======================================================== */ +#define LCD_SEGCTRL1_SEGCTRL_Pos (0UL) /*!< LCD SEGCTRL1: SEGCTRL (Bit 0) */ +#define LCD_SEGCTRL1_SEGCTRL_Msk (0xffffffffUL) /*!< LCD SEGCTRL1: SEGCTRL (Bitfield-Mask: 0xffffffff) */ +#define LCD_SEGCTRL1_SEGCTRL LCD_SEGCTRL1_SEGCTRL_Msk +/* ======================================================= SEGCTRL2 ======================================================== */ +#define LCD_SEGCTRL2_SEGCTRL_Pos (0UL) /*!< LCD SEGCTRL2: SEGCTRL (Bit 0) */ +#define LCD_SEGCTRL2_SEGCTRL_Msk (0xffffUL) /*!< LCD SEGCTRL2: SEGCTRL (Bitfield-Mask: 0xffff) */ +#define LCD_SEGCTRL2_SEGCTRL LCD_SEGCTRL2_SEGCTRL_Msk + + +/* =========================================================================================================================== */ +/* ================ MISC1 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== SRAMINT ======================================================== */ +#define MISC1_SRAMINT_LOCKUP_Pos (4UL) /*!< MISC1 SRAMINT: LOCKUP (Bit 4) */ +#define MISC1_SRAMINT_LOCKUP_Msk (0x10UL) /*!< MISC1 SRAMINT: LOCKUP (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINT_LOCKUP MISC1_SRAMINT_LOCKUP_Msk +#define MISC1_SRAMINT_PIAC_Pos (3UL) /*!< MISC1 SRAMINT: PIAC (Bit 3) */ +#define MISC1_SRAMINT_PIAC_Msk (0x8UL) /*!< MISC1 SRAMINT: PIAC (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINT_PIAC MISC1_SRAMINT_PIAC_Msk +#define MISC1_SRAMINT_HIAC_Pos (2UL) /*!< MISC1 SRAMINT: HIAC (Bit 2) */ +#define MISC1_SRAMINT_HIAC_Msk (0x4UL) /*!< MISC1 SRAMINT: HIAC (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINT_HIAC MISC1_SRAMINT_HIAC_Msk +#define MISC1_SRAMINT_HIAL_Pos (1UL) /*!< MISC1 SRAMINT: HIAL (Bit 1) */ +#define MISC1_SRAMINT_HIAL_Msk (0x2UL) /*!< MISC1 SRAMINT: HIAL (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINT_HIAL MISC1_SRAMINT_HIAL_Msk +#define MISC1_SRAMINT_PERR_Pos (0UL) /*!< MISC1 SRAMINT: PERR (Bit 0) */ +#define MISC1_SRAMINT_PERR_Msk (0x1UL) /*!< MISC1 SRAMINT: PERR (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINT_PERR MISC1_SRAMINT_PERR_Msk +/* ======================================================= SRAMINIT ======================================================== */ +#define MISC1_SRAMINIT_LOCKIE_Pos (7UL) /*!< MISC1 SRAMINIT: LOCKIE (Bit 7) */ +#define MISC1_SRAMINIT_LOCKIE_Msk (0x80UL) /*!< MISC1 SRAMINIT: LOCKIE (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_LOCKIE MISC1_SRAMINIT_LOCKIE_Msk +#define MISC1_SRAMINIT_PIACIE_Pos (6UL) /*!< MISC1 SRAMINIT: PIACIE (Bit 6) */ +#define MISC1_SRAMINIT_PIACIE_Msk (0x40UL) /*!< MISC1 SRAMINIT: PIACIE (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_PIACIE MISC1_SRAMINIT_PIACIE_Msk +#define MISC1_SRAMINIT_HIACIE_Pos (5UL) /*!< MISC1 SRAMINIT: HIACIE (Bit 5) */ +#define MISC1_SRAMINIT_HIACIE_Msk (0x20UL) /*!< MISC1 SRAMINIT: HIACIE (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_HIACIE MISC1_SRAMINIT_HIACIE_Msk +#define MISC1_SRAMINIT_INIT_Pos (2UL) /*!< MISC1 SRAMINIT: INIT (Bit 2) */ +#define MISC1_SRAMINIT_INIT_Msk (0x4UL) /*!< MISC1 SRAMINIT: INIT (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_INIT MISC1_SRAMINIT_INIT_Msk +#define MISC1_SRAMINIT_PERRIE_Pos (1UL) /*!< MISC1 SRAMINIT: PERRIE (Bit 1) */ +#define MISC1_SRAMINIT_PERRIE_Msk (0x2UL) /*!< MISC1 SRAMINIT: PERRIE (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_PERRIE MISC1_SRAMINIT_PERRIE_Msk +#define MISC1_SRAMINIT_PEN_Pos (0UL) /*!< MISC1 SRAMINIT: PEN (Bit 0) */ +#define MISC1_SRAMINIT_PEN_Msk (0x1UL) /*!< MISC1 SRAMINIT: PEN (Bitfield-Mask: 0x01) */ +#define MISC1_SRAMINIT_PEN MISC1_SRAMINIT_PEN_Msk +/* ======================================================== PARERR ========================================================= */ +#define MISC1_PARERR_PEADDR_Pos (0UL) /*!< MISC1 PARERR: PEADDR (Bit 0) */ +#define MISC1_PARERR_PEADDR_Msk (0x3fffUL) /*!< MISC1 PARERR: PEADDR (Bitfield-Mask: 0x3fff) */ +#define MISC1_PARERR_PEADDR MISC1_PARERR_PEADDR_Msk +/* ========================================================= IREN ========================================================== */ +#define MISC1_IREN_IREN_Pos (0UL) /*!< MISC1 IREN: IREN (Bit 0) */ +#define MISC1_IREN_IREN_Msk (0x3fUL) /*!< MISC1 IREN: IREN (Bitfield-Mask: 0x3f) */ +#define MISC1_IREN_IREN MISC1_IREN_IREN_Msk +/* ========================================================= DUTYL ========================================================= */ +#define MISC1_DUTYL_DUTYL_Pos (0UL) /*!< MISC1 DUTYL: DUTYL (Bit 0) */ +#define MISC1_DUTYL_DUTYL_Msk (0xffffUL) /*!< MISC1 DUTYL: DUTYL (Bitfield-Mask: 0xffff) */ +#define MISC1_DUTYL_DUTYL MISC1_DUTYL_DUTYL_Msk +/* ========================================================= DUTYH ========================================================= */ +#define MISC1_DUTYH_DUTYH_Pos (0UL) /*!< MISC1 DUTYH: DUTYH (Bit 0) */ +#define MISC1_DUTYH_DUTYH_Msk (0xffffUL) /*!< MISC1 DUTYH: DUTYH (Bitfield-Mask: 0xffff) */ +#define MISC1_DUTYH_DUTYH MISC1_DUTYH_DUTYH_Msk +/* ======================================================== IRQLAT ========================================================= */ +#define MISC1_IRQLAT_NOHARDFAULT_Pos (9UL) /*!< MISC1 IRQLAT: NOHARDFAULT (Bit 9) */ +#define MISC1_IRQLAT_NOHARDFAULT_Msk (0x200UL) /*!< MISC1 IRQLAT: NOHARDFAULT (Bitfield-Mask: 0x01) */ +#define MISC1_IRQLAT_NOHARDFAULT MISC1_IRQLAT_NOHARDFAULT_Msk +#define MISC1_IRQLAT_LOCKRESET_Pos (8UL) /*!< MISC1 IRQLAT: LOCKRESET (Bit 8) */ +#define MISC1_IRQLAT_LOCKRESET_Msk (0x100UL) /*!< MISC1 IRQLAT: LOCKRESET (Bitfield-Mask: 0x01) */ +#define MISC1_IRQLAT_LOCKRESET MISC1_IRQLAT_LOCKRESET_Msk +#define MISC1_IRQLAT_IRQLAT_Pos (0UL) /*!< MISC1 IRQLAT: IRQLAT (Bit 0) */ +#define MISC1_IRQLAT_IRQLAT_Msk (0xffUL) /*!< MISC1 IRQLAT: IRQLAT (Bitfield-Mask: 0xff) */ +#define MISC1_IRQLAT_IRQLAT MISC1_IRQLAT_IRQLAT_Msk +/* ======================================================== HIADDR ========================================================= */ +#define MISC1_HIADDR_HIADDR_Pos (0UL) /*!< MISC1 HIADDR: HIADDR (Bit 0) */ +#define MISC1_HIADDR_HIADDR_Msk (0xffffffffUL) /*!< MISC1 HIADDR: HIADDR (Bitfield-Mask: 0xffffffff) */ +#define MISC1_HIADDR_HIADDR MISC1_HIADDR_HIADDR_Msk +/* ======================================================== PIADDR ========================================================= */ +#define MISC1_PIADDR_PIADDR_Pos (0UL) /*!< MISC1 PIADDR: PIADDR (Bit 0) */ +#define MISC1_PIADDR_PIADDR_Msk (0xffffffffUL) /*!< MISC1 PIADDR: PIADDR (Bitfield-Mask: 0xffffffff) */ +#define MISC1_PIADDR_PIADDR MISC1_PIADDR_PIADDR_Msk + + +/* =========================================================================================================================== */ +/* ================ MISC2 ================ */ +/* =========================================================================================================================== */ + +/* ======================================================== FLASHWC ======================================================== */ +#define MISC2_FLASHWC_CYCLE_1US_Pos (8UL) /*!< MISC2 FLASHWC: CYCLE_1US (Bit 8) */ +#define MISC2_FLASHWC_CYCLE_1US_Msk (0x3f00UL) /*!< MISC2 FLASHWC: CYCLE_1US (Bitfield-Mask: 0x3f) */ +#define MISC2_FLASHWC_CYCLE_1US MISC2_FLASHWC_CYCLE_1US_Msk +/* ======================================================== CLKSEL ========================================================= */ +#define MISC2_CLKSEL_CLKSEL_Pos (0UL) /*!< MISC2 CLKSEL: CLKSEL (Bit 0) */ +#define MISC2_CLKSEL_CLKSEL_Msk (0x7UL) /*!< MISC2 CLKSEL: CLKSEL (Bitfield-Mask: 0x07) */ +#define MISC2_CLKSEL_CLKSEL MISC2_CLKSEL_CLKSEL_Msk +/* ======================================================== CLKDIVH ======================================================== */ +#define MISC2_CLKDIVH_CLKDIVH_Pos (0UL) /*!< MISC2 CLKDIVH: CLKDIVH (Bit 0) */ +#define MISC2_CLKDIVH_CLKDIVH_Msk (0xffUL) /*!< MISC2 CLKDIVH: CLKDIVH (Bitfield-Mask: 0xff) */ +#define MISC2_CLKDIVH_CLKDIVH MISC2_CLKDIVH_CLKDIVH_Msk +/* ======================================================== CLKDIVP ======================================================== */ +#define MISC2_CLKDIVP_CLKDIVP_Pos (0UL) /*!< MISC2 CLKDIVP: CLKDIVP (Bit 0) */ +#define MISC2_CLKDIVP_CLKDIVP_Msk (0xffUL) /*!< MISC2 CLKDIVP: CLKDIVP (Bitfield-Mask: 0xff) */ +#define MISC2_CLKDIVP_CLKDIVP MISC2_CLKDIVP_CLKDIVP_Msk +/* ======================================================== HCLKEN ========================================================= */ +#define MISC2_HCLKEN_CRYPT_Pos (8UL) /*!< MISC2 HCLKEN: CRYPT (Bit 8) */ +#define MISC2_HCLKEN_CRYPT_Msk (0x100UL) /*!< MISC2 HCLKEN: CRYPT (Bitfield-Mask: 0x01) */ +#define MISC2_HCLKEN_CRYPT MISC2_HCLKEN_CRYPT_Msk +#define MISC2_HCLKEN_LCD_Pos (6UL) /*!< MISC2 HCLKEN: LCD (Bit 6) */ +#define MISC2_HCLKEN_LCD_Msk (0x40UL) /*!< MISC2 HCLKEN: LCD (Bitfield-Mask: 0x01) */ +#define MISC2_HCLKEN_LCD MISC2_HCLKEN_LCD_Msk +#define MISC2_HCLKEN_GPIO_Pos (5UL) /*!< MISC2 HCLKEN: GPIO (Bit 5) */ +#define MISC2_HCLKEN_GPIO_Msk (0x20UL) /*!< MISC2 HCLKEN: GPIO (Bitfield-Mask: 0x01) */ +#define MISC2_HCLKEN_GPIO MISC2_HCLKEN_GPIO_Msk +#define MISC2_HCLKEN_DMA_Pos (4UL) /*!< MISC2 HCLKEN: DMA (Bit 4) */ +#define MISC2_HCLKEN_DMA_Msk (0x10UL) /*!< MISC2 HCLKEN: DMA (Bitfield-Mask: 0x01) */ +#define MISC2_HCLKEN_DMA MISC2_HCLKEN_DMA_Msk +/* ======================================================== PCLKEN ========================================================= */ +#define MISC2_PCLKEN_SPI3_Pos (22UL) /*!< MISC2 PCLKEN: SPI3 (Bit 22) */ +#define MISC2_PCLKEN_SPI3_Msk (0x400000UL) /*!< MISC2 PCLKEN: SPI3 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_SPI3 MISC2_PCLKEN_SPI3_Msk +#define MISC2_PCLKEN_SPI2_Pos (21UL) /*!< MISC2 PCLKEN: SPI2 (Bit 21) */ +#define MISC2_PCLKEN_SPI2_Msk (0x200000UL) /*!< MISC2 PCLKEN: SPI2 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_SPI2 MISC2_PCLKEN_SPI2_Msk +#define MISC2_PCLKEN_U32K1_Pos (19UL) /*!< MISC2 PCLKEN: U32K1 (Bit 19) */ +#define MISC2_PCLKEN_U32K1_Msk (0x80000UL) /*!< MISC2 PCLKEN: U32K1 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_U32K1 MISC2_PCLKEN_U32K1_Msk +#define MISC2_PCLKEN_U32K0_Pos (18UL) /*!< MISC2 PCLKEN: U32K0 (Bit 18) */ +#define MISC2_PCLKEN_U32K0_Msk (0x40000UL) /*!< MISC2 PCLKEN: U32K0 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_U32K0 MISC2_PCLKEN_U32K0_Msk +#define MISC2_PCLKEN_ANA_Pos (17UL) /*!< MISC2 PCLKEN: ANA (Bit 17) */ +#define MISC2_PCLKEN_ANA_Msk (0x20000UL) /*!< MISC2 PCLKEN: ANA (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_ANA MISC2_PCLKEN_ANA_Msk +#define MISC2_PCLKEN_RTC_Pos (16UL) /*!< MISC2 PCLKEN: RTC (Bit 16) */ +#define MISC2_PCLKEN_RTC_Msk (0x10000UL) /*!< MISC2 PCLKEN: RTC (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_RTC MISC2_PCLKEN_RTC_Msk +#define MISC2_PCLKEN_PMU_Pos (15UL) /*!< MISC2 PCLKEN: PMU (Bit 15) */ +#define MISC2_PCLKEN_PMU_Msk (0x8000UL) /*!< MISC2 PCLKEN: PMU (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_PMU MISC2_PCLKEN_PMU_Msk +#define MISC2_PCLKEN_MISC2_Pos (14UL) /*!< MISC2 PCLKEN: MISC2 (Bit 14) */ +#define MISC2_PCLKEN_MISC2_Msk (0x4000UL) /*!< MISC2 PCLKEN: MISC2 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_MISC2 MISC2_PCLKEN_MISC2_Msk +#define MISC2_PCLKEN_MISC1_Pos (13UL) /*!< MISC2 PCLKEN: MISC1 (Bit 13) */ +#define MISC2_PCLKEN_MISC1_Msk (0x2000UL) /*!< MISC2 PCLKEN: MISC1 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_MISC1 MISC2_PCLKEN_MISC1_Msk +#define MISC2_PCLKEN_TIMER_Pos (12UL) /*!< MISC2 PCLKEN: TIMER (Bit 12) */ +#define MISC2_PCLKEN_TIMER_Msk (0x1000UL) /*!< MISC2 PCLKEN: TIMER (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_TIMER MISC2_PCLKEN_TIMER_Msk +#define MISC2_PCLKEN_ISO78161_Pos (11UL) /*!< MISC2 PCLKEN: ISO78161 (Bit 11) */ +#define MISC2_PCLKEN_ISO78161_Msk (0x800UL) /*!< MISC2 PCLKEN: ISO78161 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_ISO78161 MISC2_PCLKEN_ISO78161_Msk +#define MISC2_PCLKEN_ISO78160_Pos (10UL) /*!< MISC2 PCLKEN: ISO78160 (Bit 10) */ +#define MISC2_PCLKEN_ISO78160_Msk (0x400UL) /*!< MISC2 PCLKEN: ISO78160 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_ISO78160 MISC2_PCLKEN_ISO78160_Msk +#define MISC2_PCLKEN_UART5_Pos (9UL) /*!< MISC2 PCLKEN: UART5 (Bit 9) */ +#define MISC2_PCLKEN_UART5_Msk (0x200UL) /*!< MISC2 PCLKEN: UART5 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART5 MISC2_PCLKEN_UART5_Msk +#define MISC2_PCLKEN_UART4_Pos (8UL) /*!< MISC2 PCLKEN: UART4 (Bit 8) */ +#define MISC2_PCLKEN_UART4_Msk (0x100UL) /*!< MISC2 PCLKEN: UART4 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART4 MISC2_PCLKEN_UART4_Msk +#define MISC2_PCLKEN_UART3_Pos (7UL) /*!< MISC2 PCLKEN: UART3 (Bit 7) */ +#define MISC2_PCLKEN_UART3_Msk (0x80UL) /*!< MISC2 PCLKEN: UART3 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART3 MISC2_PCLKEN_UART3_Msk +#define MISC2_PCLKEN_UART2_Pos (6UL) /*!< MISC2 PCLKEN: UART2 (Bit 6) */ +#define MISC2_PCLKEN_UART2_Msk (0x40UL) /*!< MISC2 PCLKEN: UART2 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART2 MISC2_PCLKEN_UART2_Msk +#define MISC2_PCLKEN_UART1_Pos (5UL) /*!< MISC2 PCLKEN: UART1 (Bit 5) */ +#define MISC2_PCLKEN_UART1_Msk (0x20UL) /*!< MISC2 PCLKEN: UART1 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART1 MISC2_PCLKEN_UART1_Msk +#define MISC2_PCLKEN_UART0_Pos (4UL) /*!< MISC2 PCLKEN: UART0 (Bit 4) */ +#define MISC2_PCLKEN_UART0_Msk (0x10UL) /*!< MISC2 PCLKEN: UART0 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_UART0 MISC2_PCLKEN_UART0_Msk +#define MISC2_PCLKEN_SPI1_Pos (3UL) /*!< MISC2 PCLKEN: SPI1 (Bit 3) */ +#define MISC2_PCLKEN_SPI1_Msk (0x8UL) /*!< MISC2 PCLKEN: SPI1 (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_SPI1 MISC2_PCLKEN_SPI1_Msk +#define MISC2_PCLKEN_I2C_Pos (2UL) /*!< MISC2 PCLKEN: I2C (Bit 2) */ +#define MISC2_PCLKEN_I2C_Msk (0x4UL) /*!< MISC2 PCLKEN: I2C (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_I2C MISC2_PCLKEN_I2C_Msk +#define MISC2_PCLKEN_DMA_Pos (1UL) /*!< MISC2 PCLKEN: DMA (Bit 1) */ +#define MISC2_PCLKEN_DMA_Msk (0x2UL) /*!< MISC2 PCLKEN: DMA (Bitfield-Mask: 0x01) */ +#define MISC2_PCLKEN_DMA MISC2_PCLKEN_DMA_Msk + + +/* =========================================================================================================================== */ +/* ================ PMU ================ */ +/* =========================================================================================================================== */ + +/* ======================================================= DSLEEPEN ======================================================== */ +#define PMU_DSLEEPEN_WKU_Pos (31UL) /*!< PMU DSLEEPEN: WKU (Bit 31) */ +#define PMU_DSLEEPEN_WKU_Msk (0x80000000UL) /*!< PMU DSLEEPEN: WKU (Bitfield-Mask: 0x01) */ +#define PMU_DSLEEPEN_WKU PMU_DSLEEPEN_WKU_Msk +/* ====================================================== DSLEEPPASS ======================================================= */ +#define PMU_DSLEEPPASS_UNLOCK_Pos (0UL) /*!< PMU DSLEEPPASS: UNLOCK (Bit 0) */ +#define PMU_DSLEEPPASS_UNLOCK_Msk (0x1UL) /*!< PMU DSLEEPPASS: UNLOCK (Bitfield-Mask: 0x01) */ +#define PMU_DSLEEPPASS_UNLOCK PMU_DSLEEPPASS_UNLOCK_Msk +/* ======================================================== CONTROL ======================================================== */ +#define PMU_CONTROL_FORCE_CLKSEL_RCH_Pos (20UL) /*!< PMU CONTROL: FORCE_CLKSEL_RCH (Bit 20) */ +#define PMU_CONTROL_FORCE_CLKSEL_RCH_Msk (0x100000UL) /*!< PMU CONTROL: FORCE_CLKSEL_RCH (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_FORCE_CLKSEL_RCH PMU_CONTROL_FORCE_CLKSEL_RCH_Msk +#define PMU_CONTROL_PWUPCYC_Pos (8UL) /*!< PMU CONTROL: PWUPCYC (Bit 8) */ +#define PMU_CONTROL_PWUPCYC_Msk (0xff00UL) /*!< PMU CONTROL: PWUPCYC (Bitfield-Mask: 0xff) */ +#define PMU_CONTROL_PWUPCYC PMU_CONTROL_PWUPCYC_Msk +#define PMU_CONTROL_PLLL_SEL_Pos (5UL) /*!< PMU CONTROL: PLLL_SEL (Bit 5) */ +#define PMU_CONTROL_PLLL_SEL_Msk (0x20UL) /*!< PMU CONTROL: PLLL_SEL (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_PLLL_SEL PMU_CONTROL_PLLL_SEL_Msk +#define PMU_CONTROL_PLLH_SEL_Pos (4UL) /*!< PMU CONTROL: PLLH_SEL (Bit 4) */ +#define PMU_CONTROL_PLLH_SEL_Msk (0x10UL) /*!< PMU CONTROL: PLLH_SEL (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_PLLH_SEL PMU_CONTROL_PLLH_SEL_Msk +#define PMU_CONTROL_INT_6M_EN_Pos (3UL) /*!< PMU CONTROL: INT_6M_EN (Bit 3) */ +#define PMU_CONTROL_INT_6M_EN_Msk (0x8UL) /*!< PMU CONTROL: INT_6M_EN (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_INT_6M_EN PMU_CONTROL_INT_6M_EN_Msk +#define PMU_CONTROL_INT_32K_EN_Pos (2UL) /*!< PMU CONTROL: INT_32K_EN (Bit 2) */ +#define PMU_CONTROL_INT_32K_EN_Msk (0x4UL) /*!< PMU CONTROL: INT_32K_EN (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_INT_32K_EN PMU_CONTROL_INT_32K_EN_Msk +#define PMU_CONTROL_RTCCLK_SEL_Pos (1UL) /*!< PMU CONTROL: RTCCLK_SEL (Bit 1) */ +#define PMU_CONTROL_RTCCLK_SEL_Msk (0x2UL) /*!< PMU CONTROL: RTCCLK_SEL (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_RTCCLK_SEL PMU_CONTROL_RTCCLK_SEL_Msk +#define PMU_CONTROL_INT_IOA_EN_Pos (0UL) /*!< PMU CONTROL: INT_IOA_EN (Bit 0) */ +#define PMU_CONTROL_INT_IOA_EN_Msk (0x1UL) /*!< PMU CONTROL: INT_IOA_EN (Bitfield-Mask: 0x01) */ +#define PMU_CONTROL_INT_IOA_EN PMU_CONTROL_INT_IOA_EN_Msk +/* ========================================================== STS ========================================================== */ +#define PMU_STS_MODE_Pos (24UL) /*!< PMU STS: MODE (Bit 24) */ +#define PMU_STS_MODE_Msk (0x1000000UL) /*!< PMU STS: MODE (Bitfield-Mask: 0x01) */ +#define PMU_STS_MODE PMU_STS_MODE_Msk +#define PMU_STS_WKUMODE_Pos (22UL) /*!< PMU STS: WKUMODE (Bit 22) */ +#define PMU_STS_WKUMODE_Msk (0x400000UL) /*!< PMU STS: WKUMODE (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKUMODE PMU_STS_WKUMODE_Msk +#define PMU_STS_WKUXTAL_Pos (20UL) /*!< PMU STS: WKUXTAL (Bit 20) */ +#define PMU_STS_WKUXTAL_Msk (0x100000UL) /*!< PMU STS: WKUXTAL (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKUXTAL PMU_STS_WKUXTAL_Msk +#define PMU_STS_WKUU32K_Pos (19UL) /*!< PMU STS: WKUU32K (Bit 19) */ +#define PMU_STS_WKUU32K_Msk (0x80000UL) /*!< PMU STS: WKUU32K (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKUU32K PMU_STS_WKUU32K_Msk +#define PMU_STS_WKUANA_Pos (18UL) /*!< PMU STS: WKUANA (Bit 18) */ +#define PMU_STS_WKUANA_Msk (0x40000UL) /*!< PMU STS: WKUANA (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKUANA PMU_STS_WKUANA_Msk +#define PMU_STS_WKURTC_Pos (17UL) /*!< PMU STS: WKURTC (Bit 17) */ +#define PMU_STS_WKURTC_Msk (0x20000UL) /*!< PMU STS: WKURTC (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKURTC PMU_STS_WKURTC_Msk +#define PMU_STS_WKUIOA_Pos (16UL) /*!< PMU STS: WKUIOA (Bit 16) */ +#define PMU_STS_WKUIOA_Msk (0x10000UL) /*!< PMU STS: WKUIOA (Bitfield-Mask: 0x01) */ +#define PMU_STS_WKUIOA PMU_STS_WKUIOA_Msk +#define PMU_STS_MODERST_Pos (10UL) /*!< PMU STS: MODERST (Bit 10) */ +#define PMU_STS_MODERST_Msk (0x400UL) /*!< PMU STS: MODERST (Bitfield-Mask: 0x01) */ +#define PMU_STS_MODERST PMU_STS_MODERST_Msk +#define PMU_STS_SFTRST_Pos (8UL) /*!< PMU STS: SFTRST (Bit 8) */ +#define PMU_STS_SFTRST_Msk (0x100UL) /*!< PMU STS: SFTRST (Bitfield-Mask: 0x01) */ +#define PMU_STS_SFTRST PMU_STS_SFTRST_Msk +#define PMU_STS_WDTRST_Pos (7UL) /*!< PMU STS: WDTRST (Bit 7) */ +#define PMU_STS_WDTRST_Msk (0x80UL) /*!< PMU STS: WDTRST (Bitfield-Mask: 0x01) */ +#define PMU_STS_WDTRST PMU_STS_WDTRST_Msk +#define PMU_STS_DPORST_Pos (6UL) /*!< PMU STS: DPORST (Bit 6) */ +#define PMU_STS_DPORST_Msk (0x40UL) /*!< PMU STS: DPORST (Bitfield-Mask: 0x01) */ +#define PMU_STS_DPORST PMU_STS_DPORST_Msk +#define PMU_STS_PORST_Pos (5UL) /*!< PMU STS: PORST (Bit 5) */ +#define PMU_STS_PORST_Msk (0x20UL) /*!< PMU STS: PORST (Bitfield-Mask: 0x01) */ +#define PMU_STS_PORST PMU_STS_PORST_Msk +#define PMU_STS_EXTRST_Pos (4UL) /*!< PMU STS: EXTRST (Bit 4) */ +#define PMU_STS_EXTRST_Msk (0x10UL) /*!< PMU STS: EXTRST (Bitfield-Mask: 0x01) */ +#define PMU_STS_EXTRST PMU_STS_EXTRST_Msk +#define PMU_STS_EXIST_6M_Pos (3UL) /*!< PMU STS: EXIST_6M (Bit 3) */ +#define PMU_STS_EXIST_6M_Msk (0x8UL) /*!< PMU STS: EXIST_6M (Bitfield-Mask: 0x01) */ +#define PMU_STS_EXIST_6M PMU_STS_EXIST_6M_Msk +#define PMU_STS_EXIST_32K_Pos (2UL) /*!< PMU STS: EXIST_32K (Bit 2) */ +#define PMU_STS_EXIST_32K_Msk (0x4UL) /*!< PMU STS: EXIST_32K (Bitfield-Mask: 0x01) */ +#define PMU_STS_EXIST_32K PMU_STS_EXIST_32K_Msk +#define PMU_STS_INT_6M_Pos (1UL) /*!< PMU STS: INT_6M (Bit 1) */ +#define PMU_STS_INT_6M_Msk (0x2UL) /*!< PMU STS: INT_6M (Bitfield-Mask: 0x01) */ +#define PMU_STS_INT_6M PMU_STS_INT_6M_Msk +#define PMU_STS_INT_32K_Pos (0UL) /*!< PMU STS: INT_32K (Bit 0) */ +#define PMU_STS_INT_32K_Msk (0x1UL) /*!< PMU STS: INT_32K (Bitfield-Mask: 0x01) */ +#define PMU_STS_INT_32K PMU_STS_INT_32K_Msk +/* ======================================================== WDTPASS ======================================================== */ +#define PMU_WDTPASS_UNLOCK_Pos (0UL) /*!< PMU WDTPASS: UNLOCK (Bit 0) */ +#define PMU_WDTPASS_UNLOCK_Msk (0x1UL) /*!< PMU WDTPASS: UNLOCK (Bitfield-Mask: 0x01) */ +#define PMU_WDTPASS_UNLOCK PMU_WDTPASS_UNLOCK_Msk +/* ========================================================= WDTEN ========================================================= */ +#define PMU_WDTEN_WDTSEL_Pos (2UL) /*!< PMU WDTEN: WDTSEL (Bit 2) */ +#define PMU_WDTEN_WDTSEL_Msk (0xcUL) /*!< PMU WDTEN: WDTSEL (Bitfield-Mask: 0x03) */ +#define PMU_WDTEN_WDTSEL PMU_WDTEN_WDTSEL_Msk +#define PMU_WDTEN_WDTEN_Pos (0UL) /*!< PMU WDTEN: WDTEN (Bit 0) */ +#define PMU_WDTEN_WDTEN_Msk (0x1UL) /*!< PMU WDTEN: WDTEN (Bitfield-Mask: 0x01) */ +#define PMU_WDTEN_WDTEN PMU_WDTEN_WDTEN_Msk +/* ======================================================== WDTCLR ========================================================= */ +#define PMU_WDTCLR_WDTCNT_Pos (0UL) /*!< PMU WDTCLR: WDTCNT (Bit 0) */ +#define PMU_WDTCLR_WDTCNT_Msk (0xffffUL) /*!< PMU WDTCLR: WDTCNT (Bitfield-Mask: 0xffff) */ +#define PMU_WDTCLR_WDTCNT PMU_WDTCLR_WDTCNT_Msk +/* ========================================================== RAM ========================================================== */ +#define PMU_RAM_RAM_Pos (0UL) /*!< PMU RAM: RAM (Bit 0) */ +#define PMU_RAM_RAM_Msk (0xffffffffUL) /*!< PMU RAM: RAM (Bitfield-Mask: 0xffffffff) */ +#define PMU_RAM_RAM PMU_RAM_RAM_Msk + + +/* =========================================================================================================================== */ +/* ================ PWM ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== CTL ========================================================== */ +#define PWM_CTL_ID_Pos (6UL) /*!< PWM CTL: ID (Bit 6) */ +#define PWM_CTL_ID_Msk (0xc0UL) /*!< PWM CTL: ID (Bitfield-Mask: 0x03) */ +#define PWM_CTL_ID PWM_CTL_ID_Msk +#define PWM_CTL_MC_Pos (4UL) /*!< PWM CTL: MC (Bit 4) */ +#define PWM_CTL_MC_Msk (0x30UL) /*!< PWM CTL: MC (Bitfield-Mask: 0x03) */ +#define PWM_CTL_MC PWM_CTL_MC_Msk +#define PWM_CTL_TSEL_Pos (3UL) /*!< PWM CTL: TSEL (Bit 3) */ +#define PWM_CTL_TSEL_Msk (0x8UL) /*!< PWM CTL: TSEL (Bitfield-Mask: 0x01) */ +#define PWM_CTL_TSEL PWM_CTL_TSEL_Msk +#define PWM_CTL_CLR_Pos (2UL) /*!< PWM CTL: CLR (Bit 2) */ +#define PWM_CTL_CLR_Msk (0x4UL) /*!< PWM CTL: CLR (Bitfield-Mask: 0x01) */ +#define PWM_CTL_CLR PWM_CTL_CLR_Msk +#define PWM_CTL_IE_Pos (1UL) /*!< PWM CTL: IE (Bit 1) */ +#define PWM_CTL_IE_Msk (0x2UL) /*!< PWM CTL: IE (Bitfield-Mask: 0x01) */ +#define PWM_CTL_IE PWM_CTL_IE_Msk +#define PWM_CTL_IFG_Pos (0UL) /*!< PWM CTL: IFG (Bit 0) */ +#define PWM_CTL_IFG_Msk (0x1UL) /*!< PWM CTL: IFG (Bitfield-Mask: 0x01) */ +#define PWM_CTL_IFG PWM_CTL_IFG_Msk +/* ========================================================== TAR ========================================================== */ +#define PWM_TAR_TAR_Pos (0UL) /*!< PWM TAR: TAR (Bit 0) */ +#define PWM_TAR_TAR_Msk (0xffffUL) /*!< PWM TAR: TAR (Bitfield-Mask: 0xffff) */ +#define PWM_TAR_TAR PWM_TAR_TAR_Msk +/* ========================================================= CCTL ========================================================== */ +#define PWM_CCTL_CM_Pos (14UL) /*!< PWM CCTL: CM (Bit 14) */ +#define PWM_CCTL_CM_Msk (0xc000UL) /*!< PWM CCTL: CM (Bitfield-Mask: 0x03) */ +#define PWM_CCTL_CM PWM_CCTL_CM_Msk +#define PWM_CCTL_SCCI_Pos (10UL) /*!< PWM CCTL: SCCI (Bit 10) */ +#define PWM_CCTL_SCCI_Msk (0x400UL) /*!< PWM CCTL: SCCI (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_SCCI PWM_CCTL_SCCI_Msk +#define PWM_CCTL_OUTEN_Pos (9UL) /*!< PWM CCTL: OUTEN (Bit 9) */ +#define PWM_CCTL_OUTEN_Msk (0x200UL) /*!< PWM CCTL: OUTEN (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_OUTEN PWM_CCTL_OUTEN_Msk +#define PWM_CCTL_CAP_Pos (8UL) /*!< PWM CCTL: CAP (Bit 8) */ +#define PWM_CCTL_CAP_Msk (0x100UL) /*!< PWM CCTL: CAP (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_CAP PWM_CCTL_CAP_Msk +#define PWM_CCTL_OUTMOD_Pos (5UL) /*!< PWM CCTL: OUTMOD (Bit 5) */ +#define PWM_CCTL_OUTMOD_Msk (0xe0UL) /*!< PWM CCTL: OUTMOD (Bitfield-Mask: 0x07) */ +#define PWM_CCTL_OUTMOD PWM_CCTL_OUTMOD_Msk +#define PWM_CCTL_CCIE_Pos (4UL) /*!< PWM CCTL: CCIE (Bit 4) */ +#define PWM_CCTL_CCIE_Msk (0x10UL) /*!< PWM CCTL: CCIE (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_CCIE PWM_CCTL_CCIE_Msk +#define PWM_CCTL_OUT_Pos (2UL) /*!< PWM CCTL: OUT (Bit 2) */ +#define PWM_CCTL_OUT_Msk (0x4UL) /*!< PWM CCTL: OUT (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_OUT PWM_CCTL_OUT_Msk +#define PWM_CCTL_COV_Pos (1UL) /*!< PWM CCTL: COV (Bit 1) */ +#define PWM_CCTL_COV_Msk (0x2UL) /*!< PWM CCTL: COV (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_COV PWM_CCTL_COV_Msk +#define PWM_CCTL_CCIFG_Pos (0UL) /*!< PWM CCTL: CCIFG (Bit 0) */ +#define PWM_CCTL_CCIFG_Msk (0x1UL) /*!< PWM CCTL: CCIFG (Bitfield-Mask: 0x01) */ +#define PWM_CCTL_CCIFG PWM_CCTL_CCIFG_Msk +/* ========================================================== CCR ========================================================== */ +#define PWM_CCR_CCRx_Pos (0UL) /*!< PWM CCR: CCRx (Bit 0) */ +#define PWM_CCR_CCRx_Msk (0xffffUL) /*!< PWM CCR: CCRx (Bitfield-Mask: 0xffff) */ +#define PWM_CCR_CCRx PWM_CCR_CCRx_Msk + + +/* =========================================================================================================================== */ +/* ================ PWM_SEL ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= O_SEL ========================================================= */ +#define PWM_SEL_O_SEL_SEL3_Pos (12UL) /*!< PWM_SEL O_SEL: SEL3 (Bit 12) */ +#define PWM_SEL_O_SEL_SEL3_Msk (0xf000UL) /*!< PWM_SEL O_SEL: SEL3 (Bitfield-Mask: 0x0f) */ +#define PWM_SEL_O_SEL_SEL3 PWM_SEL_O_SEL_SEL3_Msk +#define PWM_SEL_O_SEL_SEL2_Pos (8UL) /*!< PWM_SEL O_SEL: SEL2 (Bit 8) */ +#define PWM_SEL_O_SEL_SEL2_Msk (0xf00UL) /*!< PWM_SEL O_SEL: SEL2 (Bitfield-Mask: 0x0f) */ +#define PWM_SEL_O_SEL_SEL2 PWM_SEL_O_SEL_SEL2_Msk +#define PWM_SEL_O_SEL_SEL1_Pos (4UL) /*!< PWM_SEL O_SEL: SEL1 (Bit 4) */ +#define PWM_SEL_O_SEL_SEL1_Msk (0xf0UL) /*!< PWM_SEL O_SEL: SEL1 (Bitfield-Mask: 0x0f) */ +#define PWM_SEL_O_SEL_SEL1 PWM_SEL_O_SEL_SEL1_Msk +#define PWM_SEL_O_SEL_SEL0_Pos (0UL) /*!< PWM_SEL O_SEL: SEL0 (Bit 0) */ +#define PWM_SEL_O_SEL_SEL0_Msk (0xfUL) /*!< PWM_SEL O_SEL: SEL0 (Bitfield-Mask: 0x0f) */ +#define PWM_SEL_O_SEL_SEL0 PWM_SEL_O_SEL_SEL0_Msk +/* ======================================================== I_SEL01 ======================================================== */ +#define PWM_SEL_I_SEL01_SEL12_Pos (20UL) /*!< PWM_SEL I_SEL01: SEL12 (Bit 20) */ +#define PWM_SEL_I_SEL01_SEL12_Msk (0x300000UL) /*!< PWM_SEL I_SEL01: SEL12 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL12 PWM_SEL_I_SEL01_SEL12_Msk +#define PWM_SEL_I_SEL01_SEL11_Pos (18UL) /*!< PWM_SEL I_SEL01: SEL11 (Bit 18) */ +#define PWM_SEL_I_SEL01_SEL11_Msk (0xc0000UL) /*!< PWM_SEL I_SEL01: SEL11 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL11 PWM_SEL_I_SEL01_SEL11_Msk +#define PWM_SEL_I_SEL01_SEL10_Pos (16UL) /*!< PWM_SEL I_SEL01: SEL10 (Bit 16) */ +#define PWM_SEL_I_SEL01_SEL10_Msk (0x30000UL) /*!< PWM_SEL I_SEL01: SEL10 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL10 PWM_SEL_I_SEL01_SEL10_Msk +#define PWM_SEL_I_SEL01_SEL02_Pos (4UL) /*!< PWM_SEL I_SEL01: SEL02 (Bit 4) */ +#define PWM_SEL_I_SEL01_SEL02_Msk (0x30UL) /*!< PWM_SEL I_SEL01: SEL02 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL02 PWM_SEL_I_SEL01_SEL02_Msk +#define PWM_SEL_I_SEL01_SEL01_Pos (2UL) /*!< PWM_SEL I_SEL01: SEL01 (Bit 2) */ +#define PWM_SEL_I_SEL01_SEL01_Msk (0xcUL) /*!< PWM_SEL I_SEL01: SEL01 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL01 PWM_SEL_I_SEL01_SEL01_Msk +#define PWM_SEL_I_SEL01_SEL00_Pos (0UL) /*!< PWM_SEL I_SEL01: SEL00 (Bit 0) */ +#define PWM_SEL_I_SEL01_SEL00_Msk (0x3UL) /*!< PWM_SEL I_SEL01: SEL00 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL01_SEL00 PWM_SEL_I_SEL01_SEL00_Msk +/* ======================================================== I_SEL23 ======================================================== */ +#define PWM_SEL_I_SEL23_SEL32_Pos (20UL) /*!< PWM_SEL I_SEL23: SEL32 (Bit 20) */ +#define PWM_SEL_I_SEL23_SEL32_Msk (0x300000UL) /*!< PWM_SEL I_SEL23: SEL32 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL32 PWM_SEL_I_SEL23_SEL32_Msk +#define PWM_SEL_I_SEL23_SEL31_Pos (18UL) /*!< PWM_SEL I_SEL23: SEL31 (Bit 18) */ +#define PWM_SEL_I_SEL23_SEL31_Msk (0xc0000UL) /*!< PWM_SEL I_SEL23: SEL31 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL31 PWM_SEL_I_SEL23_SEL31_Msk +#define PWM_SEL_I_SEL23_SEL30_Pos (16UL) /*!< PWM_SEL I_SEL23: SEL30 (Bit 16) */ +#define PWM_SEL_I_SEL23_SEL30_Msk (0x30000UL) /*!< PWM_SEL I_SEL23: SEL30 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL30 PWM_SEL_I_SEL23_SEL30_Msk +#define PWM_SEL_I_SEL23_SEL22_Pos (4UL) /*!< PWM_SEL I_SEL23: SEL22 (Bit 4) */ +#define PWM_SEL_I_SEL23_SEL22_Msk (0x30UL) /*!< PWM_SEL I_SEL23: SEL22 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL22 PWM_SEL_I_SEL23_SEL22_Msk +#define PWM_SEL_I_SEL23_SEL21_Pos (2UL) /*!< PWM_SEL I_SEL23: SEL21 (Bit 2) */ +#define PWM_SEL_I_SEL23_SEL21_Msk (0xcUL) /*!< PWM_SEL I_SEL23: SEL21 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL21 PWM_SEL_I_SEL23_SEL21_Msk +#define PWM_SEL_I_SEL23_SEL20_Pos (0UL) /*!< PWM_SEL I_SEL23: SEL20 (Bit 0) */ +#define PWM_SEL_I_SEL23_SEL20_Msk (0x3UL) /*!< PWM_SEL I_SEL23: SEL20 (Bitfield-Mask: 0x03) */ +#define PWM_SEL_I_SEL23_SEL20 PWM_SEL_I_SEL23_SEL20_Msk + + +/* =========================================================================================================================== */ +/* ================ RTC ================ */ +/* =========================================================================================================================== */ + +/* ========================================================== SEC ========================================================== */ +#define RTC_SEC_SEC_Pos (0UL) /*!< RTC SEC: SEC (Bit 0) */ +#define RTC_SEC_SEC_Msk (0x7fUL) /*!< RTC SEC: SEC (Bitfield-Mask: 0x7f) */ +#define RTC_SEC_SEC RTC_SEC_SEC_Msk +/* ========================================================== MIN ========================================================== */ +#define RTC_MIN_MIN_Pos (0UL) /*!< RTC MIN: MIN (Bit 0) */ +#define RTC_MIN_MIN_Msk (0x7fUL) /*!< RTC MIN: MIN (Bitfield-Mask: 0x7f) */ +#define RTC_MIN_MIN RTC_MIN_MIN_Msk +/* ========================================================= HOUR ========================================================== */ +#define RTC_HOUR_HOUR_Pos (0UL) /*!< RTC HOUR: HOUR (Bit 0) */ +#define RTC_HOUR_HOUR_Msk (0x3fUL) /*!< RTC HOUR: HOUR (Bitfield-Mask: 0x3f) */ +#define RTC_HOUR_HOUR RTC_HOUR_HOUR_Msk +/* ========================================================== DAY ========================================================== */ +#define RTC_DAY_DAY_Pos (0UL) /*!< RTC DAY: DAY (Bit 0) */ +#define RTC_DAY_DAY_Msk (0x3fUL) /*!< RTC DAY: DAY (Bitfield-Mask: 0x3f) */ +#define RTC_DAY_DAY RTC_DAY_DAY_Msk +/* ========================================================= WEEK ========================================================== */ +#define RTC_WEEK_WEEK_Pos (0UL) /*!< RTC WEEK: WEEK (Bit 0) */ +#define RTC_WEEK_WEEK_Msk (0x7UL) /*!< RTC WEEK: WEEK (Bitfield-Mask: 0x07) */ +#define RTC_WEEK_WEEK RTC_WEEK_WEEK_Msk +/* ========================================================== MON ========================================================== */ +#define RTC_MON_MON_Pos (0UL) /*!< RTC MON: MON (Bit 0) */ +#define RTC_MON_MON_Msk (0x1fUL) /*!< RTC MON: MON (Bitfield-Mask: 0x1f) */ +#define RTC_MON_MON RTC_MON_MON_Msk +/* ========================================================= YEAR ========================================================== */ +#define RTC_YEAR_YEAR_Pos (0UL) /*!< RTC YEAR: YEAR (Bit 0) */ +#define RTC_YEAR_YEAR_Msk (0xffUL) /*!< RTC YEAR: YEAR (Bitfield-Mask: 0xff) */ +#define RTC_YEAR_YEAR RTC_YEAR_YEAR_Msk +/* ========================================================= TIME ========================================================== */ +#define RTC_TIME_TIME_Pos (0UL) /*!< RTC TIME: TIME (Bit 0) */ +#define RTC_TIME_TIME_Msk (0x3fffffUL) /*!< RTC TIME: TIME (Bitfield-Mask: 0x3fffff) */ +#define RTC_TIME_TIME RTC_TIME_TIME_Msk +/* ======================================================== WKUSEC ========================================================= */ +#define RTC_WKUSEC_WKUSEC_Pos (0UL) /*!< RTC WKUSEC: WKUSEC (Bit 0) */ +#define RTC_WKUSEC_WKUSEC_Msk (0x3fUL) /*!< RTC WKUSEC: WKUSEC (Bitfield-Mask: 0x3f) */ +#define RTC_WKUSEC_WKUSEC RTC_WKUSEC_WKUSEC_Msk +/* ======================================================== WKUMIN ========================================================= */ +#define RTC_WKUMIN_WKUMIN_Pos (0UL) /*!< RTC WKUMIN: WKUMIN (Bit 0) */ +#define RTC_WKUMIN_WKUMIN_Msk (0x3fUL) /*!< RTC WKUMIN: WKUMIN (Bitfield-Mask: 0x3f) */ +#define RTC_WKUMIN_WKUMIN RTC_WKUMIN_WKUMIN_Msk +/* ======================================================== WKUHOUR ======================================================== */ +#define RTC_WKUHOUR_WKUHOUR_Pos (0UL) /*!< RTC WKUHOUR: WKUHOUR (Bit 0) */ +#define RTC_WKUHOUR_WKUHOUR_Msk (0x1fUL) /*!< RTC WKUHOUR: WKUHOUR (Bitfield-Mask: 0x1f) */ +#define RTC_WKUHOUR_WKUHOUR RTC_WKUHOUR_WKUHOUR_Msk +/* ======================================================== WKUCNT ========================================================= */ +#define RTC_WKUCNT_CNTSEL_Pos (24UL) /*!< RTC WKUCNT: CNTSEL (Bit 24) */ +#define RTC_WKUCNT_CNTSEL_Msk (0x3000000UL) /*!< RTC WKUCNT: CNTSEL (Bitfield-Mask: 0x03) */ +#define RTC_WKUCNT_CNTSEL RTC_WKUCNT_CNTSEL_Msk +#define RTC_WKUCNT_WKUCNT_Pos (0UL) /*!< RTC WKUCNT: WKUCNT (Bit 0) */ +#define RTC_WKUCNT_WKUCNT_Msk (0xffffffUL) /*!< RTC WKUCNT: WKUCNT (Bitfield-Mask: 0xffffff) */ +#define RTC_WKUCNT_WKUCNT RTC_WKUCNT_WKUCNT_Msk +/* ========================================================== CAL ========================================================== */ +#define RTC_CAL_CAL_Pos (0UL) /*!< RTC CAL: CAL (Bit 0) */ +#define RTC_CAL_CAL_Msk (0x3fffUL) /*!< RTC CAL: CAL (Bitfield-Mask: 0x3fff) */ +#define RTC_CAL_CAL RTC_CAL_CAL_Msk +/* ========================================================== DIV ========================================================== */ +#define RTC_DIV_RTCDIV_Pos (0UL) /*!< RTC DIV: RTCDIV (Bit 0) */ +#define RTC_DIV_RTCDIV_Msk (0x3ffffffUL) /*!< RTC DIV: RTCDIV (Bitfield-Mask: 0x3ffffff) */ +#define RTC_DIV_RTCDIV RTC_DIV_RTCDIV_Msk +/* ========================================================== CTL ========================================================== */ +#define RTC_CTL_RTCPLLCLKSEL_Pos (4UL) /*!< RTC CTL: RTCPLLCLKSEL (Bit 4) */ +#define RTC_CTL_RTCPLLCLKSEL_Msk (0x10UL) /*!< RTC CTL: RTCPLLCLKSEL (Bitfield-Mask: 0x01) */ +#define RTC_CTL_RTCPLLCLKSEL RTC_CTL_RTCPLLCLKSEL_Msk +#define RTC_CTL_RTCPLLOE_Pos (2UL) /*!< RTC CTL: RTCPLLOE (Bit 2) */ +#define RTC_CTL_RTCPLLOE_Msk (0x4UL) /*!< RTC CTL: RTCPLLOE (Bitfield-Mask: 0x01) */ +#define RTC_CTL_RTCPLLOE RTC_CTL_RTCPLLOE_Msk +/* ========================================================== ITV ========================================================== */ +#define RTC_ITV_ITV_Pos (0UL) /*!< RTC ITV: ITV (Bit 0) */ +#define RTC_ITV_ITV_Msk (0x7UL) /*!< RTC ITV: ITV (Bitfield-Mask: 0x07) */ +#define RTC_ITV_ITV RTC_ITV_ITV_Msk +/* ========================================================= SITV ========================================================== */ +#define RTC_SITV_SITVEN_Pos (6UL) /*!< RTC SITV: SITVEN (Bit 6) */ +#define RTC_SITV_SITVEN_Msk (0x40UL) /*!< RTC SITV: SITVEN (Bitfield-Mask: 0x01) */ +#define RTC_SITV_SITVEN RTC_SITV_SITVEN_Msk +#define RTC_SITV_SITV_Pos (0UL) /*!< RTC SITV: SITV (Bit 0) */ +#define RTC_SITV_SITV_Msk (0x3fUL) /*!< RTC SITV: SITV (Bitfield-Mask: 0x3f) */ +#define RTC_SITV_SITV RTC_SITV_SITV_Msk +/* ========================================================== PWD ========================================================== */ +#define RTC_PWD_PWDEN_Pos (0UL) /*!< RTC PWD: PWDEN (Bit 0) */ +#define RTC_PWD_PWDEN_Msk (0x1UL) /*!< RTC PWD: PWDEN (Bitfield-Mask: 0x01) */ +#define RTC_PWD_PWDEN RTC_PWD_PWDEN_Msk +/* ========================================================== CE =========================================================== */ +#define RTC_CE_BSY_Pos (1UL) /*!< RTC CE: BSY (Bit 1) */ +#define RTC_CE_BSY_Msk (0x2UL) /*!< RTC CE: BSY (Bitfield-Mask: 0x01) */ +#define RTC_CE_BSY RTC_CE_BSY_Msk +#define RTC_CE_CE_Pos (0UL) /*!< RTC CE: CE (Bit 0) */ +#define RTC_CE_CE_Msk (0x1UL) /*!< RTC CE: CE (Bitfield-Mask: 0x01) */ +#define RTC_CE_CE RTC_CE_CE_Msk +/* ========================================================= LOAD ========================================================== */ +#define RTC_LOAD_LOAD_Pos (0UL) /*!< RTC LOAD: LOAD (Bit 0) */ +#define RTC_LOAD_LOAD_Msk (0xffffffffUL) /*!< RTC LOAD: LOAD (Bitfield-Mask: 0xffffffff) */ +#define RTC_LOAD_LOAD RTC_LOAD_LOAD_Msk +/* ======================================================== INTSTS ========================================================= */ +#define RTC_INTSTS_INTSTS10_Pos (10UL) /*!< RTC INTSTS: INTSTS10 (Bit 10) */ +#define RTC_INTSTS_INTSTS10_Msk (0x400UL) /*!< RTC INTSTS: INTSTS10 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS10 RTC_INTSTS_INTSTS10_Msk +#define RTC_INTSTS_INTSTS8_Pos (8UL) /*!< RTC INTSTS: INTSTS8 (Bit 8) */ +#define RTC_INTSTS_INTSTS8_Msk (0x100UL) /*!< RTC INTSTS: INTSTS8 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS8 RTC_INTSTS_INTSTS8_Msk +#define RTC_INTSTS_INTSTS6_Pos (6UL) /*!< RTC INTSTS: INTSTS6 (Bit 6) */ +#define RTC_INTSTS_INTSTS6_Msk (0x40UL) /*!< RTC INTSTS: INTSTS6 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS6 RTC_INTSTS_INTSTS6_Msk +#define RTC_INTSTS_INTSTS5_Pos (5UL) /*!< RTC INTSTS: INTSTS5 (Bit 5) */ +#define RTC_INTSTS_INTSTS5_Msk (0x20UL) /*!< RTC INTSTS: INTSTS5 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS5 RTC_INTSTS_INTSTS5_Msk +#define RTC_INTSTS_INTSTS4_Pos (4UL) /*!< RTC INTSTS: INTSTS4 (Bit 4) */ +#define RTC_INTSTS_INTSTS4_Msk (0x10UL) /*!< RTC INTSTS: INTSTS4 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS4 RTC_INTSTS_INTSTS4_Msk +#define RTC_INTSTS_INTSTS3_Pos (3UL) /*!< RTC INTSTS: INTSTS3 (Bit 3) */ +#define RTC_INTSTS_INTSTS3_Msk (0x8UL) /*!< RTC INTSTS: INTSTS3 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS3 RTC_INTSTS_INTSTS3_Msk +#define RTC_INTSTS_INTSTS2_Pos (2UL) /*!< RTC INTSTS: INTSTS2 (Bit 2) */ +#define RTC_INTSTS_INTSTS2_Msk (0x4UL) /*!< RTC INTSTS: INTSTS2 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS2 RTC_INTSTS_INTSTS2_Msk +#define RTC_INTSTS_INTSTS1_Pos (1UL) /*!< RTC INTSTS: INTSTS1 (Bit 1) */ +#define RTC_INTSTS_INTSTS1_Msk (0x2UL) /*!< RTC INTSTS: INTSTS1 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS1 RTC_INTSTS_INTSTS1_Msk +#define RTC_INTSTS_INTSTS0_Pos (0UL) /*!< RTC INTSTS: INTSTS0 (Bit 0) */ +#define RTC_INTSTS_INTSTS0_Msk (0x1UL) /*!< RTC INTSTS: INTSTS0 (Bitfield-Mask: 0x01) */ +#define RTC_INTSTS_INTSTS0 RTC_INTSTS_INTSTS0_Msk +/* ========================================================= INTEN ========================================================= */ +#define RTC_INTEN_INTEN10_Pos (10UL) /*!< RTC INTEN: INTEN10 (Bit 10) */ +#define RTC_INTEN_INTEN10_Msk (0x400UL) /*!< RTC INTEN: INTEN10 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN10 RTC_INTEN_INTEN10_Msk +#define RTC_INTEN_INTEN8_Pos (8UL) /*!< RTC INTEN: INTEN8 (Bit 8) */ +#define RTC_INTEN_INTEN8_Msk (0x100UL) /*!< RTC INTEN: INTEN8 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN8 RTC_INTEN_INTEN8_Msk +#define RTC_INTEN_INTEN6_Pos (6UL) /*!< RTC INTEN: INTEN6 (Bit 6) */ +#define RTC_INTEN_INTEN6_Msk (0x40UL) /*!< RTC INTEN: INTEN6 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN6 RTC_INTEN_INTEN6_Msk +#define RTC_INTEN_INTEN5_Pos (5UL) /*!< RTC INTEN: INTEN5 (Bit 5) */ +#define RTC_INTEN_INTEN5_Msk (0x20UL) /*!< RTC INTEN: INTEN5 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN5 RTC_INTEN_INTEN5_Msk +#define RTC_INTEN_INTEN4_Pos (4UL) /*!< RTC INTEN: INTEN4 (Bit 4) */ +#define RTC_INTEN_INTEN4_Msk (0x10UL) /*!< RTC INTEN: INTEN4 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN4 RTC_INTEN_INTEN4_Msk +#define RTC_INTEN_INTRN3_Pos (3UL) /*!< RTC INTEN: INTRN3 (Bit 3) */ +#define RTC_INTEN_INTRN3_Msk (0x8UL) /*!< RTC INTEN: INTRN3 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTRN3 RTC_INTEN_INTRN3_Msk +#define RTC_INTEN_INTEN2_Pos (2UL) /*!< RTC INTEN: INTEN2 (Bit 2) */ +#define RTC_INTEN_INTEN2_Msk (0x4UL) /*!< RTC INTEN: INTEN2 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN2 RTC_INTEN_INTEN2_Msk +#define RTC_INTEN_INTEN1_Pos (1UL) /*!< RTC INTEN: INTEN1 (Bit 1) */ +#define RTC_INTEN_INTEN1_Msk (0x2UL) /*!< RTC INTEN: INTEN1 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN1 RTC_INTEN_INTEN1_Msk +#define RTC_INTEN_INTEN0_Pos (0UL) /*!< RTC INTEN: INTEN0 (Bit 0) */ +#define RTC_INTEN_INTEN0_Msk (0x1UL) /*!< RTC INTEN: INTEN0 (Bitfield-Mask: 0x01) */ +#define RTC_INTEN_INTEN0 RTC_INTEN_INTEN0_Msk +/* ========================================================= PSCA ========================================================== */ +#define RTC_PSCA_PSCA_Pos (0UL) /*!< RTC PSCA: PSCA (Bit 0) */ +#define RTC_PSCA_PSCA_Msk (0x3UL) /*!< RTC PSCA: PSCA (Bitfield-Mask: 0x03) */ +#define RTC_PSCA_PSCA RTC_PSCA_PSCA_Msk +/* ========================================================= ACTI ========================================================== */ +#define RTC_ACTI_ACTI_Pos (0UL) /*!< RTC ACTI: ACTI (Bit 0) */ +#define RTC_ACTI_ACTI_Msk (0x3fffUL) /*!< RTC ACTI: ACTI (Bitfield-Mask: 0x3fff) */ +#define RTC_ACTI_ACTI RTC_ACTI_ACTI_Msk +/* ======================================================== ACF200 ========================================================= */ +#define RTC_ACF200_F200_Pos (0UL) /*!< RTC ACF200: F200 (Bit 0) */ +#define RTC_ACF200_F200_Msk (0x3ffffffUL) /*!< RTC ACF200: F200 (Bitfield-Mask: 0x3ffffff) */ +#define RTC_ACF200_F200 RTC_ACF200_F200_Msk +/* ========================================================= ACP0 ========================================================== */ +#define RTC_ACP0_P0_Pos (0UL) /*!< RTC ACP0: P0 (Bit 0) */ +#define RTC_ACP0_P0_Msk (0xffffUL) /*!< RTC ACP0: P0 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP0_P0 RTC_ACP0_P0_Msk +/* ========================================================= ACP1 ========================================================== */ +#define RTC_ACP1_P1_Pos (0UL) /*!< RTC ACP1: P1 (Bit 0) */ +#define RTC_ACP1_P1_Msk (0xffffUL) /*!< RTC ACP1: P1 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP1_P1 RTC_ACP1_P1_Msk +/* ========================================================= ACP2 ========================================================== */ +#define RTC_ACP2_P2_Pos (0UL) /*!< RTC ACP2: P2 (Bit 0) */ +#define RTC_ACP2_P2_Msk (0xffffffffUL) /*!< RTC ACP2: P2 (Bitfield-Mask: 0xffffffff) */ +#define RTC_ACP2_P2 RTC_ACP2_P2_Msk +/* ========================================================= ACP3 ========================================================== */ +#define RTC_ACP3_P3_Pos (0UL) /*!< RTC ACP3: P3 (Bit 0) */ +#define RTC_ACP3_P3_Msk (0xffffffffUL) /*!< RTC ACP3: P3 (Bitfield-Mask: 0xffffffff) */ +#define RTC_ACP3_P3 RTC_ACP3_P3_Msk +/* ========================================================= ACP4 ========================================================== */ +#define RTC_ACP4_P4_Pos (0UL) /*!< RTC ACP4: P4 (Bit 0) */ +#define RTC_ACP4_P4_Msk (0xffffUL) /*!< RTC ACP4: P4 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP4_P4 RTC_ACP4_P4_Msk +/* ========================================================= ACP5 ========================================================== */ +#define RTC_ACP5_P5_Pos (0UL) /*!< RTC ACP5: P5 (Bit 0) */ +#define RTC_ACP5_P5_Msk (0xffffUL) /*!< RTC ACP5: P5 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP5_P5 RTC_ACP5_P5_Msk +/* ========================================================= ACP6 ========================================================== */ +#define RTC_ACP6_P6_Pos (0UL) /*!< RTC ACP6: P6 (Bit 0) */ +#define RTC_ACP6_P6_Msk (0xffffUL) /*!< RTC ACP6: P6 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP6_P6 RTC_ACP6_P6_Msk +/* ========================================================= ACP7 ========================================================== */ +#define RTC_ACP7_P7_Pos (0UL) /*!< RTC ACP7: P7 (Bit 0) */ +#define RTC_ACP7_P7_Msk (0xffffUL) /*!< RTC ACP7: P7 (Bitfield-Mask: 0xffff) */ +#define RTC_ACP7_P7 RTC_ACP7_P7_Msk +/* ========================================================== ACK ========================================================== */ +#define RTC_ACK_K_Pos (0UL) /*!< RTC ACK: K (Bit 0) */ +#define RTC_ACK_K_Msk (0xffffUL) /*!< RTC ACK: K (Bitfield-Mask: 0xffff) */ +#define RTC_ACK_K RTC_ACK_K_Msk +/* ======================================================== WKUCNTR ======================================================== */ +#define RTC_WKUCNTR_WKUCNTR_Pos (0UL) /*!< RTC WKUCNTR: WKUCNTR (Bit 0) */ +#define RTC_WKUCNTR_WKUCNTR_Msk (0xffffffUL) /*!< RTC WKUCNTR: WKUCNTR (Bitfield-Mask: 0xffffff) */ +#define RTC_WKUCNTR_WKUCNTR RTC_WKUCNTR_WKUCNTR_Msk +/* ======================================================== ACKTEMP ======================================================== */ +#define RTC_ACKTEMP_KTEMP4_Pos (24UL) /*!< RTC ACKTEMP: KTEMP4 (Bit 24) */ +#define RTC_ACKTEMP_KTEMP4_Msk (0xff000000UL) /*!< RTC ACKTEMP: KTEMP4 (Bitfield-Mask: 0xff) */ +#define RTC_ACKTEMP_KTEMP4 RTC_ACKTEMP_KTEMP4_Msk +#define RTC_ACKTEMP_KTEMP3_Pos (16UL) /*!< RTC ACKTEMP: KTEMP3 (Bit 16) */ +#define RTC_ACKTEMP_KTEMP3_Msk (0xff0000UL) /*!< RTC ACKTEMP: KTEMP3 (Bitfield-Mask: 0xff) */ +#define RTC_ACKTEMP_KTEMP3 RTC_ACKTEMP_KTEMP3_Msk +#define RTC_ACKTEMP_KTEMP2_Pos (8UL) /*!< RTC ACKTEMP: KTEMP2 (Bit 8) */ +#define RTC_ACKTEMP_KTEMP2_Msk (0xff00UL) /*!< RTC ACKTEMP: KTEMP2 (Bitfield-Mask: 0xff) */ +#define RTC_ACKTEMP_KTEMP2 RTC_ACKTEMP_KTEMP2_Msk +#define RTC_ACKTEMP_KTEMP1_Pos (0UL) /*!< RTC ACKTEMP: KTEMP1 (Bit 0) */ +#define RTC_ACKTEMP_KTEMP1_Msk (0xffUL) /*!< RTC ACKTEMP: KTEMP1 (Bitfield-Mask: 0xff) */ +#define RTC_ACKTEMP_KTEMP1 RTC_ACKTEMP_KTEMP1_Msk +/* ======================================================= ALARMTIME ======================================================= */ +#define RTC_ALARMTIME_ALARMTIME_Pos (0UL) /*!< RTC ALARMTIME: ALARMTIME (Bit 0) */ +#define RTC_ALARMTIME_ALARMTIME_Msk (0x3fffffUL) /*!< RTC ALARMTIME: ALARMTIME (Bitfield-Mask: 0x3fffff) */ +#define RTC_ALARMTIME_ALARMTIME RTC_ALARMTIME_ALARMTIME_Msk +/* ======================================================= ALARMSEC ======================================================== */ +#define RTC_ALARMSEC_ALARMSEC_Pos (0UL) /*!< RTC ALARMSEC: ALARMSEC (Bit 0) */ +#define RTC_ALARMSEC_ALARMSEC_Msk (0x7fUL) /*!< RTC ALARMSEC: ALARMSEC (Bitfield-Mask: 0x7f) */ +#define RTC_ALARMSEC_ALARMSEC RTC_ALARMSEC_ALARMSEC_Msk +/* ======================================================= ALARMMIN ======================================================== */ +#define RTC_ALARMMIN_ALARMMIN_Pos (0UL) /*!< RTC ALARMMIN: ALARMMIN (Bit 0) */ +#define RTC_ALARMMIN_ALARMMIN_Msk (0x7fUL) /*!< RTC ALARMMIN: ALARMMIN (Bitfield-Mask: 0x7f) */ +#define RTC_ALARMMIN_ALARMMIN RTC_ALARMMIN_ALARMMIN_Msk +/* ======================================================= ALARMHOUR ======================================================= */ +#define RTC_ALARMHOUR_ALARMHOUR_Pos (0UL) /*!< RTC ALARMHOUR: ALARMHOUR (Bit 0) */ +#define RTC_ALARMHOUR_ALARMHOUR_Msk (0x3fUL) /*!< RTC ALARMHOUR: ALARMHOUR (Bitfield-Mask: 0x3f) */ +#define RTC_ALARMHOUR_ALARMHOUR RTC_ALARMHOUR_ALARMHOUR_Msk +/* ======================================================= ALARMCTL ======================================================== */ +#define RTC_ALARMCTL_TIME_CNT_EN_Pos (2UL) /*!< RTC ALARMCTL: TIME_CNT_EN (Bit 2) */ +#define RTC_ALARMCTL_TIME_CNT_EN_Msk (0x4UL) /*!< RTC ALARMCTL: TIME_CNT_EN (Bitfield-Mask: 0x01) */ +#define RTC_ALARMCTL_TIME_CNT_EN RTC_ALARMCTL_TIME_CNT_EN_Msk +#define RTC_ALARMCTL_ALARM_INACCURATE_Pos (1UL) /*!< RTC ALARMCTL: ALARM_INACCURATE (Bit 1) */ +#define RTC_ALARMCTL_ALARM_INACCURATE_Msk (0x2UL) /*!< RTC ALARMCTL: ALARM_INACCURATE (Bitfield-Mask: 0x01) */ +#define RTC_ALARMCTL_ALARM_INACCURATE RTC_ALARMCTL_ALARM_INACCURATE_Msk +#define RTC_ALARMCTL_ALARM_EN_Pos (0UL) /*!< RTC ALARMCTL: ALARM_EN (Bit 0) */ +#define RTC_ALARMCTL_ALARM_EN_Msk (0x1UL) /*!< RTC ALARMCTL: ALARM_EN (Bitfield-Mask: 0x01) */ +#define RTC_ALARMCTL_ALARM_EN RTC_ALARMCTL_ALARM_EN_Msk +/* ======================================================= ADCUCALK ======================================================== */ +#define RTC_ADCUCALK_UCAL_K3_Pos (16UL) /*!< RTC ADCUCALK: UCAL_K3 (Bit 16) */ +#define RTC_ADCUCALK_UCAL_K3_Msk (0xffff0000UL) /*!< RTC ADCUCALK: UCAL_K3 (Bitfield-Mask: 0xffff) */ +#define RTC_ADCUCALK_UCAL_K3 RTC_ADCUCALK_UCAL_K3_Msk +#define RTC_ADCUCALK_UCAL_K1_Pos (0UL) /*!< RTC ADCUCALK: UCAL_K1 (Bit 0) */ +#define RTC_ADCUCALK_UCAL_K1_Msk (0xffffUL) /*!< RTC ADCUCALK: UCAL_K1 (Bitfield-Mask: 0xffff) */ +#define RTC_ADCUCALK_UCAL_K1 RTC_ADCUCALK_UCAL_K1_Msk +/* ======================================================= ADCMACTL ======================================================== */ +#define RTC_ADCMACTL_ADCSREF_CAL_Pos (24UL) /*!< RTC ADCMACTL: ADCSREF_CAL (Bit 24) */ +#define RTC_ADCMACTL_ADCSREF_CAL_Msk (0x7000000UL) /*!< RTC ADCMACTL: ADCSREF_CAL (Bitfield-Mask: 0x07) */ +#define RTC_ADCMACTL_ADCSREF_CAL RTC_ADCMACTL_ADCSREF_CAL_Msk +#define RTC_ADCMACTL_SKIP_SAMPLE_Pos (20UL) /*!< RTC ADCMACTL: SKIP_SAMPLE (Bit 20) */ +#define RTC_ADCMACTL_SKIP_SAMPLE_Msk (0xf00000UL) /*!< RTC ADCMACTL: SKIP_SAMPLE (Bitfield-Mask: 0x0f) */ +#define RTC_ADCMACTL_SKIP_SAMPLE RTC_ADCMACTL_SKIP_SAMPLE_Msk +#define RTC_ADCMACTL_AVERAGE_SAMPLE_Pos (16UL) /*!< RTC ADCMACTL: AVERAGE_SAMPLE (Bit 16) */ +#define RTC_ADCMACTL_AVERAGE_SAMPLE_Msk (0x70000UL) /*!< RTC ADCMACTL: AVERAGE_SAMPLE (Bitfield-Mask: 0x07) */ +#define RTC_ADCMACTL_AVERAGE_SAMPLE RTC_ADCMACTL_AVERAGE_SAMPLE_Msk +#define RTC_ADCMACTL_AVERAGE_CHx_Pos (0UL) /*!< RTC ADCMACTL: AVERAGE_CHx (Bit 0) */ +#define RTC_ADCMACTL_AVERAGE_CHx_Msk (0xffffUL) /*!< RTC ADCMACTL: AVERAGE_CHx (Bitfield-Mask: 0xffff) */ +#define RTC_ADCMACTL_AVERAGE_CHx RTC_ADCMACTL_AVERAGE_CHx_Msk +/* ======================================================= ADCDTCTL ======================================================== */ +#define RTC_ADCDTCTL_ENDED_IN2ADC_CONVERT_Pos (30UL) /*!< RTC ADCDTCTL: ENDED_IN2ADC_CONVERT (Bit 30) */ +#define RTC_ADCDTCTL_ENDED_IN2ADC_CONVERT_Msk (0xc0000000UL) /*!< RTC ADCDTCTL: ENDED_IN2ADC_CONVERT (Bitfield-Mask: 0x03) */ +#define RTC_ADCDTCTL_ENDED_IN2ADC_CONVERT RTC_ADCDTCTL_ENDED_IN2ADC_CONVERT_Msk + + +/* =========================================================================================================================== */ +/* ================ SPI ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CTRL ========================================================== */ +#define SPI_CTRL_EN_Pos (15UL) /*!< SPI CTRL: EN (Bit 15) */ +#define SPI_CTRL_EN_Msk (0x8000UL) /*!< SPI CTRL: EN (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_EN SPI_CTRL_EN_Msk +#define SPI_CTRL_LSBF_Pos (12UL) /*!< SPI CTRL: LSBF (Bit 12) */ +#define SPI_CTRL_LSBF_Msk (0x1000UL) /*!< SPI CTRL: LSBF (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_LSBF SPI_CTRL_LSBF_Msk +#define SPI_CTRL_RST_Pos (11UL) /*!< SPI CTRL: RST (Bit 11) */ +#define SPI_CTRL_RST_Msk (0x800UL) /*!< SPI CTRL: RST (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_RST SPI_CTRL_RST_Msk +#define SPI_CTRL_CSGPIO_Pos (10UL) /*!< SPI CTRL: CSGPIO (Bit 10) */ +#define SPI_CTRL_CSGPIO_Msk (0x400UL) /*!< SPI CTRL: CSGPIO (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_CSGPIO SPI_CTRL_CSGPIO_Msk +#define SPI_CTRL_SWAP_Pos (9UL) /*!< SPI CTRL: SWAP (Bit 9) */ +#define SPI_CTRL_SWAP_Msk (0x200UL) /*!< SPI CTRL: SWAP (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_SWAP SPI_CTRL_SWAP_Msk +#define SPI_CTRL_MOD_Pos (8UL) /*!< SPI CTRL: MOD (Bit 8) */ +#define SPI_CTRL_MOD_Msk (0x100UL) /*!< SPI CTRL: MOD (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_MOD SPI_CTRL_MOD_Msk +#define SPI_CTRL_SCKPHA_Pos (5UL) /*!< SPI CTRL: SCKPHA (Bit 5) */ +#define SPI_CTRL_SCKPHA_Msk (0x20UL) /*!< SPI CTRL: SCKPHA (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_SCKPHA SPI_CTRL_SCKPHA_Msk +#define SPI_CTRL_SCKPOL_Pos (4UL) /*!< SPI CTRL: SCKPOL (Bit 4) */ +#define SPI_CTRL_SCKPOL_Msk (0x10UL) /*!< SPI CTRL: SCKPOL (Bitfield-Mask: 0x01) */ +#define SPI_CTRL_SCKPOL SPI_CTRL_SCKPOL_Msk +#define SPI_CTRL_SCKSEL_Pos (0UL) /*!< SPI CTRL: SCKSEL (Bit 0) */ +#define SPI_CTRL_SCKSEL_Msk (0x7UL) /*!< SPI CTRL: SCKSEL (Bitfield-Mask: 0x07) */ +#define SPI_CTRL_SCKSEL SPI_CTRL_SCKSEL_Msk +/* ========================================================= TXSTS ========================================================= */ +#define SPI_TXSTS_TXIF_Pos (15UL) /*!< SPI TXSTS: TXIF (Bit 15) */ +#define SPI_TXSTS_TXIF_Msk (0x8000UL) /*!< SPI TXSTS: TXIF (Bitfield-Mask: 0x01) */ +#define SPI_TXSTS_TXIF SPI_TXSTS_TXIF_Msk +#define SPI_TXSTS_TXIEN_Pos (14UL) /*!< SPI TXSTS: TXIEN (Bit 14) */ +#define SPI_TXSTS_TXIEN_Msk (0x4000UL) /*!< SPI TXSTS: TXIEN (Bitfield-Mask: 0x01) */ +#define SPI_TXSTS_TXIEN SPI_TXSTS_TXIEN_Msk +#define SPI_TXSTS_TXEMPTY_Pos (9UL) /*!< SPI TXSTS: TXEMPTY (Bit 9) */ +#define SPI_TXSTS_TXEMPTY_Msk (0x200UL) /*!< SPI TXSTS: TXEMPTY (Bitfield-Mask: 0x01) */ +#define SPI_TXSTS_TXEMPTY SPI_TXSTS_TXEMPTY_Msk +#define SPI_TXSTS_TXFUR_Pos (8UL) /*!< SPI TXSTS: TXFUR (Bit 8) */ +#define SPI_TXSTS_TXFUR_Msk (0x100UL) /*!< SPI TXSTS: TXFUR (Bitfield-Mask: 0x01) */ +#define SPI_TXSTS_TXFUR SPI_TXSTS_TXFUR_Msk +#define SPI_TXSTS_TXFLEV_Pos (4UL) /*!< SPI TXSTS: TXFLEV (Bit 4) */ +#define SPI_TXSTS_TXFLEV_Msk (0x70UL) /*!< SPI TXSTS: TXFLEV (Bitfield-Mask: 0x07) */ +#define SPI_TXSTS_TXFLEV SPI_TXSTS_TXFLEV_Msk +#define SPI_TXSTS_DMATXDONE_Pos (3UL) /*!< SPI TXSTS: DMATXDONE (Bit 3) */ +#define SPI_TXSTS_DMATXDONE_Msk (0x8UL) /*!< SPI TXSTS: DMATXDONE (Bitfield-Mask: 0x01) */ +#define SPI_TXSTS_DMATXDONE SPI_TXSTS_DMATXDONE_Msk +#define SPI_TXSTS_TXFFLAG_Pos (0UL) /*!< SPI TXSTS: TXFFLAG (Bit 0) */ +#define SPI_TXSTS_TXFFLAG_Msk (0x7UL) /*!< SPI TXSTS: TXFFLAG (Bitfield-Mask: 0x07) */ +#define SPI_TXSTS_TXFFLAG SPI_TXSTS_TXFFLAG_Msk +/* ========================================================= TXDAT ========================================================= */ +#define SPI_TXDAT_TXD_Pos (0UL) /*!< SPI TXDAT: TXD (Bit 0) */ +#define SPI_TXDAT_TXD_Msk (0xffUL) /*!< SPI TXDAT: TXD (Bitfield-Mask: 0xff) */ +#define SPI_TXDAT_TXD SPI_TXDAT_TXD_Msk +/* ========================================================= RXSTS ========================================================= */ +#define SPI_RXSTS_RXIF_Pos (15UL) /*!< SPI RXSTS: RXIF (Bit 15) */ +#define SPI_RXSTS_RXIF_Msk (0x8000UL) /*!< SPI RXSTS: RXIF (Bitfield-Mask: 0x01) */ +#define SPI_RXSTS_RXIF SPI_RXSTS_RXIF_Msk +#define SPI_RXSTS_RXIEN_Pos (14UL) /*!< SPI RXSTS: RXIEN (Bit 14) */ +#define SPI_RXSTS_RXIEN_Msk (0x4000UL) /*!< SPI RXSTS: RXIEN (Bitfield-Mask: 0x01) */ +#define SPI_RXSTS_RXIEN SPI_RXSTS_RXIEN_Msk +#define SPI_RXSTS_RXFULL_Pos (9UL) /*!< SPI RXSTS: RXFULL (Bit 9) */ +#define SPI_RXSTS_RXFULL_Msk (0x200UL) /*!< SPI RXSTS: RXFULL (Bitfield-Mask: 0x01) */ +#define SPI_RXSTS_RXFULL SPI_RXSTS_RXFULL_Msk +#define SPI_RXSTS_RXFOV_Pos (8UL) /*!< SPI RXSTS: RXFOV (Bit 8) */ +#define SPI_RXSTS_RXFOV_Msk (0x100UL) /*!< SPI RXSTS: RXFOV (Bitfield-Mask: 0x01) */ +#define SPI_RXSTS_RXFOV SPI_RXSTS_RXFOV_Msk +#define SPI_RXSTS_RXFLEV_Pos (4UL) /*!< SPI RXSTS: RXFLEV (Bit 4) */ +#define SPI_RXSTS_RXFLEV_Msk (0x70UL) /*!< SPI RXSTS: RXFLEV (Bitfield-Mask: 0x07) */ +#define SPI_RXSTS_RXFLEV SPI_RXSTS_RXFLEV_Msk +#define SPI_RXSTS_RXFFLAG_Pos (0UL) /*!< SPI RXSTS: RXFFLAG (Bit 0) */ +#define SPI_RXSTS_RXFFLAG_Msk (0x7UL) /*!< SPI RXSTS: RXFFLAG (Bitfield-Mask: 0x07) */ +#define SPI_RXSTS_RXFFLAG SPI_RXSTS_RXFFLAG_Msk +/* ========================================================= RXDAT ========================================================= */ +#define SPI_RXDAT_RXD_Pos (0UL) /*!< SPI RXDAT: RXD (Bit 0) */ +#define SPI_RXDAT_RXD_Msk (0xffUL) /*!< SPI RXDAT: RXD (Bitfield-Mask: 0xff) */ +#define SPI_RXDAT_RXD SPI_RXDAT_RXD_Msk +/* ========================================================= MISC ========================================================== */ +#define SPI_MISC_OVER_Pos (9UL) /*!< SPI MISC: OVER (Bit 9) */ +#define SPI_MISC_OVER_Msk (0x200UL) /*!< SPI MISC: OVER (Bitfield-Mask: 0x01) */ +#define SPI_MISC_OVER SPI_MISC_OVER_Msk +#define SPI_MISC_SMART_Pos (8UL) /*!< SPI MISC: SMART (Bit 8) */ +#define SPI_MISC_SMART_Msk (0x100UL) /*!< SPI MISC: SMART (Bitfield-Mask: 0x01) */ +#define SPI_MISC_SMART SPI_MISC_SMART_Msk +#define SPI_MISC_BSY_Pos (4UL) /*!< SPI MISC: BSY (Bit 4) */ +#define SPI_MISC_BSY_Msk (0x10UL) /*!< SPI MISC: BSY (Bitfield-Mask: 0x01) */ +#define SPI_MISC_BSY SPI_MISC_BSY_Msk +#define SPI_MISC_RFF_Pos (3UL) /*!< SPI MISC: RFF (Bit 3) */ +#define SPI_MISC_RFF_Msk (0x8UL) /*!< SPI MISC: RFF (Bitfield-Mask: 0x01) */ +#define SPI_MISC_RFF SPI_MISC_RFF_Msk +#define SPI_MISC_RNE_Pos (2UL) /*!< SPI MISC: RNE (Bit 2) */ +#define SPI_MISC_RNE_Msk (0x4UL) /*!< SPI MISC: RNE (Bitfield-Mask: 0x01) */ +#define SPI_MISC_RNE SPI_MISC_RNE_Msk +#define SPI_MISC_TNF_Pos (1UL) /*!< SPI MISC: TNF (Bit 1) */ +#define SPI_MISC_TNF_Msk (0x2UL) /*!< SPI MISC: TNF (Bitfield-Mask: 0x01) */ +#define SPI_MISC_TNF SPI_MISC_TNF_Msk +#define SPI_MISC_TFE_Pos (0UL) /*!< SPI MISC: TFE (Bit 0) */ +#define SPI_MISC_TFE_Msk (0x1UL) /*!< SPI MISC: TFE (Bitfield-Mask: 0x01) */ +#define SPI_MISC_TFE SPI_MISC_TFE_Msk + + +/* =========================================================================================================================== */ +/* ================ TMR ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CTRL ========================================================== */ +#define TMR_CTRL_INTEN_Pos (3UL) /*!< TMR CTRL: INTEN (Bit 3) */ +#define TMR_CTRL_INTEN_Msk (0x8UL) /*!< TMR CTRL: INTEN (Bitfield-Mask: 0x01) */ +#define TMR_CTRL_INTEN TMR_CTRL_INTEN_Msk +#define TMR_CTRL_EXTCLK_Pos (2UL) /*!< TMR CTRL: EXTCLK (Bit 2) */ +#define TMR_CTRL_EXTCLK_Msk (0x4UL) /*!< TMR CTRL: EXTCLK (Bitfield-Mask: 0x01) */ +#define TMR_CTRL_EXTCLK TMR_CTRL_EXTCLK_Msk +#define TMR_CTRL_EXTEN_Pos (1UL) /*!< TMR CTRL: EXTEN (Bit 1) */ +#define TMR_CTRL_EXTEN_Msk (0x2UL) /*!< TMR CTRL: EXTEN (Bitfield-Mask: 0x01) */ +#define TMR_CTRL_EXTEN TMR_CTRL_EXTEN_Msk +#define TMR_CTRL_EN_Pos (0UL) /*!< TMR CTRL: EN (Bit 0) */ +#define TMR_CTRL_EN_Msk (0x1UL) /*!< TMR CTRL: EN (Bitfield-Mask: 0x01) */ +#define TMR_CTRL_EN TMR_CTRL_EN_Msk +/* ========================================================= VALUE ========================================================= */ +#define TMR_VALUE_VALUE_Pos (0UL) /*!< TMR VALUE: VALUE (Bit 0) */ +#define TMR_VALUE_VALUE_Msk (0xffffffffUL) /*!< TMR VALUE: VALUE (Bitfield-Mask: 0xffffffff) */ +#define TMR_VALUE_VALUE TMR_VALUE_VALUE_Msk +/* ======================================================== RELOAD ========================================================= */ +#define TMR_RELOAD_RELOAD_Pos (0UL) /*!< TMR RELOAD: RELOAD (Bit 0) */ +#define TMR_RELOAD_RELOAD_Msk (0xffffffffUL) /*!< TMR RELOAD: RELOAD (Bitfield-Mask: 0xffffffff) */ +#define TMR_RELOAD_RELOAD TMR_RELOAD_RELOAD_Msk +/* ======================================================== INTSTS ========================================================= */ +#define TMR_INTSTS_INTSTS_Pos (0UL) /*!< TMR INTSTS: INTSTS (Bit 0) */ +#define TMR_INTSTS_INTSTS_Msk (0x1UL) /*!< TMR INTSTS: INTSTS (Bitfield-Mask: 0x01) */ +#define TMR_INTSTS_INTSTS TMR_INTSTS_INTSTS_Msk + + +/* =========================================================================================================================== */ +/* ================ UART ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= DATA ========================================================== */ +#define UART_DATA_DATA_Pos (0UL) /*!< UART DATA: DATA (Bit 0) */ +#define UART_DATA_DATA_Msk (0xffUL) /*!< UART DATA: DATA (Bitfield-Mask: 0xff) */ +#define UART_DATA_DATA UART_DATA_DATA_Msk +/* ========================================================= STATE ========================================================= */ +#define UART_STATE_DMATXDONE_Pos (7UL) /*!< UART STATE: DMATXDONE (Bit 7) */ +#define UART_STATE_DMATXDONE_Msk (0x80UL) /*!< UART STATE: DMATXDONE (Bitfield-Mask: 0x01) */ +#define UART_STATE_DMATXDONE UART_STATE_DMATXDONE_Msk +#define UART_STATE_RXPSTS_Pos (6UL) /*!< UART STATE: RXPSTS (Bit 6) */ +#define UART_STATE_RXPSTS_Msk (0x40UL) /*!< UART STATE: RXPSTS (Bitfield-Mask: 0x01) */ +#define UART_STATE_RXPSTS UART_STATE_RXPSTS_Msk +#define UART_STATE_TXDONE_Pos (5UL) /*!< UART STATE: TXDONE (Bit 5) */ +#define UART_STATE_TXDONE_Msk (0x20UL) /*!< UART STATE: TXDONE (Bitfield-Mask: 0x01) */ +#define UART_STATE_TXDONE UART_STATE_TXDONE_Msk +#define UART_STATE_RXPE_Pos (4UL) /*!< UART STATE: RXPE (Bit 4) */ +#define UART_STATE_RXPE_Msk (0x10UL) /*!< UART STATE: RXPE (Bitfield-Mask: 0x01) */ +#define UART_STATE_RXPE UART_STATE_RXPE_Msk +#define UART_STATE_RXOV_Pos (3UL) /*!< UART STATE: RXOV (Bit 3) */ +#define UART_STATE_RXOV_Msk (0x8UL) /*!< UART STATE: RXOV (Bitfield-Mask: 0x01) */ +#define UART_STATE_RXOV UART_STATE_RXOV_Msk +#define UART_STATE_TXOV_Pos (2UL) /*!< UART STATE: TXOV (Bit 2) */ +#define UART_STATE_TXOV_Msk (0x4UL) /*!< UART STATE: TXOV (Bitfield-Mask: 0x01) */ +#define UART_STATE_TXOV UART_STATE_TXOV_Msk +#define UART_STATE_RXFULL_Pos (1UL) /*!< UART STATE: RXFULL (Bit 1) */ +#define UART_STATE_RXFULL_Msk (0x2UL) /*!< UART STATE: RXFULL (Bitfield-Mask: 0x01) */ +#define UART_STATE_RXFULL UART_STATE_RXFULL_Msk +/* ========================================================= CTRL ========================================================== */ +#define UART_CTRL_TXDONEIE_Pos (8UL) /*!< UART CTRL: TXDONEIE (Bit 8) */ +#define UART_CTRL_TXDONEIE_Msk (0x100UL) /*!< UART CTRL: TXDONEIE (Bitfield-Mask: 0x01) */ +#define UART_CTRL_TXDONEIE UART_CTRL_TXDONEIE_Msk +#define UART_CTRL_RXPEIE_Pos (7UL) /*!< UART CTRL: RXPEIE (Bit 7) */ +#define UART_CTRL_RXPEIE_Msk (0x80UL) /*!< UART CTRL: RXPEIE (Bitfield-Mask: 0x01) */ +#define UART_CTRL_RXPEIE UART_CTRL_RXPEIE_Msk +#define UART_CTRL_RXOVIE_Pos (5UL) /*!< UART CTRL: RXOVIE (Bit 5) */ +#define UART_CTRL_RXOVIE_Msk (0x20UL) /*!< UART CTRL: RXOVIE (Bitfield-Mask: 0x01) */ +#define UART_CTRL_RXOVIE UART_CTRL_RXOVIE_Msk +#define UART_CTRL_TXOVIE_Pos (4UL) /*!< UART CTRL: TXOVIE (Bit 4) */ +#define UART_CTRL_TXOVIE_Msk (0x10UL) /*!< UART CTRL: TXOVIE (Bitfield-Mask: 0x01) */ +#define UART_CTRL_TXOVIE UART_CTRL_TXOVIE_Msk +#define UART_CTRL_RXIE_Pos (3UL) /*!< UART CTRL: RXIE (Bit 3) */ +#define UART_CTRL_RXIE_Msk (0x8UL) /*!< UART CTRL: RXIE (Bitfield-Mask: 0x01) */ +#define UART_CTRL_RXIE UART_CTRL_RXIE_Msk +#define UART_CTRL_RXEN_Pos (1UL) /*!< UART CTRL: RXEN (Bit 1) */ +#define UART_CTRL_RXEN_Msk (0x2UL) /*!< UART CTRL: RXEN (Bitfield-Mask: 0x01) */ +#define UART_CTRL_RXEN UART_CTRL_RXEN_Msk +#define UART_CTRL_TXEN_Pos (0UL) /*!< UART CTRL: TXEN (Bit 0) */ +#define UART_CTRL_TXEN_Msk (0x1UL) /*!< UART CTRL: TXEN (Bitfield-Mask: 0x01) */ +#define UART_CTRL_TXEN UART_CTRL_TXEN_Msk +/* ======================================================== INTSTS ========================================================= */ +#define UART_INTSTS_TXDONEIF_Pos (5UL) /*!< UART INTSTS: TXDONEIF (Bit 5) */ +#define UART_INTSTS_TXDONEIF_Msk (0x20UL) /*!< UART INTSTS: TXDONEIF (Bitfield-Mask: 0x01) */ +#define UART_INTSTS_TXDONEIF UART_INTSTS_TXDONEIF_Msk +#define UART_INTSTS_RXPEIF_Pos (4UL) /*!< UART INTSTS: RXPEIF (Bit 4) */ +#define UART_INTSTS_RXPEIF_Msk (0x10UL) /*!< UART INTSTS: RXPEIF (Bitfield-Mask: 0x01) */ +#define UART_INTSTS_RXPEIF UART_INTSTS_RXPEIF_Msk +#define UART_INTSTS_RXOVIF_Pos (3UL) /*!< UART INTSTS: RXOVIF (Bit 3) */ +#define UART_INTSTS_RXOVIF_Msk (0x8UL) /*!< UART INTSTS: RXOVIF (Bitfield-Mask: 0x01) */ +#define UART_INTSTS_RXOVIF UART_INTSTS_RXOVIF_Msk +#define UART_INTSTS_TXOVIF_Pos (2UL) /*!< UART INTSTS: TXOVIF (Bit 2) */ +#define UART_INTSTS_TXOVIF_Msk (0x4UL) /*!< UART INTSTS: TXOVIF (Bitfield-Mask: 0x01) */ +#define UART_INTSTS_TXOVIF UART_INTSTS_TXOVIF_Msk +#define UART_INTSTS_RXIF_Pos (1UL) /*!< UART INTSTS: RXIF (Bit 1) */ +#define UART_INTSTS_RXIF_Msk (0x2UL) /*!< UART INTSTS: RXIF (Bitfield-Mask: 0x01) */ +#define UART_INTSTS_RXIF UART_INTSTS_RXIF_Msk +/* ======================================================== BAUDDIV ======================================================== */ +#define UART_BAUDDIV_BAUDDIV_Pos (0UL) /*!< UART BAUDDIV: BAUDDIV (Bit 0) */ +#define UART_BAUDDIV_BAUDDIV_Msk (0xfffffUL) /*!< UART BAUDDIV: BAUDDIV (Bitfield-Mask: 0xfffff) */ +#define UART_BAUDDIV_BAUDDIV UART_BAUDDIV_BAUDDIV_Msk +/* ========================================================= CTRL2 ========================================================= */ +#define UART_CTRL2_PMODE_Pos (1UL) /*!< UART CTRL2: PMODE (Bit 1) */ +#define UART_CTRL2_PMODE_Msk (0xeUL) /*!< UART CTRL2: PMODE (Bitfield-Mask: 0x07) */ +#define UART_CTRL2_PMODE UART_CTRL2_PMODE_Msk +#define UART_CTRL2_MSB_Pos (0UL) /*!< UART CTRL2: MSB (Bit 0) */ +#define UART_CTRL2_MSB_Msk (0x1UL) /*!< UART CTRL2: MSB (Bitfield-Mask: 0x01) */ +#define UART_CTRL2_MSB UART_CTRL2_MSB_Msk + + +/* =========================================================================================================================== */ +/* ================ U32K ================ */ +/* =========================================================================================================================== */ + +/* ========================================================= CTRL0 ========================================================= */ +#define U32K_CTRL0_WKUMODE_Pos (8UL) /*!< U32K CTRL0: WKUMODE (Bit 8) */ +#define U32K_CTRL0_WKUMODE_Msk (0x100UL) /*!< U32K CTRL0: WKUMODE (Bitfield-Mask: 0x01) */ +#define U32K_CTRL0_WKUMODE U32K_CTRL0_WKUMODE_Msk +#define U32K_CTRL0_DEBSEL_Pos (6UL) /*!< U32K CTRL0: DEBSEL (Bit 6) */ +#define U32K_CTRL0_DEBSEL_Msk (0xc0UL) /*!< U32K CTRL0: DEBSEL (Bitfield-Mask: 0x03) */ +#define U32K_CTRL0_DEBSEL U32K_CTRL0_DEBSEL_Msk +#define U32K_CTRL0_PMODE_Pos (3UL) /*!< U32K CTRL0: PMODE (Bit 3) */ +#define U32K_CTRL0_PMODE_Msk (0x38UL) /*!< U32K CTRL0: PMODE (Bitfield-Mask: 0x07) */ +#define U32K_CTRL0_PMODE U32K_CTRL0_PMODE_Msk +#define U32K_CTRL0_MSB_Pos (2UL) /*!< U32K CTRL0: MSB (Bit 2) */ +#define U32K_CTRL0_MSB_Msk (0x4UL) /*!< U32K CTRL0: MSB (Bitfield-Mask: 0x01) */ +#define U32K_CTRL0_MSB U32K_CTRL0_MSB_Msk +#define U32K_CTRL0_ACOFF_Pos (1UL) /*!< U32K CTRL0: ACOFF (Bit 1) */ +#define U32K_CTRL0_ACOFF_Msk (0x2UL) /*!< U32K CTRL0: ACOFF (Bitfield-Mask: 0x01) */ +#define U32K_CTRL0_ACOFF U32K_CTRL0_ACOFF_Msk +#define U32K_CTRL0_EN_Pos (0UL) /*!< U32K CTRL0: EN (Bit 0) */ +#define U32K_CTRL0_EN_Msk (0x1UL) /*!< U32K CTRL0: EN (Bitfield-Mask: 0x01) */ +#define U32K_CTRL0_EN U32K_CTRL0_EN_Msk +/* ========================================================= CTRL1 ========================================================= */ +#define U32K_CTRL1_RXSEL_Pos (4UL) /*!< U32K CTRL1: RXSEL (Bit 4) */ +#define U32K_CTRL1_RXSEL_Msk (0x30UL) /*!< U32K CTRL1: RXSEL (Bitfield-Mask: 0x03) */ +#define U32K_CTRL1_RXSEL U32K_CTRL1_RXSEL_Msk +#define U32K_CTRL1_RXOVIE_Pos (2UL) /*!< U32K CTRL1: RXOVIE (Bit 2) */ +#define U32K_CTRL1_RXOVIE_Msk (0x4UL) /*!< U32K CTRL1: RXOVIE (Bitfield-Mask: 0x01) */ +#define U32K_CTRL1_RXOVIE U32K_CTRL1_RXOVIE_Msk +#define U32K_CTRL1_RXPEIE_Pos (1UL) /*!< U32K CTRL1: RXPEIE (Bit 1) */ +#define U32K_CTRL1_RXPEIE_Msk (0x2UL) /*!< U32K CTRL1: RXPEIE (Bitfield-Mask: 0x01) */ +#define U32K_CTRL1_RXPEIE U32K_CTRL1_RXPEIE_Msk +#define U32K_CTRL1_RXIE_Pos (0UL) /*!< U32K CTRL1: RXIE (Bit 0) */ +#define U32K_CTRL1_RXIE_Msk (0x1UL) /*!< U32K CTRL1: RXIE (Bitfield-Mask: 0x01) */ +#define U32K_CTRL1_RXIE U32K_CTRL1_RXIE_Msk +/* ======================================================== BAUDDIV ======================================================== */ +#define U32K_BAUDDIV_BAUDDIV_Pos (0UL) /*!< U32K BAUDDIV: BAUDDIV (Bit 0) */ +#define U32K_BAUDDIV_BAUDDIV_Msk (0xffffUL) /*!< U32K BAUDDIV: BAUDDIV (Bitfield-Mask: 0xffff) */ +#define U32K_BAUDDIV_BAUDDIV U32K_BAUDDIV_BAUDDIV_Msk +/* ========================================================= DATA ========================================================== */ +#define U32K_DATA_DATA_Pos (0UL) /*!< U32K DATA: DATA (Bit 0) */ +#define U32K_DATA_DATA_Msk (0xffUL) /*!< U32K DATA: DATA (Bitfield-Mask: 0xff) */ +#define U32K_DATA_DATA U32K_DATA_DATA_Msk +/* ========================================================== STS ========================================================== */ +#define U32K_STS_RXOV_Pos (2UL) /*!< U32K STS: RXOV (Bit 2) */ +#define U32K_STS_RXOV_Msk (0x4UL) /*!< U32K STS: RXOV (Bitfield-Mask: 0x01) */ +#define U32K_STS_RXOV U32K_STS_RXOV_Msk +#define U32K_STS_RXPE_Pos (1UL) /*!< U32K STS: RXPE (Bit 1) */ +#define U32K_STS_RXPE_Msk (0x2UL) /*!< U32K STS: RXPE (Bitfield-Mask: 0x01) */ +#define U32K_STS_RXPE U32K_STS_RXPE_Msk +#define U32K_STS_RXIF_Pos (0UL) /*!< U32K STS: RXIF (Bit 0) */ +#define U32K_STS_RXIF_Msk (0x1UL) /*!< U32K STS: RXIF (Bitfield-Mask: 0x01) */ +#define U32K_STS_RXIF U32K_STS_RXIF_Msk + +/** @} */ /* End of group PosMask_peripherals */ +#include "system_target.h" /*!< target System */ + + +#ifdef __cplusplus +} +#endif + +#endif /* TARGET_H */ + + +/** @} */ /* End of group target */ + +/** @} */ /* End of group Vango */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/type_def.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/type_def.h new file mode 100644 index 0000000000..eea44ff4e6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/CMSIS/include/type_def.h @@ -0,0 +1,120 @@ +/** + ****************************************************************************** + * @file type_def.h + * @author Application Team + * @version V4.4.0 + * @date 2018-09-27 + * @brief Typedef file + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __TYPE_DEF_H +#define __TYPE_DEF_H + +#define ENABLE 1 +#define DISABLE 0 +#define IS_FUNCTIONAL_STATE(__STATE__) (((__STATE__) == DISABLE) || ((__STATE__) == ENABLE)) + +#define BIT_BAND(addr, bitnum) *((volatile unsigned long *)((((uint32_t)addr) & 0xF0000000) + \ + 0x2000000 + ((((uint32_t)addr) & 0xFFFFF) << 5) + (bitnum << 2))) + +#define BIT0 0x00000001 +#define BIT1 0x00000002 +#define BIT2 0x00000004 +#define BIT3 0x00000008 +#define BIT4 0x00000010 +#define BIT5 0x00000020 +#define BIT6 0x00000040 +#define BIT7 0x00000080 +#define BIT8 0x00000100 +#define BIT9 0x00000200 +#define BIT10 0x00000400 +#define BIT11 0x00000800 +#define BIT12 0x00001000 +#define BIT13 0x00002000 +#define BIT14 0x00004000 +#define BIT15 0x00008000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +/*---------- EWARM ----------*/ +#ifdef __ICCARM__ + #define __RAM_FUNC __ramfunc + #define __IN_RAMSECTION + + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ + + #define __NOINLINE _Pragma("optimize = no_inline") + +#endif + +/*---------- MDK-ARM ----------*/ +#ifdef __CC_ARM + #define __RAM_FUNC __attribute__((used)) + #define __IN_RAMSECTION + + #ifndef __ALIGN_END + #define __ALIGN_END + #endif /* __ALIGN_END */ + + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN __align(4) + #endif /* __ALIGN_BEGIN */ + + #define __NOINLINE __attribute__ ( (noinline) ) + +#endif + +/*---------- GCC ----------*/ +#ifdef __GNUC__ + #define __RAM_FUNC + #define __IN_RAMSECTION __attribute__((section(".ram_exec"))) + + #ifndef __weak + #define __weak __attribute__((weak)) + #endif /* __weak */ + #ifndef __packed + #define __packed __attribute__((__packed__)) + #endif /* __packed */ + + #ifndef __ALIGN_END + #define __ALIGN_END __attribute__ ((aligned (4))) + #endif /* __ALIGN_END */ + #ifndef __ALIGN_BEGIN + #define __ALIGN_BEGIN + #endif /* __ALIGN_BEGIN */ + + #define __NOINLINE __attribute__ ( (noinline) ) + +#endif + + + + + +#endif /* __TYPE_DEF_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target_noload.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target_noload.S new file mode 100644 index 0000000000..8907a4889b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/ECLIPSE/startup_target_noload.S @@ -0,0 +1,477 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.0.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 0 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target.s new file mode 100644 index 0000000000..9591a3eb22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 1 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target_noload.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target_noload.s new file mode 100644 index 0000000000..cc2b6afbae --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/startup_target_noload.s @@ -0,0 +1,499 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 0 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target_noload.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target_noload.s new file mode 100644 index 0000000000..c0dfe70792 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARM/startup_target_noload.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 0 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target_noload.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target_noload.s new file mode 100644 index 0000000000..7f30d1f481 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Config/MDK-ARMv4/startup_target_noload.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 0 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc.h new file mode 100644 index 0000000000..ed2aea1469 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc.h @@ -0,0 +1,313 @@ +/** + ****************************************************************************** + * @file lib_adc.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ADC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_ADC_H +#define __LIB_ADC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t Mode; + uint32_t ClockSource; + uint32_t ClockFrq; + uint32_t SkipSample; + uint32_t AverageSample; + uint32_t TriggerSource; + uint32_t Channel; + uint32_t ResDivEnable; + uint32_t AverageEnable; +} ADC_InitType; + +typedef struct +{ + uint32_t THDChannel; + uint8_t UpperTHD; + uint8_t LowerTHD; + uint32_t TriggerSel; + uint32_t THDSource; +} ADCTHD_InitType; + +/* Exported constants --------------------------------------------------------*/ + + +//Mode +#define ADC_MODE_DC (0UL) +#define ADC_MODE_AC (1UL) +#define ADC_MODE_TEMP (2UL) +#define IS_ADC_MODE(__MODE__) (((__MODE__) == ADC_MODE_DC) ||\ + ((__MODE__) == ADC_MODE_AC) ||\ + ((__MODE__) == ADC_MODE_TEMP)) +//ClockSource +#define ADC_CLKSRC_RCH (0) +#define ADC_CLKSRC_PLLL ANA_ADCCTRL0_CLKSRCSEL +#define IS_ADC_CLKSRC(__CLKSRC__) (((__CLKSRC__) == ADC_CLKSRC_RCH) ||\ + ((__CLKSRC__) == ADC_CLKSRC_PLLL)) +//ClockFrq +#define ADC_CLKFRQ_HIGH (0UL) +#define ADC_CLKFRQ_LOW (1UL) +#define IS_ADC_CLKFRQ(__CLKFRQ__) (((__CLKFRQ__) == ADC_CLKFRQ_HIGH) ||\ + ((__CLKFRQ__) == ADC_CLKFRQ_LOW)) +//SkipSample +#define ADC_SKIP_0 (0x0UL << RTC_ADCMACTL_SKIP_SAMPLE_Pos) +#define ADC_SKIP_4 (0x4UL << RTC_ADCMACTL_SKIP_SAMPLE_Pos) +#define ADC_SKIP_8 (0x8UL << RTC_ADCMACTL_SKIP_SAMPLE_Pos) +#define ADC_SKIP_12 (0xCUL << RTC_ADCMACTL_SKIP_SAMPLE_Pos) +#define IS_ADC_SKIP(__SKIP__) (((__SKIP__) == ADC_SKIP_0) ||\ + ((__SKIP__) == ADC_SKIP_4) ||\ + ((__SKIP__) == ADC_SKIP_8) ||\ + ((__SKIP__) == ADC_SKIP_12)) +//AverageSample +#define ADC_AVERAGE_2 (0x0UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define ADC_AVERAGE_4 (0x1UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define ADC_AVERAGE_8 (0x2UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define ADC_AVERAGE_16 (0x3UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define ADC_AVERAGE_32 (0x4UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define ADC_AVERAGE_64 (0x5UL << RTC_ADCMACTL_AVERAGE_SAMPLE_Pos) +#define IS_ADC_AVERAG(__AVERAG__) (((__AVERAG__) == ADC_AVERAGE_2) ||\ + ((__AVERAG__) == ADC_AVERAGE_4) ||\ + ((__AVERAG__) == ADC_AVERAGE_8) ||\ + ((__AVERAG__) == ADC_AVERAGE_16) ||\ + ((__AVERAG__) == ADC_AVERAGE_32) ||\ + ((__AVERAG__) == ADC_AVERAGE_64)) +//TriggerSource +#define ADC_TRIGSOURCE_OFF (0x0UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_ITVSITV (0x1UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_WKUSEC (0x2UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_ALARM (0x3UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_TMR0 (0x4UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_TMR1 (0x5UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_TMR2 (0x6UL << ANA_ADCCTRL0_AEN_Pos) +#define ADC_TRIGSOURCE_TMR3 (0x7UL << ANA_ADCCTRL0_AEN_Pos) +#define IS_ADC_TRIGSOURCE(__TRIGSOURCE__) (((__TRIGSOURCE__) == ADC_TRIGSOURCE_OFF) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_ITVSITV) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_WKUSEC) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_ALARM) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TMR0) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TMR1) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TMR2) ||\ + ((__TRIGSOURCE__) == ADC_TRIGSOURCE_TMR3)) +//Channel +#define ADC_CHANNEL_NONE (0 << 0UL) +#define ADC_CHANNEL_GND0 (1 << 0UL) +#define ADC_CHANNEL_BAT1 (1 << 1UL) +#define ADC_CHANNEL_BATRTC (1 << 2UL) +#define ADC_CHANNEL_CH3 (1 << 3UL) +#define ADC_CHANNEL_CH4 (1 << 4UL) +#define ADC_CHANNEL_CH5 (1 << 5UL) +#define ADC_CHANNEL_CH6 (1 << 6UL) +#define ADC_CHANNEL_CH7 (1 << 7UL) +#define ADC_CHANNEL_CH8 (1 << 8UL) +#define ADC_CHANNEL_CH9 (1 << 9UL) +#define ADC_CHANNEL_TEMP (1 << 10UL) +#define ADC_CHANNEL_CH11 (1 << 11UL) +#define ADC_CHANNEL_DVCC (1 << 12UL) +#define ADC_CHANNEL_GND13 (1 << 13UL) +#define ADC_CHANNEL_GND14 (1 << 14UL) +#define ADC_CHANNEL_GND15 (1 << 15UL) +#define ADC_CHANNEL_DC_Msk (0xFBFFUL) +#define ADC_CHANNEL_DC_ALL ADC_CHANNEL_DC_Msk +#define ADC_CHANNEL_AC_Msk (0x0BF8UL) +#define ADC_CHANNEL_AC_ALL ADC_CHANNEL_AC_Msk +#define IS_ADC_CHANNEL_GETDATA(__CHANNEL__) (((__CHANNEL__) == ADC_CHANNEL_GND0) ||\ + ((__CHANNEL__) == ADC_CHANNEL_BAT1) ||\ + ((__CHANNEL__) == ADC_CHANNEL_BATRTC) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH3) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH4) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH5) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH6) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH7) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH8) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH9) ||\ + ((__CHANNEL__) == ADC_CHANNEL_TEMP) ||\ + ((__CHANNEL__) == ADC_CHANNEL_CH11) ||\ + ((__CHANNEL__) == ADC_CHANNEL_DVCC) ||\ + ((__CHANNEL__) == ADC_CHANNEL_GND13) ||\ + ((__CHANNEL__) == ADC_CHANNEL_GND14) ||\ + ((__CHANNEL__) == ADC_CHANNEL_GND15)) +#define IS_ADC_CHANNEL_AC(__CHANNEL__) ((((__CHANNEL__) & ADC_CHANNEL_AC_Msk) != 0UL) &&\ + (((__CHANNEL__) & ~ADC_CHANNEL_AC_Msk) == 0UL)) +#define IS_ADC_CHANNEL_DC(__CHANNEL__) ((((__CHANNEL__) & ADC_CHANNEL_DC_Msk) != 0UL) &&\ + (((__CHANNEL__) & ~ADC_CHANNEL_DC_Msk) == 0UL)) +#define IS_ADC_CHANNEL_TEMP(__CHANNEL__) ((__CHANNEL__) == ADC_CHANNEL_TEMP) +#define IS_ADC_CHANNEL_EN_DC(__CHANNEL__) (((((__CHANNEL__) & ADC_CHANNEL_DC_Msk) != 0UL) && (((__CHANNEL__) & ~ADC_CHANNEL_DC_Msk) == 0UL)) ||\ + ((__CHANNEL__) == ADC_CHANNEL_NONE)) +#define IS_ADC_CHANNEL_EN_AC(__CHANNEL__) (((((__CHANNEL__) & ADC_CHANNEL_AC_Msk) != 0UL) && (((__CHANNEL__) & ~ADC_CHANNEL_AC_Msk) == 0UL)) ||\ + ((__CHANNEL__) == ADC_CHANNEL_NONE)) + +#define ADC_CHANNEL_Pos (0UL) +#define ADC_CHANNEL_SHIFT (ANA_ADCCTRL2_SCAN_CHx_Pos - ADC_CHANNEL_Pos) +#define ADC_AVERAGECH_SHIFT (RTC_ADCMACTL_AVERAGE_CHx_Pos - ADC_CHANNEL_Pos) +#define ADC_RESDIVCH_SHIFT (ANA_ADCCTRL1_RESDIV_CHx_Pos - ADC_CHANNEL_Pos) + +//THDChannel +#define ADC_THDCHANNEL0 (0UL) +#define ADC_THDCHANNEL1 (1UL) +#define ADC_THDCHANNEL2 (2UL) +#define ADC_THDCHANNEL3 (3UL) +#define IS_ADC_THDCHANNEL(THDCHANNEL) (((THDCHANNEL) == ADC_THDCHANNEL0) ||\ + ((THDCHANNEL) == ADC_THDCHANNEL1) ||\ + ((THDCHANNEL) == ADC_THDCHANNEL2) ||\ + ((THDCHANNEL) == ADC_THDCHANNEL3)) + +//TriggerSel +#define ADC_THDSEL_HIGH (0UL) +#define ADC_THDSEL_RISING (1UL) +#define ADC_THDSEL_FALLING (2UL) +#define ADC_THDSEL_BOTH (3UL) +#define IS_ADC_THDSEL(__THDSEL__) (((__THDSEL__) == ADC_THDSEL_HIGH) ||\ + ((__THDSEL__) == ADC_THDSEL_RISING) ||\ + ((__THDSEL__) == ADC_THDSEL_FALLING) ||\ + ((__THDSEL__) == ADC_THDSEL_BOTH)) + +//INTMask +#define ADC_INT_UPPER_TH3 ANA_INTEN_INTEN21 +#define ADC_INT_LOWER_TH3 ANA_INTEN_INTEN20 +#define ADC_INT_UPPER_TH2 ANA_INTEN_INTEN19 +#define ADC_INT_LOWER_TH2 ANA_INTEN_INTEN18 +#define ADC_INT_UPPER_TH1 ANA_INTEN_INTEN17 +#define ADC_INT_LOWER_TH1 ANA_INTEN_INTEN16 +#define ADC_INT_UPPER_TH0 ANA_INTEN_INTEN15 +#define ADC_INT_LOWER_TH0 ANA_INTEN_INTEN14 +#define ADC_INT_AUTODONE ANA_INTEN_INTEN1 +#define ADC_INT_MANUALDONE ANA_INTEN_INTEN0 +#define ADC_INT_Msk (0x3FC003UL) +#define IS_ADC_INT(__INT__) ((((__INT__) & ADC_INT_Msk) != 0UL) &&\ + (((__INT__) & ~ADC_INT_Msk) == 0UL)) + +//INTSTS +#define ADC_INTSTS_UPPER_TH3 ANA_INTSTS_INTSTS21 +#define ADC_INTSTS_LOWER_TH3 ANA_INTSTS_INTSTS20 +#define ADC_INTSTS_UPPER_TH2 ANA_INTSTS_INTSTS19 +#define ADC_INTSTS_LOWER_TH2 ANA_INTSTS_INTSTS18 +#define ADC_INTSTS_UPPER_TH1 ANA_INTSTS_INTSTS17 +#define ADC_INTSTS_LOWER_TH1 ANA_INTSTS_INTSTS16 +#define ADC_INTSTS_UPPER_TH0 ANA_INTSTS_INTSTS15 +#define ADC_INTSTS_LOWER_TH0 ANA_INTSTS_INTSTS14 +#define ADC_INTSTS_AUTODONE ANA_INTSTS_INTSTS1 +#define ADC_INTSTS_MANUALDONE ANA_INTSTS_INTSTS0 +#define ADC_INTSTS_Msk (0x3FC003UL) +#define IS_ADC_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & ADC_INTSTS_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~ADC_INTSTS_Msk) == 0U)) + +#define IS_ADC_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == ADC_INTSTS_UPPER_TH3) ||\ + ((__INTFLAGR__) == ADC_INTSTS_LOWER_TH3) ||\ + ((__INTFLAGR__) == ADC_INTSTS_UPPER_TH2) ||\ + ((__INTFLAGR__) == ADC_INTSTS_LOWER_TH2) ||\ + ((__INTFLAGR__) == ADC_INTSTS_UPPER_TH1) ||\ + ((__INTFLAGR__) == ADC_INTSTS_LOWER_TH1) ||\ + ((__INTFLAGR__) == ADC_INTSTS_UPPER_TH0) ||\ + ((__INTFLAGR__) == ADC_INTSTS_LOWER_TH0) ||\ + ((__INTFLAGR__) == ADC_INTSTS_AUTODONE) ||\ + ((__INTFLAGR__) == ADC_INTSTS_MANUALDONE)) + +#define ADC_FLAG_CONV_ERR (0x1U << ANA_ADCCTRL2_CONV_ERR_Pos) +#define ADC_FLAG_CAL_ERR (0x1U << ANA_ADCCTRL2_CAL_ERR_Pos) +#define ADC_FLAG_CAL_DONE (0x1U << ANA_ADCCTRL2_ADC_CAL_DONE_Pos) +#define ADC_FLAG_BUSY (0x1U << ANA_ADCCTRL2_BUSY_Pos) +#define IS_ADC_ADCFLAG(__ADCFLAG__) (((__ADCFLAG__) == ADC_FLAG_CONV_ERR) ||\ + ((__ADCFLAG__) == ADC_FLAG_CAL_ERR) ||\ + ((__ADCFLAG__) == ADC_FLAG_CAL_DONE) ||\ + ((__ADCFLAG__) == ADC_FLAG_BUSY)) + +#define ADC_FLAG_RCMsk (ADC_FLAG_CONV_ERR|ADC_FLAG_CAL_ERR) +#define IS_ADC_ADCFLAGC(__ADCFLAG__) ((((__ADCFLAG__) & ADC_FLAG_RCMsk) != 0U) &&\ + (((__ADCFLAG__) & ~ADC_FLAG_RCMsk) == 0U)) + +//THDFlag +#define ADC_THDFLAG_UPPER3 (0x1U << ANA_ADCDATATHD_CH_UPPER_THD3_TRGED_Pos) +#define ADC_THDFLAG_LOWER3 (0x1U << ANA_ADCDATATHD_CH_LOWER_THD3_TRGED_Pos) +#define ADC_THDFLAG_UPPER2 (0x1U << ANA_ADCDATATHD_CH_UPPER_THD2_TRGED_Pos) +#define ADC_THDFLAG_LOWER2 (0x1U << ANA_ADCDATATHD_CH_LOWER_THD2_TRGED_Pos) +#define ADC_THDFLAG_UPPER1 (0x1U << ANA_ADCDATATHD_CH_UPPER_THD1_TRGED_Pos) +#define ADC_THDFLAG_LOWER1 (0x1U << ANA_ADCDATATHD_CH_LOWER_THD1_TRGED_Pos) +#define ADC_THDFLAG_UPPER0 (0x1U << ANA_ADCDATATHD_CH_UPPER_THD0_TRGED_Pos) +#define ADC_THDFLAG_LOWER0 (0x1U << ANA_ADCDATATHD_CH_LOWER_THD0_TRGED_Pos) +#define IS_ADC_THDFLAG(__THDFLAG__) (((__THDFLAG__) == ADC_THDFLAG_UPPER3) ||\ + ((__THDFLAG__) == ADC_THDFLAG_LOWER3) ||\ + ((__THDFLAG__) == ADC_THDFLAG_UPPER2) ||\ + ((__THDFLAG__) == ADC_THDFLAG_LOWER2) ||\ + ((__THDFLAG__) == ADC_THDFLAG_UPPER1) ||\ + ((__THDFLAG__) == ADC_THDFLAG_LOWER1) ||\ + ((__THDFLAG__) == ADC_THDFLAG_UPPER0) ||\ + ((__THDFLAG__) == ADC_THDFLAG_LOWER0)) + +#define IS_ADC_BATDIV(__BATDIV__) (((__BATDIV__) == ADC_BAT_CAPDIV) ||\ + ((__BATDIV__) == ADC_BAT_RESDIV)) + +/* ADC_GetVoltage */ +//Mode +#define ADC_3V_ADCCHx_NODIV (0x000UL) // Power supply: 3.3V; Channel: External; Divider modeL: None +#define ADC_3V_ADCCHx_RESDIV (0x001UL) // Power supply: 3.3V; Channel: External; Divider modeL: Resistive +#define ADC_3V_BAT1_RESDIV (0x002UL) // Power supply: 3.3V; Channel: VDD; Divider modeL: Resistive +#define ADC_3V_BATRTC_RESDIV (0x003UL) // Power supply: 3.3V; Channel: BATRTC; Divider modeL: Resistive +#define ADC_5V_ADCCHx_NODIV (0x100UL) // Power supply: 5V; Channel: External; Divider modeL: None +#define ADC_5V_ADCCHx_RESDIV (0x101UL) // Power supply: 5V; Channel: External; Divider modeL: Resistive +#define ADC_5V_BAT1_RESDIV (0x102UL) // Power supply: 5V; Channel: VDD; Divider modeL: Resistive +#define ADC_5V_BATRTC_RESDIV (0x103UL) // Power supply: 5V; Channel: BATRTC; Divider modeL: Resistive +#define ADC_TEMP (0x1000UL) // Temperature ; Channel: ADC_CHANNEL_TEMP +#define IS_ADCVOL_MODE(__MODE__) (((__MODE__) == ADC_3V_ADCCHx_NODIV) ||\ + ((__MODE__) == ADC_3V_ADCCHx_RESDIV) ||\ + ((__MODE__) == ADC_3V_BAT1_RESDIV) ||\ + ((__MODE__) == ADC_3V_BATRTC_RESDIV) ||\ + ((__MODE__) == ADC_5V_ADCCHx_NODIV) ||\ + ((__MODE__) == ADC_5V_ADCCHx_RESDIV) ||\ + ((__MODE__) == ADC_5V_BAT1_RESDIV) ||\ + ((__MODE__) == ADC_5V_BATRTC_RESDIV) ||\ + ((__MODE__) == ADC_TEMP)) + +/* Exported Functions ------------------------------------------------------- */ +/* ADC Exported Functions Group1: + (De)Initialization -------------------------*/ +uint32_t ADC_DeInit(void); +void ADC_StructInit(ADC_InitType* ADC_InitStruct); +void ADC_Init(ADC_InitType* ADC_InitStruct); +/* ADC Exported Functions Group2: + ADC Configuration --------------*/ +void ADC_THDInit(ADCTHD_InitType* ADC_THDStruct); +void ADC_THDStructInit(ADCTHD_InitType* ADC_THDStruct); +void ADC_Calibration(void); +/* ADC Exported Functions Group3: + Get NVR Info, Calculate datas --------------*/ +uint32_t ADC_CalculateValue(uint32_t Mode, int16_t adc_data, int16_t *value); +/* ADC Exported Functions Group4: + Interrupt (flag) ---------------------------*/ +int16_t ADC_GetADCConversionValue(uint32_t Channel); +void ADC_INTConfig(uint32_t INTMask, uint32_t NewState); +uint8_t ADC_GetFlag(uint32_t FlagMask); +void ADC_ClearFlag(uint32_t FlagMask); +uint8_t ADC_GetINTStatus(uint32_t INTMask); +void ADC_ClearINTStatus(uint32_t INTMask); +uint8_t ADC_GetTHDFlag(uint32_t THDFlagMask); + +/* ADC Exported Functions Group5: + MISC Configuration -------------------------*/ +void ADC_Cmd(uint32_t NewState); +void ADC_LowerTHDCmd(uint32_t THDChannel,uint32_t NewState); +void ADC_UpperTHDCmd(uint32_t THDChannel,uint32_t NewState); +void ADC_StartManual(void); +uint8_t ADC_WaitForManual(uint32_t Timeout); +uint8_t ADC_WaitForAuto(uint32_t Timeout); + +uint8_t ADC_SoftReset(ADC_InitType* ADC_InitStruct); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_ADC_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc_tiny.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc_tiny.h new file mode 100644 index 0000000000..7988ffb96f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_adc_tiny.h @@ -0,0 +1,81 @@ +/** + ****************************************************************************** + * @file lib_adc_tiny.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ADC_TINY library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_ADC_TINY_H +#define __LIB_ADC_TINY_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t SignalSel; + uint32_t ADTREF1; + uint32_t ADTREF2; + uint32_t ADTREF3; +} TADCInitType; + +//SelADT +#define ADCTINY_SIGNALSEL_IOE6 0 +#define ADCTINY_SIGNALSEL_IOE7 ANA_REGF_ADTSEL +#define IS_ADCTINY_SELADT(__SELADT__) (((__SELADT__) == ADCTINY_SIGNALSEL_IOE6) ||\ + ((__SELADT__) == ADCTINY_SIGNALSEL_IOE7)) + +//ADTREF1 +#define ADCTINY_REF1_0_9 0 +#define ADCTINY_REF1_0_7 ANA_REGF_ADTREF1SEL +#define IS_ADCTINY_ADTREF1(__ADTREF1__) (((__ADTREF1__) == ADCTINY_REF1_0_9) ||\ + ((__ADTREF1__) == ADCTINY_REF1_0_7)) + +//ADTREF2 +#define ADCTINY_REF2_1_8 0 +#define ADCTINY_REF2_1_6 ANA_REGF_ADTREF2SEL +#define IS_ADCTINY_ADTREF2(__ADTREF2__) (((__ADTREF2__) == ADCTINY_REF2_1_8) ||\ + ((__ADTREF2__) == ADCTINY_REF2_1_6)) + +//ADTREF3 +#define ADCTINY_REF3_2_7 0 +#define ADCTINY_REF3_2_5 ANA_REGF_ADTREF3SEL +#define IS_ADCTINY_ADTREF3(__ADTREF3__) (((__ADTREF3__) == ADCTINY_REF3_2_7) ||\ + ((__ADTREF3__) == ADCTINY_REF3_2_5)) + +//THSel +#define ADCTINY_THSEL_0 (0x00UL << ANA_MISC_TADCTH_Pos) +#define ADCTINY_THSEL_1 (0x01UL << ANA_MISC_TADCTH_Pos) +#define ADCTINY_THSEL_2 (0x02UL << ANA_MISC_TADCTH_Pos) +#define ADCTINY_THSEL_3 (0x03UL << ANA_MISC_TADCTH_Pos) +#define IS_ADCTINY_THSEL(__THSEL__) (((__THSEL__) == ADCTINY_THSEL_0) ||\ + ((__THSEL__) == ADCTINY_THSEL_1) ||\ + ((__THSEL__) == ADCTINY_THSEL_2) ||\ + ((__THSEL__) == ADCTINY_THSEL_3)) + +/* Exported Functions ------------------------------------------------------- */ +void TADC_DeInit(void); +void TADC_StructInit(TADCInitType* TADC_InitStruct); +void TADC_Init(TADCInitType* TADC_InitStruct); +void TADC_Cmd(uint32_t NewState); +uint8_t TADC_GetOutput(void); +void TADC_IntTHConfig(uint32_t THSel); +void TADC_INTConfig(uint32_t NewState); +uint8_t TADC_GetINTStatus(void); +void TADC_ClearINTStatus(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_ADC_TINY_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_ana.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_ana.h new file mode 100644 index 0000000000..e7ebfac706 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_ana.h @@ -0,0 +1,118 @@ +/** + ****************************************************************************** + * @file lib_ana.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Analog library. + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ +#ifndef __LIB_ANA_H +#define __LIB_ANA_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/***** StatusMask (ANA_GetStatus) *****/ +#define ANA_STATUS_AVCCLV ANA_CMPOUT_AVCCLV +#define ANA_STATUS_VDCINDROP ANA_CMPOUT_VDCINDROP +#define ANA_STATUS_VDDALARM ANA_CMPOUT_VDDALARM +#define ANA_STATUS_CMP2 ANA_CMPOUT_CMP2 +#define ANA_STATUS_CMP1 ANA_CMPOUT_CMP1 +#define ANA_STATUS_LOCKL ANA_CMPOUT_LOCKL +#define ANA_STATUS_LOCKH ANA_CMPOUT_LOCKH + +/***** IntMask (ANA_GetINTStatus / ANA_ClearINTStatus / ANA_INTConfig) *****/ +#define ANA_INT_UPPER_TH3 ANA_INTEN_INTEN21 +#define ANA_INT_LOWER_TH3 ANA_INTEN_INTEN20 +#define ANA_INT_UPPER_TH2 ANA_INTEN_INTEN19 +#define ANA_INT_LOWER_TH2 ANA_INTEN_INTEN18 +#define ANA_INT_UPPER_TH1 ANA_INTEN_INTEN17 +#define ANA_INT_LOWER_TH1 ANA_INTEN_INTEN16 +#define ANA_INT_UPPER_TH0 ANA_INTEN_INTEN15 +#define ANA_INT_LOWER_TH0 ANA_INTEN_INTEN14 +#define ANA_INT_TADC_OVER ANA_INTEN_INTEN13 +#define ANA_INT_REGERR ANA_INTEN_INTEN12 +#define ANA_INT_SLPFAIL_VDCIN ANA_INTEN_INTEN11 +#define ANA_INT_AVCCLV ANA_INTEN_INTEN10 +#define ANA_INT_VDCINDROP ANA_INTEN_INTEN8 +#define ANA_INT_VDDALARM ANA_INTEN_INTEN7 +#define ANA_INT_CMP2 ANA_INTEN_INTEN3 +#define ANA_INT_CMP1 ANA_INTEN_INTEN2 +#define ANA_INT_ADCA ANA_INTEN_INTEN1 +#define ANA_INT_ADCM ANA_INTEN_INTEN0 +#define ANA_INT_Msk (ANA_INTSTS_INTSTS21 \ + |ANA_INTSTS_INTSTS20 \ + |ANA_INTSTS_INTSTS19 \ + |ANA_INTSTS_INTSTS18 \ + |ANA_INTSTS_INTSTS17 \ + |ANA_INTSTS_INTSTS16 \ + |ANA_INTSTS_INTSTS15 \ + |ANA_INTSTS_INTSTS14 \ + |ANA_INTSTS_INTSTS13 \ + |ANA_INTSTS_INTSTS12 \ + |ANA_INTSTS_INTSTS11 \ + |ANA_INTSTS_INTSTS10 \ + |ANA_INTSTS_INTSTS8 \ + |ANA_INTSTS_INTSTS7 \ + |ANA_INTSTS_INTSTS3 \ + |ANA_INTSTS_INTSTS2 \ + |ANA_INTSTS_INTSTS1 \ + |ANA_INTSTS_INTSTS0) + +/****************************** ANA Instances *********************************/ +#define IS_ANA_ALL_INSTANCE(INSTANCE) ((INSTANCE) == ANA) + +/* Private macros ------------------------------------------------------------*/ +#define IS_ANA_STATUS(__STATUS__) (((__STATUS__) == ANA_STATUS_AVCCLV) ||\ + ((__STATUS__) == ANA_STATUS_VDCINDROP) ||\ + ((__STATUS__) == ANA_STATUS_VDDALARM) ||\ + ((__STATUS__) == ANA_STATUS_CMP2) ||\ + ((__STATUS__) == ANA_STATUS_CMP1) ||\ + ((__STATUS__) == ANA_STATUS_LOCKL) ||\ + ((__STATUS__) == ANA_STATUS_LOCKH)) + +#define IS_ANA_INTSTSR(__INTSTSR__) (((__INTSTSR__) == ANA_INT_UPPER_TH3) ||\ + ((__INTSTSR__) == ANA_INT_LOWER_TH3) ||\ + ((__INTSTSR__) == ANA_INT_UPPER_TH2) ||\ + ((__INTSTSR__) == ANA_INT_LOWER_TH2) ||\ + ((__INTSTSR__) == ANA_INT_UPPER_TH1) ||\ + ((__INTSTSR__) == ANA_INT_LOWER_TH1) ||\ + ((__INTSTSR__) == ANA_INT_UPPER_TH0) ||\ + ((__INTSTSR__) == ANA_INT_LOWER_TH0) ||\ + ((__INTSTSR__) == ANA_INT_TADC_OVER) ||\ + ((__INTSTSR__) == ANA_INT_REGERR) ||\ + ((__INTSTSR__) == ANA_INT_SLPFAIL_VDCIN) ||\ + ((__INTSTSR__) == ANA_INT_AVCCLV) ||\ + ((__INTSTSR__) == ANA_INT_VDCINDROP) ||\ + ((__INTSTSR__) == ANA_INT_VDDALARM) ||\ + ((__INTSTSR__) == ANA_INT_CMP2) ||\ + ((__INTSTSR__) == ANA_INT_CMP1) ||\ + ((__INTSTSR__) == ANA_INT_ADCA) ||\ + ((__INTSTSR__) == ANA_INT_ADCM)) + +#define IS_ANA_INTSTSC(__INTSTSC__) ((((__INTSTSC__) & ANA_INT_Msk) != 0U) &&\ + (((__INTSTSC__) & ~ANA_INT_Msk) == 0U)) + +#define IS_ANA_INT(__INT__) IS_ANA_INTSTSC(__INT__) + +/* Exported Functions ------------------------------------------------------- */ +uint8_t ANA_GetStatus(uint32_t StatusMask); +uint8_t ANA_GetINTStatus(uint32_t IntMask); +void ANA_ClearINTStatus(uint32_t IntMask); +void ANA_INTConfig(uint32_t IntMask, uint32_t NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_ANA_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_clk.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_clk.h new file mode 100644 index 0000000000..b820761595 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_clk.h @@ -0,0 +1,339 @@ +/** + ****************************************************************************** + * @file lib_clk.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Clock library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_CLK_H +#define __LIB_CLK_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/* PLLL Configure */ +typedef struct +{ + uint32_t Source; + uint32_t State; + uint32_t Frequency; +} PLLL_ConfTypeDef; + +/* PLLH Configure */ +typedef struct +{ + uint32_t Source; + uint32_t State; + uint32_t Frequency; +} PLLH_ConfTypeDef; + +/* RCH Configure */ +typedef struct +{ + uint32_t State; +} RCH_ConfTypeDef; + +/* XTALH Configure */ +typedef struct +{ + uint32_t State; +} XTALH_ConfTypeDef; + +/* RTCCLK Configure */ +typedef struct +{ + uint32_t Source; + uint32_t Divider; +} RTCCLK_ConfTypeDef; + +/* HCLK Configure */ +typedef struct +{ + uint32_t Divider; /* 1 ~ 256 */ +} HCLK_ConfTypeDef; + +/* PCLK Configure */ +typedef struct +{ + uint32_t Divider; /* 1 ~ 256 */ +} PCLK_ConfTypeDef; + +/* Clock Configure */ +typedef struct +{ + uint32_t ClockType; /* The clock to be configured */ + + uint32_t AHBSource; + + PLLL_ConfTypeDef PLLL; + + PLLH_ConfTypeDef PLLH; + + XTALH_ConfTypeDef XTALH; + + RTCCLK_ConfTypeDef RTCCLK; + + HCLK_ConfTypeDef HCLK; + + PCLK_ConfTypeDef PCLK; + +} CLK_InitTypeDef; + +/************** Bits definition for ANA_REG9 register ******************/ +#define ANA_REG9_PLLLSEL_26M (0x0U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_13M (0x1U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_6_5M (0x2U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_3_2M (0x3U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_1_6M (0x4U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_800K (0x5U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_400K (0x6U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLLSEL_200K (0x7U << ANA_REG9_PLLLSEL_Pos) +#define ANA_REG9_PLLHSEL_X2 (0xCU << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X2_5 (0xDU << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X3 (0xEU << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X3_5 (0xFU << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X4 (0x0U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X4_5 (0x1U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X5 (0x2U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X5_5 (0x3U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X6 (0x4U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X6_5 (0x5U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X7 (0x6U << ANA_REG9_PLLHSEL_Pos) +#define ANA_REG9_PLLHSEL_X7_5 (0x7U << ANA_REG9_PLLHSEL_Pos) + +/************** Bits definition for MISC2_CLKSEL register ******************/ +#define MISC2_CLKSEL_CLKSEL_RCOH (0x0U << MISC2_CLKSEL_CLKSEL_Pos) /*!< 0x00000000 */ +#define MISC2_CLKSEL_CLKSEL_XOH (0x1U << MISC2_CLKSEL_CLKSEL_Pos) /*!< 0x00000001 */ +#define MISC2_CLKSEL_CLKSEL_PLLH (0x2U << MISC2_CLKSEL_CLKSEL_Pos) /*!< 0x00000002 */ +#define MISC2_CLKSEL_CLKSEL_RTCCLK (0x3U << MISC2_CLKSEL_CLKSEL_Pos) /*!< 0x00000003 */ +#define MISC2_CLKSEL_CLKSEL_PLLL (0x4U << MISC2_CLKSEL_CLKSEL_Pos) /*!< 0x00000004 */ + +/***** ClockType *****/ +#define CLK_TYPE_MSk (0xFFUL) +#define CLK_TYPE_ALL CLK_TYPE_MSk +#define CLK_TYPE_AHBSRC (0x01UL) /* AHB Clock source to configure */ +#define CLK_TYPE_PLLL (0x02UL) /* PLLL to configure */ +#define CLK_TYPE_PLLH (0x04UL) /* PLLH to configure */ +#define CLK_TYPE_XTALH (0x08UL) /* XTALH to configure */ +#define CLK_TYPE_RTCCLK (0x20UL) /* RTCCLK to configure */ +#define CLK_TYPE_HCLK (0x40UL) /* AHB Clock to configure */ +#define CLK_TYPE_PCLK (0x80UL) /* APB Clock to configure */ + +/***** AHBSource *****/ +#define CLK_AHBSEL_6_5MRC (0x0U << MISC2_CLKSEL_CLKSEL_Pos) +#define CLK_AHBSEL_6_5MXTAL (0x1U << MISC2_CLKSEL_CLKSEL_Pos) +#define CLK_AHBSEL_HSPLL (0x2U << MISC2_CLKSEL_CLKSEL_Pos) +#define CLK_AHBSEL_RTCCLK (0x3U << MISC2_CLKSEL_CLKSEL_Pos) +#define CLK_AHBSEL_LSPLL (0x4U << MISC2_CLKSEL_CLKSEL_Pos) + +/***** PLLL_ConfTypeDef PLLL *****/ +/* PLLL.Source */ +#define CLK_PLLLSRC_RCL PMU_CONTROL_PLLL_SEL +#define CLK_PLLLSRC_XTALL (0) +/* PLLL.State */ +#define CLK_PLLL_ON ANA_REG3_PLLLPDN +#define CLK_PLLL_OFF (0) +/* PLLL.Frequency */ +#define CLK_PLLL_26_2144MHz ANA_REG9_PLLLSEL_26M +#define CLK_PLLL_13_1072MHz ANA_REG9_PLLLSEL_13M +#define CLK_PLLL_6_5536MHz ANA_REG9_PLLLSEL_6_5M +#define CLK_PLLL_3_2768MHz ANA_REG9_PLLLSEL_3_2M +#define CLK_PLLL_1_6384MHz ANA_REG9_PLLLSEL_1_6M +#define CLK_PLLL_0_8192MHz ANA_REG9_PLLLSEL_800K +#define CLK_PLLL_0_4096MHz ANA_REG9_PLLLSEL_400K +#define CLK_PLLL_0_2048MHz ANA_REG9_PLLLSEL_200K + +/***** PLLH_ConfTypeDef PLLH *****/ +/* PLLH.Source */ +#define CLK_PLLHSRC_RCH (0) +#define CLK_PLLHSRC_XTALH PMU_CONTROL_PLLH_SEL +/* PLLH.State */ +#define CLK_PLLH_ON ANA_REG3_PLLHPDN +#define CLK_PLLH_OFF (0) +/* PLLH.Frequency */ +#define CLK_PLLH_13_1072MHz ANA_REG9_PLLHSEL_X2 +#define CLK_PLLH_16_384MHz ANA_REG9_PLLHSEL_X2_5 +#define CLK_PLLH_19_6608MHz ANA_REG9_PLLHSEL_X3 +#define CLK_PLLH_22_9376MHz ANA_REG9_PLLHSEL_X3_5 +#define CLK_PLLH_26_2144MHz ANA_REG9_PLLHSEL_X4 +#define CLK_PLLH_29_4912MHz ANA_REG9_PLLHSEL_X4_5 +#define CLK_PLLH_32_768MHz ANA_REG9_PLLHSEL_X5 +#define CLK_PLLH_36_0448MHz ANA_REG9_PLLHSEL_X5_5 +#define CLK_PLLH_39_3216MHz ANA_REG9_PLLHSEL_X6 +#define CLK_PLLH_42_5984MHz ANA_REG9_PLLHSEL_X6_5 +#define CLK_PLLH_45_8752MHz ANA_REG9_PLLHSEL_X7 +#define CLK_PLLH_49_152MHz ANA_REG9_PLLHSEL_X7_5 + +/* XTALH_ConfTypeDef XTALH */ +/* XTALH.State */ +#define CLK_XTALH_ON ANA_REG3_XOHPDN +#define CLK_XTALH_OFF (0) + +/* RTCCLK Configure */ +/* RTCCLK.Source */ +#define CLK_RTCCLKSRC_XTALL (0) +#define CLK_RTCCLKSRC_RCL (PMU_CONTROL_RTCCLK_SEL) +/* RTCCLK.Divider */ +#define CLK_RTCCLKDIV_1 (RTC_PSCA_PSCA_0) +#define CLK_RTCCLKDIV_4 (RTC_PSCA_PSCA_1) + +//AHB Periphral +#define CLK_AHBPERIPHRAL_DMA MISC2_HCLKEN_DMA +#define CLK_AHBPERIPHRAL_GPIO MISC2_HCLKEN_GPIO +#define CLK_AHBPERIPHRAL_LCD MISC2_HCLKEN_LCD +#define CLK_AHBPERIPHRAL_CRYPT MISC2_HCLKEN_CRYPT +#define CLK_AHBPERIPHRAL_ALL (MISC2_HCLKEN_DMA \ + |MISC2_HCLKEN_GPIO \ + |MISC2_HCLKEN_LCD \ + |MISC2_HCLKEN_CRYPT) + +//APB Periphral +#define CLK_APBPERIPHRAL_DMA MISC2_PCLKEN_DMA +#define CLK_APBPERIPHRAL_I2C MISC2_PCLKEN_I2C +#define CLK_APBPERIPHRAL_SPI1 MISC2_PCLKEN_SPI1 +#define CLK_APBPERIPHRAL_UART0 MISC2_PCLKEN_UART0 +#define CLK_APBPERIPHRAL_UART1 MISC2_PCLKEN_UART1 +#define CLK_APBPERIPHRAL_UART2 MISC2_PCLKEN_UART2 +#define CLK_APBPERIPHRAL_UART3 MISC2_PCLKEN_UART3 +#define CLK_APBPERIPHRAL_UART4 MISC2_PCLKEN_UART4 +#define CLK_APBPERIPHRAL_UART5 MISC2_PCLKEN_UART5 +#define CLK_APBPERIPHRAL_ISO78160 MISC2_PCLKEN_ISO78160 +#define CLK_APBPERIPHRAL_ISO78161 MISC2_PCLKEN_ISO78161 +#define CLK_APBPERIPHRAL_TIMER MISC2_PCLKEN_TIMER +#define CLK_APBPERIPHRAL_MISC1 MISC2_PCLKEN_MISC1 +#define CLK_APBPERIPHRAL_MISC2 MISC2_PCLKEN_MISC2 +#define CLK_APBPERIPHRAL_PMU MISC2_PCLKEN_PMU +#define CLK_APBPERIPHRAL_RTC MISC2_PCLKEN_RTC +#define CLK_APBPERIPHRAL_ANA MISC2_PCLKEN_ANA +#define CLK_APBPERIPHRAL_U32K0 MISC2_PCLKEN_U32K0 +#define CLK_APBPERIPHRAL_U32K1 MISC2_PCLKEN_U32K1 +#define CLK_APBPERIPHRAL_SPI2 MISC2_PCLKEN_SPI2 +#define CLK_APBPERIPHRAL_SPI3 MISC2_PCLKEN_SPI3 +#define CLK_APBPERIPHRAL_ALL (MISC2_PCLKEN_DMA \ + |MISC2_PCLKEN_I2C \ + |MISC2_PCLKEN_SPI1 \ + |MISC2_PCLKEN_UART0 \ + |MISC2_PCLKEN_UART1 \ + |MISC2_PCLKEN_UART2 \ + |MISC2_PCLKEN_UART3 \ + |MISC2_PCLKEN_UART4 \ + |MISC2_PCLKEN_UART5 \ + |MISC2_PCLKEN_ISO78160 \ + |MISC2_PCLKEN_ISO78161 \ + |MISC2_PCLKEN_TIMER \ + |MISC2_PCLKEN_MISC1 \ + |MISC2_PCLKEN_MISC2 \ + |MISC2_PCLKEN_PMU \ + |MISC2_PCLKEN_RTC \ + |MISC2_PCLKEN_ANA \ + |MISC2_PCLKEN_U32K0 \ + |MISC2_PCLKEN_U32K1 \ + |MISC2_PCLKEN_SPI2 \ + |MISC2_PCLKEN_SPI3) + +/***** PLLStatus (CLK_GetPLLLockStatus) *****/ +#define CLK_STATUS_LOCKL ANA_CMPOUT_LOCKL +#define CLK_STATUS_LOCKH ANA_CMPOUT_LOCKH + + +/* Private macros ------------------------------------------------------------*/ +#define IS_CLK_TYPE(__TYPE__) ((((__TYPE__) & CLK_TYPE_MSk) != 0UL) &&\ + (((__TYPE__) & ~CLK_TYPE_MSk) == 0UL)) + +#define IS_CLK_AHBSRC(__AHBSRC__) (((__AHBSRC__) == CLK_AHBSEL_6_5MRC) ||\ + ((__AHBSRC__) == CLK_AHBSEL_6_5MXTAL) ||\ + ((__AHBSRC__) == CLK_AHBSEL_HSPLL) ||\ + ((__AHBSRC__) == CLK_AHBSEL_RTCCLK) ||\ + ((__AHBSRC__) == CLK_AHBSEL_LSPLL)) + +#define IS_CLK_PLLLSRC(__PLLLSRC__) (((__PLLLSRC__) == CLK_PLLLSRC_RCL) ||\ + ((__PLLLSRC__) == CLK_PLLLSRC_XTALL)) + +#define IS_CLK_PLLLSTA(__PLLLSTA__) (((__PLLLSTA__) == CLK_PLLL_ON) ||\ + ((__PLLLSTA__) == CLK_PLLL_OFF)) + +#define IS_CLK_PLLLFRQ(__PLLLFRQ__) (((__PLLLFRQ__) == CLK_PLLL_26_2144MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_13_1072MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_6_5536MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_3_2768MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_1_6384MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_0_8192MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_0_4096MHz) ||\ + ((__PLLLFRQ__) == CLK_PLLL_0_2048MHz)) + +#define IS_CLK_PLLHSRC(__PLLHSRC__) (((__PLLHSRC__) == CLK_PLLHSRC_RCH) ||\ + ((__PLLHSRC__) == CLK_PLLHSRC_XTALH)) + +#define IS_CLK_PLLHSTA(__PLLHSTA__) (((__PLLHSTA__) == CLK_PLLH_ON) ||\ + ((__PLLHSTA__) == CLK_PLLH_OFF)) + +#define IS_CLK_PLLHFRQ(__PLLHSRC__) (((__PLLHSRC__) == CLK_PLLH_13_1072MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_16_384MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_19_6608MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_22_9376MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_26_2144MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_29_4912MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_32_768MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_36_0448MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_39_3216MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_42_5984MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_45_8752MHz) ||\ + ((__PLLHSRC__) == CLK_PLLH_49_152MHz)) + +#define IS_CLK_XTALHSTA(__XTALHSTA__) (((__XTALHSTA__) == CLK_XTALH_ON) ||\ + ((__XTALHSTA__) == CLK_XTALH_OFF)) + +#define IS_CLK_RTCSRC(__RTCSRC__) (((__RTCSRC__) == CLK_RTCCLKSRC_XTALL) ||\ + ((__RTCSRC__) == CLK_RTCCLKSRC_RCL)) + +#define IS_CLK_RTCDIV(__RTCDIV__) (((__RTCDIV__) == CLK_RTCCLKDIV_1) ||\ + ((__RTCDIV__) == CLK_RTCCLKDIV_4)) + +#define IS_CLK_HCLKDIV(__HCLKDIV__) (((__HCLKDIV__) > 0UL) &&\ + ((__HCLKDIV__) < 257UL)) + +#define IS_CLK_PCLKDIV(__PCLKDIV__) (((__PCLKDIV__) > 0UL) &&\ + ((__PCLKDIV__) < 257UL)) + +#define IS_CLK_AHBPERIPHRAL(__AHBPERIPHRAL__) ((((__AHBPERIPHRAL__) & CLK_AHBPERIPHRAL_ALL) != 0UL) &&\ + (((__AHBPERIPHRAL__) & ~CLK_AHBPERIPHRAL_ALL) == 0UL)) + +#define IS_CLK_APBPERIPHRAL(__APBPERIPHRAL__) ((((__APBPERIPHRAL__) & CLK_APBPERIPHRAL_ALL) != 0UL) &&\ + (((__APBPERIPHRAL__) & ~CLK_APBPERIPHRAL_ALL) == 0UL)) + +#define IS_CLK_PLLLOCK(__PLLLOCK__) (((__PLLLOCK__) == ANA_CMPOUT_LOCKL) ||\ + ((__PLLLOCK__) == ANA_CMPOUT_LOCKH)) +/* Exported Functions ------------------------------------------------------- */ +/* CLK Exported Functions Group1: + Initialization and functions ---------------*/ +void CLK_ClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct); + +/* CLK Exported Functions Group2: + Peripheral Control -------------------------*/ +void CLK_AHBPeriphralCmd(uint32_t Periphral, uint32_t NewState); +void CLK_APBPeriphralCmd(uint32_t Periphral, uint32_t NewState); +/* CLK Exported Functions Group3: + Get clock/configuration information --------*/ +uint32_t CLK_GetHCLKFreq(void); +uint32_t CLK_GetPCLKFreq(void); +uint32_t CLK_GetPLLLFreq(void); +void CLK_GetClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct); +uint8_t CLK_GetXTALHStatus(void); +uint8_t CLK_GetXTALLStatus(void); +uint8_t CLK_GetPLLLockStatus(uint32_t PLLStatus); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_CLK_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_cmp.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_cmp.h new file mode 100644 index 0000000000..252aa2ef66 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_cmp.h @@ -0,0 +1,205 @@ +/** + ****************************************************************************** + * @file lib_cmp.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief CMP library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_CMP_H +#define __LIB_CMP_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/* CMP Time struct */ +typedef struct +{ + uint32_t DebSel; + uint32_t SignalSourceSel; + uint32_t BiasSel; +} CMP_TypeDef; + +typedef struct +{ + uint32_t ModeSel; + uint32_t CheckPeriod; + uint32_t CheckNum; +} CMP_CountTypeDef; + +typedef struct +{ + uint32_t DebSel; + uint32_t OutputSel; +} CMP_OutputTypeDef; + +typedef struct +{ + uint32_t INTNumSel; + uint32_t SubSel; + uint32_t THRNum; +} CMP_INTTypeDef; + +/* Macros --------------------------------------------------------------------*/ + +/***** CMP_DEBConfig *****/ +//CMPx +#define CMP_1 (0x00U) +#define CMP_2 (0x02U) +#define IS_CMP(__CMP__) (((__CMP__) == CMP_1) || ((__CMP__) == CMP_2)) +/************** Bits definition for ANA_REG2 register ******************/ +#define ANA_REG2_CMP1SEL_0 (0x0U << ANA_REG2_CMP1SEL_Pos) +#define ANA_REG2_CMP1SEL_1 (0x1U << ANA_REG2_CMP1SEL_Pos) +#define ANA_REG2_CMP1SEL_2 (0x2U << ANA_REG2_CMP1SEL_Pos) +#define ANA_REG2_CMP1SEL_3 (0x3U << ANA_REG2_CMP1SEL_Pos) +#define ANA_REG2_CMP2SEL_0 (0x0U << ANA_REG2_CMP2SEL_Pos) +#define ANA_REG2_CMP2SEL_1 (0x1U << ANA_REG2_CMP2SEL_Pos) +#define ANA_REG2_CMP2SEL_2 (0x2U << ANA_REG2_CMP2SEL_Pos) +#define ANA_REG2_CMP2SEL_3 (0x3U << ANA_REG2_CMP2SEL_Pos) +/************** Bits definition for ANA_REG5 register ******************/ +#define ANA_REG5_CMP1IT_0 (0x0U << ANA_REG5_CMP1IT_Pos) +#define ANA_REG5_CMP1IT_1 (0x1U << ANA_REG5_CMP1IT_Pos) +#define ANA_REG5_CMP1IT_2 (0x2U << ANA_REG5_CMP1IT_Pos) +#define ANA_REG5_CMP1IT_3 (0x3U << ANA_REG5_CMP1IT_Pos) +#define ANA_REG5_CMP2IT_0 (0x0U << ANA_REG5_CMP2IT_Pos) +#define ANA_REG5_CMP2IT_1 (0x1U << ANA_REG5_CMP2IT_Pos) +#define ANA_REG5_CMP2IT_2 (0x2U << ANA_REG5_CMP2IT_Pos) +#define ANA_REG5_CMP2IT_3 (0x3U << ANA_REG5_CMP2IT_Pos) +/************** Bits definition for ANA_CTRL register ******************/ +//Debounce +#define CMP_DEB_NONE (0x0U) +#define CMP_DEB_RTCCLK_2 (0x1U) +#define CMP_DEB_RTCCLK_3 (0x2U) +#define CMP_DEB_RTCCLK_4 (0x3U) +#define IS_CMP_DEB(__DEB__) (((__DEB__) == CMP_DEB_NONE) ||\ + ((__DEB__) == CMP_DEB_RTCCLK_2) ||\ + ((__DEB__) == CMP_DEB_RTCCLK_3) ||\ + ((__DEB__) == CMP_DEB_RTCCLK_4)) + +/***** SourceSelect (CMP_ConfigSignalSource) *****/ +#define CMP_SIGNALSRC_PPIN_TO_VREF 0x00 +#define CMP_SIGNALSRC_PPIN_TO_BGPREF 0x01 +#define CMP_SIGNALSRC_PBAT_TO_VREF 0x80 +#define CMP_SIGNALSRC_PBAT_TO_BGPREF 0x81 +#define CMP_SIGNALSRC_NPIN_TO_VREF 0x10 +#define CMP_SIGNALSRC_NPIN_TO_BGPREF 0x11 +#define CMP_SIGNALSRC_PPIN_TO_NPIN 0x20 +#define CMP_SIGNALSRC_PBAT_TO_NPIN 0xA0 + +#define IS_CMP_SIGNALSRC(__SIGNALSRC__) (((__SIGNALSRC__) == CMP_SIGNALSRC_PPIN_TO_VREF) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_PPIN_TO_BGPREF) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_PPIN_TO_NPIN) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_PBAT_TO_NPIN) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_PBAT_TO_VREF) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_PBAT_TO_BGPREF) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_NPIN_TO_VREF) ||\ + ((__SIGNALSRC__) == CMP_SIGNALSRC_NPIN_TO_BGPREF)) + +/***** BiasSel (CMP_BiasConfig) *****/ +#define CMP_BIAS_20nA (0x0U) +#define CMP_BIAS_100nA (0x1U) +#define CMP_BIAS_500nA (0x2U) +#define IS_CMP_BIAS(__BIAS__) (((__BIAS__) == CMP_BIAS_20nA) ||\ + ((__BIAS__) == CMP_BIAS_100nA) ||\ + ((__BIAS__) == CMP_BIAS_500nA)) + +/***** CheckPeriod (CMP_CheckFrequecnyConfig) *****/ +#define CMP_PERIOD_30US 0 +#define CMP_PERIOD_7_8125MS 1 +#define CMP_PERIOD_125MS 2 +#define CMP_PERIOD_250MS 3 +#define CMP_PERIOD_500MS 4 +#define IS_CMP_CHECKPERIOD(__CHECKPERIOD__) (((__CHECKPERIOD__) == CMP_PERIOD_30US) ||\ + ((__CHECKPERIOD__) == CMP_PERIOD_7_8125MS)||\ + ((__CHECKPERIOD__) == CMP_PERIOD_125MS) ||\ + ((__CHECKPERIOD__) == CMP_PERIOD_250MS) ||\ + ((__CHECKPERIOD__) == CMP_PERIOD_500MS)) + +/***** Mode (CMP_ModeConfig) *****/ +#define CMP_MODE_OFF (0x0U) +#define CMP_MODE_RISING (0x1U) +#define CMP_MODE_FALLING (0x2U) +#define CMP_MODE_BOTH (0x3U) +#define IS_CMP_MODE(__MODE__) (((__MODE__) == CMP_MODE_OFF) ||\ + ((__MODE__) == CMP_MODE_RISING) ||\ + ((__MODE__) == CMP_MODE_FALLING) ||\ + ((__MODE__) == CMP_MODE_BOTH)) + +//CountSel +#define CMP_COUNT_NOSUB 0 +#define CMP_COUNT_SUB 1 +#define IS_CMP_COUNT(__COUNT__) (((__COUNT__) == CMP_COUNT_NOSUB) ||\ + ((__COUNT__) == CMP_COUNT_SUB)) + +//SubSel +#define CMP_INTNUM_EVERY 0 +#define CMP_INTNUM_1 1 +#define IS_CMP_INTNUM(__INTNUM__) (((__INTNUM__) == CMP_INTNUM_EVERY) ||\ + ((__INTNUM__) == CMP_INTNUM_1)) + +//THRNum +#define IS_CMP_THRNUM(__THRNUM__) ((__THRNUM__) < 65536UL) + +#define CMP_CHKNUM_1 0 +#define CMP_CHKNUM_2 1 +#define CMP_CHKNUM_3 2 +#define CMP_CHKNUM_4 3 +#define CMP_CHKNUM_5 4 +#define CMP_CHKNUM_6 5 +#define CMP_CHKNUM_7 6 +#define CMP_CHKNUM_8 7 +#define CMP_CHKNUM_9 8 +#define CMP_CHKNUM_10 9 +#define CMP_CHKNUM_11 10 +#define CMP_CHKNUM_12 11 +#define CMP_CHKNUM_13 12 +#define CMP_CHKNUM_14 13 +#define CMP_CHKNUM_15 14 +#define CMP_CHKNUM_16 15 +#define IS_CMP_CHKNUM(__CHKNUM__) (__CHKNUM__ < 16) + +//DebSel +//SubSel +#define CMP_OUTPUT_DEB 0 +#define CMP_OUTPUT_NODEB 1 +#define IS_CMP_OUTPUTDEB(__OUTPUTDEB__) (((__OUTPUTDEB__) == CMP_OUTPUT_DEB) ||\ + ((__OUTPUTDEB__) == CMP_OUTPUT_NODEB)) + +/* Exported Functions ------------------------------------------------------- */ +/* CMP Exported Functions Group1: + (De)Initialization ------------------------*/ +void CMP_DeInit(uint32_t CMPx); +void CMP_Init(uint32_t CMPx, CMP_TypeDef *InitStruct); +void CMP_StructInit(CMP_TypeDef *InitStruct); +void CMP_CountStructInit(CMP_CountTypeDef *InitStruct); +void CMP_CountInit(uint32_t CMPx, CMP_CountTypeDef *InitStruct); +void CMP_INTStructInit(CMP_INTTypeDef *InitStruct); +void CMP_INTInit(uint32_t CMPx, CMP_INTTypeDef *InitStruct); +void CMP_OutputStructInit(CMP_OutputTypeDef *InitStruct); +void CMP_OutputInit(uint32_t CMPx, CMP_OutputTypeDef *InitStruct); +/* CMP Exported Functions Group2: + Interrupt (flag) --------------------------*/ +void CMP_INTConfig(uint32_t CMPx, uint32_t NewState); +uint8_t CMP_GetINTStatus(uint32_t CMPx); +void CMP_ClearINTStatus(uint32_t CMPx); +/* CMP Exported Functions Group3: + MISC Configuration ------------------------*/ +void CMP_Cmd(uint32_t CMPx, uint32_t NewState); +uint32_t CMP_GetCNTValue(uint32_t CMPx); +void CMP_ClearCNTValue(uint32_t CMPx); +uint8_t CMP_GetOutputValue(uint32_t CMPx); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_CMP_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_crypt.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_crypt.h new file mode 100644 index 0000000000..295fe3c2db --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_crypt.h @@ -0,0 +1,107 @@ +/** + ****************************************************************************** + * @file lib_crypt.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief CRYPT library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_CRYPT_H +#define __LIB_CRYPT_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" +/************** Bits definition for CRYPT_CTRL register ******************/ +#define CRYPT_CTRL_MODE_MULTIPLY (0x0U << CRYPT_CTRL_MODE_Pos) +#define CRYPT_CTRL_MODE_ADD (0x1U << CRYPT_CTRL_MODE_Pos) +#define CRYPT_CTRL_MODE_SUB (0x2U << CRYPT_CTRL_MODE_Pos) +#define CRYPT_CTRL_MODE_RSHIFT1 (0x3U << CRYPT_CTRL_MODE_Pos) +#define CRYPT_CTRL_LENGTH_32 (0x0U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_64 (0x1U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_96 (0x2U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_128 (0x3U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_160 (0x4U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_192 (0x5U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_224 (0x6U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_256 (0x7U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_288 (0x8U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_320 (0x9U << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_352 (0xAU << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_384 (0xBU << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_416 (0xCU << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_448 (0xDU << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_480 (0xEU << CRYPT_CTRL_LENGTH_Pos) +#define CRYPT_CTRL_LENGTH_512 (0xFU << CRYPT_CTRL_LENGTH_Pos) +//Length +#define CRYPT_LENGTH_32 CRYPT_CTRL_LENGTH_32 +#define CRYPT_LENGTH_64 CRYPT_CTRL_LENGTH_64 +#define CRYPT_LENGTH_96 CRYPT_CTRL_LENGTH_96 +#define CRYPT_LENGTH_128 CRYPT_CTRL_LENGTH_128 +#define CRYPT_LENGTH_160 CRYPT_CTRL_LENGTH_160 +#define CRYPT_LENGTH_192 CRYPT_CTRL_LENGTH_192 +#define CRYPT_LENGTH_224 CRYPT_CTRL_LENGTH_224 +#define CRYPT_LENGTH_256 CRYPT_CTRL_LENGTH_256 +#define CRYPT_LENGTH_288 CRYPT_CTRL_LENGTH_288 +#define CRYPT_LENGTH_320 CRYPT_CTRL_LENGTH_320 +#define CRYPT_LENGTH_352 CRYPT_CTRL_LENGTH_352 +#define CRYPT_LENGTH_384 CRYPT_CTRL_LENGTH_384 +#define CRYPT_LENGTH_416 CRYPT_CTRL_LENGTH_416 +#define CRYPT_LENGTH_448 CRYPT_CTRL_LENGTH_448 +#define CRYPT_LENGTH_480 CRYPT_CTRL_LENGTH_480 +#define CRYPT_LENGTH_512 CRYPT_CTRL_LENGTH_512 +//Nostop +#define CRYPT_STOPCPU (0) +#define CRYPT_NOSTOPCPU CRYPT_CTRL_NOSTOP + +/* Private macros ------------------------------------------------------------*/ +#define IS_CRYPT_ADDR(__ADDR__) (((__ADDR__) & 0x3U) == 0U) + +#define IS_CRYPT_LENGTH(__LENGTH__) (((__LENGTH__) == CRYPT_LENGTH_32) ||\ + ((__LENGTH__) == CRYPT_LENGTH_64) ||\ + ((__LENGTH__) == CRYPT_LENGTH_32) ||\ + ((__LENGTH__) == CRYPT_LENGTH_96) ||\ + ((__LENGTH__) == CRYPT_LENGTH_128) ||\ + ((__LENGTH__) == CRYPT_LENGTH_160) ||\ + ((__LENGTH__) == CRYPT_LENGTH_192) ||\ + ((__LENGTH__) == CRYPT_LENGTH_224) ||\ + ((__LENGTH__) == CRYPT_LENGTH_256) ||\ + ((__LENGTH__) == CRYPT_LENGTH_288) ||\ + ((__LENGTH__) == CRYPT_LENGTH_320) ||\ + ((__LENGTH__) == CRYPT_LENGTH_352) ||\ + ((__LENGTH__) == CRYPT_LENGTH_384) ||\ + ((__LENGTH__) == CRYPT_LENGTH_416) ||\ + ((__LENGTH__) == CRYPT_LENGTH_448) ||\ + ((__LENGTH__) == CRYPT_LENGTH_480) ||\ + ((__LENGTH__) == CRYPT_LENGTH_512)) + +#define IS_CRYPT_NOSTOP(__NOSTOP__) (((__NOSTOP__) == CRYPT_STOPCPU) || ((__NOSTOP__) == CRYPT_NOSTOPCPU)) + +/****************************** CRYPT Instances *******************************/ +#define IS_CRYPT_ALL_INSTANCE(INSTANCE) ((INSTANCE) == CRYPT) + +/* Exported Functions ------------------------------------------------------- */ +void CRYPT_AddressAConfig(uint16_t AddrA); +void CRYPT_AddressBConfig(uint16_t AddrB); +void CRYPT_AddressOConfig(uint16_t AddrO); +uint8_t CRYPT_GetCarryBorrowBit(void); +void CRYPT_StartAdd(uint32_t Length, uint32_t Nostop); +void CRYPT_StartMultiply(uint32_t Length, uint32_t Nostop); +void CRYPT_StartSub(uint32_t Length, uint32_t Nostop); +void CRYPT_StartRShift1(uint32_t Length, uint32_t Nostop); +void CRYPT_WaitForLastOperation(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_CRYPT_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_dma.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_dma.h new file mode 100644 index 0000000000..d746c333d8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_dma.h @@ -0,0 +1,267 @@ +/** + ****************************************************************************** + * @file lib_dma.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief DMA library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_DMA_H +#define __LIB_DMA_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +//Channel +#define DMA_CHANNEL_0 (0) +#define DMA_CHANNEL_1 (1) +#define DMA_CHANNEL_2 (2) +#define DMA_CHANNEL_3 (3) + +typedef struct +{ + uint32_t DestAddr; /* destination address */ + uint32_t SrcAddr; /* source address */ + uint8_t FrameLen; /* Frame length */ + uint8_t PackLen; /* Package length */ + uint32_t ContMode; /* Continuous mode */ + uint32_t TransMode; /* Transfer mode */ + uint32_t ReqSrc; /* DMA request source */ + uint32_t DestAddrMode; /* Destination address mode */ + uint32_t SrcAddrMode; /* Source address mode */ + uint32_t TransSize; /* Transfer size mode */ +} DMA_InitType; + +/************** Bits definition for DMA_CxCTL register ******************/ + + + +/************** Bits definition for DMA_AESCTL register ******************/ +/****************************** DMA Instances *********************************/ +#define IS_DMA_ALL_INSTANCE(INSTANCE) ((INSTANCE) == DMA) + +//ContMode +#define DMA_CONTMODE_ENABLE DMA_CCTL_CONT +#define DMA_CONTMODE_DISABLE 0 +#define IS_DMA_CONTMOD(__CONTMOD__) (((__CONTMOD__) == DMA_CONTMODE_ENABLE) ||\ + ((__CONTMOD__) == DMA_CONTMODE_DISABLE)) + +//TransMode +#define DMA_TRANSMODE_SINGLE 0 +#define DMA_TRANSMODE_PACK DMA_CCTL_TMODE +#define IS_DMA_TRANSMOD(__TRANSMOD__) (((__TRANSMOD__) == DMA_TRANSMODE_SINGLE) ||\ + ((__TRANSMOD__) == DMA_TRANSMODE_PACK)) + +//ReqSrc +#define DMA_REQSRC_SOFT (0x0U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000000 */ +#define DMA_REQSRC_ADC (0x1U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000080 */ +#define DMA_REQSRC_UART0TX (0x2U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000100 */ +#define DMA_REQSRC_UART0RX (0x3U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000180 */ +#define DMA_REQSRC_UART1TX (0x4U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000200 */ +#define DMA_REQSRC_UART1RX (0x5U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000280 */ +#define DMA_REQSRC_UART2TX (0x6U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000300 */ +#define DMA_REQSRC_UART2RX (0x7U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000380 */ +#define DMA_REQSRC_UART3TX (0x8U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000400 */ +#define DMA_REQSRC_UART3RX (0x9U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000480 */ +#define DMA_REQSRC_UART4TX (0xAU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000500 */ +#define DMA_REQSRC_UART4RX (0xBU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000580 */ +#define DMA_REQSRC_UART5TX (0xCU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000600 */ +#define DMA_REQSRC_UART5RX (0xDU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000680 */ +#define DMA_REQSRC_ISO78160TX (0xEU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000700 */ +#define DMA_REQSRC_ISO78160RX (0xFU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000780 */ +#define DMA_REQSRC_ISO78161TX (0x10U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000800 */ +#define DMA_REQSRC_ISO78161RX (0x11U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000880 */ +#define DMA_REQSRC_TIMER0 (0x12U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000900 */ +#define DMA_REQSRC_TIMER1 (0x13U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000980 */ +#define DMA_REQSRC_TIMER2 (0x14U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000A00 */ +#define DMA_REQSRC_TIMER3 (0x15U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000A80 */ +#define DMA_REQSRC_SPI1TX (0x16U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000B00 */ +#define DMA_REQSRC_SPI1RX (0x17U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000B80 */ +#define DMA_REQSRC_U32K0 (0x18U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000C00 */ +#define DMA_REQSRC_U32K1 (0x19U << DMA_CCTL_DMASEL_Pos) /*!< 0x00000C80 */ +#define DMA_REQSRC_CMP1 (0x1AU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000D00 */ +#define DMA_REQSRC_CMP2 (0x1BU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000D80 */ +#define DMA_REQSRC_SPI3TX (0x1CU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000E00 */ +#define DMA_REQSRC_SPI3RX (0x1DU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000E80 */ +#define DMA_REQSRC_SPI2TX (0x1EU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000F00 */ +#define DMA_REQSRC_SPI2RX (0x1FU << DMA_CCTL_DMASEL_Pos) /*!< 0x00000F80 */ + +#define IS_DMA_REQSRC(__REQSRC__) (((__REQSRC__) == DMA_REQSRC_SOFT) ||\ + ((__REQSRC__) == DMA_REQSRC_ADC) ||\ + ((__REQSRC__) == DMA_REQSRC_UART0TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART0RX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART1TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART1RX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART2TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART2RX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART3TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART3RX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART4TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART4RX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART5TX) ||\ + ((__REQSRC__) == DMA_REQSRC_UART5RX) ||\ + ((__REQSRC__) == DMA_REQSRC_ISO78160TX) ||\ + ((__REQSRC__) == DMA_REQSRC_ISO78160RX) ||\ + ((__REQSRC__) == DMA_REQSRC_ISO78161TX) ||\ + ((__REQSRC__) == DMA_REQSRC_ISO78161RX) ||\ + ((__REQSRC__) == DMA_REQSRC_TIMER0) ||\ + ((__REQSRC__) == DMA_REQSRC_TIMER1) ||\ + ((__REQSRC__) == DMA_REQSRC_TIMER2) ||\ + ((__REQSRC__) == DMA_REQSRC_TIMER3) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI1TX) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI1RX) ||\ + ((__REQSRC__) == DMA_REQSRC_U32K0) ||\ + ((__REQSRC__) == DMA_REQSRC_U32K1) ||\ + ((__REQSRC__) == DMA_REQSRC_CMP1) ||\ + ((__REQSRC__) == DMA_REQSRC_CMP2) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI3TX) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI3RX) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI2TX) ||\ + ((__REQSRC__) == DMA_REQSRC_SPI2RX)) + + +//DestAddrMode +#define DMA_DESTADDRMODE_FIX (0x0U << DMA_CCTL_DMODE_Pos) /*!< 0x00000000 */ +#define DMA_DESTADDRMODE_PEND (0x1U << DMA_CCTL_DMODE_Pos) /*!< 0x00000020 */ +#define DMA_DESTADDRMODE_FEND (0x2U << DMA_CCTL_DMODE_Pos) /*!< 0x00000040 */ +#define IS_DMA_DESTADDRMOD(__DAM__) (((__DAM__) == DMA_DESTADDRMODE_FIX) ||\ + ((__DAM__) == DMA_DESTADDRMODE_PEND) ||\ + ((__DAM__) == DMA_DESTADDRMODE_FEND)) + +//SrcAddrMode +#define DMA_SRCADDRMODE_FIX (0x0U << DMA_CCTL_SMODE_Pos) /*!< 0x00000000 */ +#define DMA_SRCADDRMODE_PEND (0x1U << DMA_CCTL_SMODE_Pos) /*!< 0x00000008 */ +#define DMA_SRCADDRMODE_FEND (0x2U << DMA_CCTL_SMODE_Pos) /*!< 0x00000010 */ +#define IS_DMA_SRCADDRMOD(__SAM__) (((__SAM__) == DMA_SRCADDRMODE_FIX) ||\ + ((__SAM__) == DMA_SRCADDRMODE_PEND) ||\ + ((__SAM__) == DMA_SRCADDRMODE_FEND)) + +//TransSize +#define DMA_TRANSSIZE_BYTE (0x0U << DMA_CCTL_SIZE_Pos) +#define DMA_TRANSSIZE_HWORD (0x1U << DMA_CCTL_SIZE_Pos) +#define DMA_TRANSSIZE_WORD (0x2U << DMA_CCTL_SIZE_Pos) +#define IS_DMA_TRANSSIZE(__TSIZE__) (((__TSIZE__) == DMA_TRANSSIZE_BYTE) ||\ + ((__TSIZE__) == DMA_TRANSSIZE_HWORD) ||\ + ((__TSIZE__) == DMA_TRANSSIZE_WORD)) + +#define IS_DMA_ALIGNEDADDR_WORD(__ADDRW__) (((__ADDRW__) & 0x3U) == 0U) +#define IS_DMA_ALIGNEDADDR_HWORD(__ADDRHW__) (((__ADDRHW__) & 0x1U) == 0U) + +typedef struct +{ + uint32_t Mode; /* AES mode */ + uint32_t Direction; /* Direction */ + uint32_t *KeyStr; /* AES key */ +} DMA_AESInitType; + +//AES MODE +#define DMA_AESMODE_128 (0x0U << DMA_AESCTL_MODE_Pos) /*!< 0x00000000 */ +#define DMA_AESMODE_192 (0x1U << DMA_AESCTL_MODE_Pos) /*!< 0x00000004 */ +#define DMA_AESMODE_256 (0x2U << DMA_AESCTL_MODE_Pos) /*!< 0x00000008 */ +#define IS_DMA_AESMOD(__AESMOD__) (((__AESMOD__) == DMA_AESMODE_128) ||\ + ((__AESMOD__) == DMA_AESMODE_192) ||\ + ((__AESMOD__) == DMA_AESMODE_256)) + +//AES Direction +#define DMA_AESDIRECTION_ENCODE DMA_AESCTL_ENC +#define DMA_AESDIRECTION_DECODE 0 +#define IS_DMA_AESDIR(__AESDIR__) (((__AESDIR__) == DMA_AESDIRECTION_ENCODE) ||\ + ((__AESDIR__) == DMA_AESDIRECTION_DECODE)) + +//INT +#define DMA_INT_C3DA DMA_IE_C3DAIE +#define DMA_INT_C2DA DMA_IE_C2DAIE +#define DMA_INT_C1DA DMA_IE_C1DAIE +#define DMA_INT_C0DA DMA_IE_C0DAIE +#define DMA_INT_C3FE DMA_IE_C3FEIE +#define DMA_INT_C2FE DMA_IE_C2FEIE +#define DMA_INT_C1FE DMA_IE_C1FEIE +#define DMA_INT_C0FE DMA_IE_C0FEIE +#define DMA_INT_C3PE DMA_IE_C3PEIE +#define DMA_INT_C2PE DMA_IE_C2PEIE +#define DMA_INT_C1PE DMA_IE_C1PEIE +#define DMA_INT_C0PE DMA_IE_C0PEIE +#define DMA_INT_Msk (0xFFFUL) +#define IS_DMA_INT(__INT__) ((((__INT__) & DMA_INT_Msk) != 0U) &&\ + (((__INT__) & ~DMA_INT_Msk) == 0U)) + +//INTSTS +#define DMA_INTSTS_C3DA DMA_STS_C3DA +#define DMA_INTSTS_C2DA DMA_STS_C2DA +#define DMA_INTSTS_C1DA DMA_STS_C1DA +#define DMA_INTSTS_C0DA DMA_STS_C0DA +#define DMA_INTSTS_C3FE DMA_STS_C3FE +#define DMA_INTSTS_C2FE DMA_STS_C2FE +#define DMA_INTSTS_C1FE DMA_STS_C1FE +#define DMA_INTSTS_C0FE DMA_STS_C0FE +#define DMA_INTSTS_C3PE DMA_STS_C3PE +#define DMA_INTSTS_C2PE DMA_STS_C2PE +#define DMA_INTSTS_C1PE DMA_STS_C1PE +#define DMA_INTSTS_C0PE DMA_STS_C0PE +#define DMA_INTSTS_C3BUSY DMA_STS_C3BUSY +#define DMA_INTSTS_C2BUSY DMA_STS_C2BUSY +#define DMA_INTSTS_C1BUSY DMA_STS_C1BUSY +#define DMA_INTSTS_C0BUSY DMA_STS_C0BUSY +#define DMA_INTSTS_Msk (0xFFF0UL) + +#define IS_DMA_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == DMA_INTSTS_C3DA) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C2DA) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C1DA) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C0DA) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C3FE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C2FE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C1FE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C0FE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C3PE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C2PE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C1PE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C0PE) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C3BUSY) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C2BUSY) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C1BUSY) ||\ + ((__INTFLAGR__) == DMA_INTSTS_C0BUSY)) + +#define IS_DMA_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & DMA_INTSTS_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~DMA_INTSTS_Msk) == 0U)) + +#define IS_DMA_CHANNEL(__CH__) (((__CH__) == DMA_CHANNEL_0) ||\ + ((__CH__) == DMA_CHANNEL_1) ||\ + ((__CH__) == DMA_CHANNEL_2) ||\ + ((__CH__) == DMA_CHANNEL_3)) + +/* Exported Functions ------------------------------------------------------- */ +/* DMA Exported Functions Group1: + (De)Initialization ------------------------*/ +void DMA_DeInit(uint32_t Channel); +void DMA_Init(DMA_InitType *InitStruct, uint32_t Channel); +void DMA_StructInit(DMA_InitType *InitStruct); +void DMA_AESDeInit(void); +void DMA_AESInit(DMA_AESInitType *InitStruct); +/* DMA Exported Functions Group2: + Interrupt (flag) --------------------------*/ +void DMA_INTConfig(uint32_t INTMask, uint32_t NewState); +uint8_t DMA_GetINTStatus(uint32_t INTMask); +void DMA_ClearINTStatus(uint32_t INTMask); +/* DMA Exported Functions Group3: + MISC Configuration ------------------------*/ +void DMA_Cmd(uint32_t Channel, uint32_t NewState); +void DMA_AESCmd(uint32_t NewState); +void DMA_StopTransmit(uint32_t Channel, uint32_t NewState); +uint8_t DMA_GetFrameLenTransferred(uint32_t Channel); +uint8_t DMA_GetPackLenTransferred(uint32_t Channel); + + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_DMA_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_flash.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_flash.h new file mode 100644 index 0000000000..f871a2e383 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_flash.h @@ -0,0 +1,159 @@ +/** + ****************************************************************************** + * @file lib_flash.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief FLASH library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_FLASH_H +#define __LIB_FLASH_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +#define FLASH_BLOCK_0 (0x00000001UL) +#define FLASH_BLOCK_1 (0x00000002UL) +#define FLASH_BLOCK_2 (0x00000004UL) +#define FLASH_BLOCK_3 (0x00000008UL) +#define FLASH_BLOCK_4 (0x00000010UL) +#define FLASH_BLOCK_5 (0x00000020UL) +#define FLASH_BLOCK_6 (0x00000040UL) +#define FLASH_BLOCK_7 (0x00000080UL) +#define FLASH_BLOCK_8 (0x00000100UL) +#define FLASH_BLOCK_9 (0x00000200UL) +#define FLASH_BLOCK_10 (0x00000400UL) +#define FLASH_BLOCK_11 (0x00000800UL) +#define FLASH_BLOCK_12 (0x00001000UL) +#define FLASH_BLOCK_13 (0x00002000UL) +#define FLASH_BLOCK_14 (0x00004000UL) +#define FLASH_BLOCK_15 (0x00008000UL) +#define FLASH_BLOCK_16 (0x00010000UL) +#define FLASH_BLOCK_17 (0x00020000UL) +#define FLASH_BLOCK_18 (0x00040000UL) +#define FLASH_BLOCK_19 (0x00080000UL) +#define FLASH_BLOCK_20 (0x00100000UL) +#define FLASH_BLOCK_21 (0x00200000UL) +#define FLASH_BLOCK_22 (0x00400000UL) +#define FLASH_BLOCK_23 (0x00800000UL) +#define FLASH_BLOCK_24 (0x01000000UL) +#define FLASH_BLOCK_25 (0x02000000UL) +#define FLASH_BLOCK_26 (0x04000000UL) +#define FLASH_BLOCK_27 (0x08000000UL) +#define FLASH_BLOCK_28 (0x10000000UL) +#define FLASH_BLOCK_29 (0x20000000UL) +#define FLASH_BLOCK_30 (0x40000000UL) +#define FLASH_BLOCK_31 (0x80000000UL) +#define FLASH_BLOCK_Msk (0xFFFFFFFFUL) +#define FLASH_BLOCK_ALL FLASH_BLOCK_Msk +#define IS_FLASH_RWBLOCK(__BLOCK__) ((((__BLOCK__) & FLASH_BLOCK_Msk) != 0UL) &&\ + (((__BLOCK__) & ~FLASH_BLOCK_Msk) == 0UL)) + +#define IS_FLASH_BLOCK(__BLOCK__) (((__BLOCK__) == FLASH_BLOCK_0) ||\ + ((__BLOCK__) == FLASH_BLOCK_1) ||\ + ((__BLOCK__) == FLASH_BLOCK_2) ||\ + ((__BLOCK__) == FLASH_BLOCK_3) ||\ + ((__BLOCK__) == FLASH_BLOCK_4) ||\ + ((__BLOCK__) == FLASH_BLOCK_5) ||\ + ((__BLOCK__) == FLASH_BLOCK_6) ||\ + ((__BLOCK__) == FLASH_BLOCK_7) ||\ + ((__BLOCK__) == FLASH_BLOCK_8) ||\ + ((__BLOCK__) == FLASH_BLOCK_9) ||\ + ((__BLOCK__) == FLASH_BLOCK_10) ||\ + ((__BLOCK__) == FLASH_BLOCK_11) ||\ + ((__BLOCK__) == FLASH_BLOCK_12) ||\ + ((__BLOCK__) == FLASH_BLOCK_13) ||\ + ((__BLOCK__) == FLASH_BLOCK_14) ||\ + ((__BLOCK__) == FLASH_BLOCK_15) ||\ + ((__BLOCK__) == FLASH_BLOCK_16) ||\ + ((__BLOCK__) == FLASH_BLOCK_17) ||\ + ((__BLOCK__) == FLASH_BLOCK_18) ||\ + ((__BLOCK__) == FLASH_BLOCK_19) ||\ + ((__BLOCK__) == FLASH_BLOCK_20) ||\ + ((__BLOCK__) == FLASH_BLOCK_21) ||\ + ((__BLOCK__) == FLASH_BLOCK_22) ||\ + ((__BLOCK__) == FLASH_BLOCK_23) ||\ + ((__BLOCK__) == FLASH_BLOCK_24) ||\ + ((__BLOCK__) == FLASH_BLOCK_25) ||\ + ((__BLOCK__) == FLASH_BLOCK_26) ||\ + ((__BLOCK__) == FLASH_BLOCK_27) ||\ + ((__BLOCK__) == FLASH_BLOCK_28) ||\ + ((__BLOCK__) == FLASH_BLOCK_29) ||\ + ((__BLOCK__) == FLASH_BLOCK_30) ||\ + ((__BLOCK__) == FLASH_BLOCK_31)) + +#define FLASH_READ (0) +#define FLASH_WRITE (1) +#define IS_FLASH_OPERATION(__OPERATION__) (((__OPERATION__) == FLASH_READ) ||\ + ((__OPERATION__) == FLASH_WRITE)) + +/************** Bits definition for FLASH_CTRL register ******************/ +#define FLASH_CTRL_CSMODE_DISABLE (0x0U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000000 */ +#define FLASH_CTRL_CSMODE_ALWAYSON (0x1U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000001 */ +#define FLASH_CTRL_CSMODE_TIM2OV (0x2U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000002 */ +#define FLASH_CTRL_CSMODE_RTC (0x3U << FLASH_CTRL_CSMODE_Pos) /*!< 0x00000003 */ + +//CSMode +#define FLASH_CSMODE_DISABLE FLASH_CTRL_CSMODE_DISABLE +#define FLASH_CSMODE_ALWAYSON FLASH_CTRL_CSMODE_ALWAYSON +#define FLASH_CSMODE_TMR2OV FLASH_CTRL_CSMODE_TIM2OV +#define FLASH_CSMODE_RTC FLASH_CTRL_CSMODE_RTC +#define IS_FLASH_CSMODE(__CSMODE__) (((__CSMODE__) == FLASH_CSMODE_DISABLE) ||\ + ((__CSMODE__) == FLASH_CSMODE_ALWAYSON) ||\ + ((__CSMODE__) == FLASH_CSMODE_TMR2OV) ||\ + ((__CSMODE__) == FLASH_CSMODE_RTC)) + +//INT +#define FLASH_INT_CS FLASH_CTRL_CSINTEN +#define IS_FLASH_INT(__INT__) ((__INT__) == FLASH_INT_CS) + +//WriteStatus +#define FLASH_WSTA_BUSY 0 +#define FLASH_WRITE_FINISH 1 +#define FLASH_WSTA_FINISH FLASH_WRITE_FINISH + +#define IS_FLASH_ADDRESS(__ADDRESS__) ((__ADDRESS__) < 0x80000UL) + +#define IS_FLASH_ADRRW(__ADDRW__) (((__ADDRW__) < 0x80000UL) &&\ + (((__ADDRW__) & 0x3U) == 0U)) + +#define IS_FLASH_ADRRHW(__ADDRHW__) (((__ADDRHW__) < 0x80000UL) &&\ + (((__ADDRHW__) & 0x1U) == 0U)) + +#define IS_FLASH_CHECKSUMADDR(__ADDRESS1__,__ADDRESS2__) (((__ADDRESS1__) < 0x80000) && ((__ADDRESS2__) < 0x80000) && ((__ADDRESS1__) < (__ADDRESS2__))) + +/* Exported Functions ------------------------------------------------------- */ + +void FLASH_Init(uint32_t CSMode); +void FLASH_INTConfig(uint32_t IntMask, uint32_t NewState); +void FLASH_CycleInit(void); +void FLASH_SectorErase(uint32_t SectorAddr); +void FLASH_ChipErase(void); +void FLASH_ProgramWord(uint32_t Addr, uint32_t *WordBuffer, uint32_t Length); +void FLASH_ProgramHWord(uint32_t Addr, uint16_t *HWordBuffer, uint32_t Length); +void FLASH_ProgramByte(uint32_t Addr, uint8_t *ByteBuffer, uint32_t Length); +void FLASH_SetReadProtection(uint32_t Block); +void FLASH_WriteProtection(uint32_t Block, uint32_t NewState); +void FLASH_ICEProtection(uint32_t NewState); +uint8_t FLASH_GetProtectionStatus(uint32_t Block, uint32_t Operation); +uint32_t FLASH_GetAllProtectionStatus(uint32_t Operation); +void FLASH_SetCheckSumRange(uint32_t AddrStart, uint32_t AddrEnd); +void FLASH_SetCheckSumCompValue(uint32_t Checksum); +uint32_t FLASH_GetCheckSum(void); +uint8_t FLASH_GetINTStatus(uint32_t IntMask); +void FLASH_ClearINTStatus(uint32_t IntMask); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_FLASH_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_gpio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_gpio.h new file mode 100644 index 0000000000..5e49c5abdf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_gpio.h @@ -0,0 +1,215 @@ +/** + ****************************************************************************** + * @file lib_gpio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief GPIO library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_GPIO_H +#define __LIB_GPIO_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +#define GET_BITBAND_ADDR(addr, bitnum) ((((uint32_t)addr) & 0xF0000000) + \ + 0x2000000 + ((((uint32_t)addr) & 0xFFFFF) << 5) + (bitnum << 2)) + +typedef struct +{ + uint32_t GPIO_Pin; + uint32_t GPIO_Mode; +} GPIO_InitType; + +typedef struct +{ + __IO uint32_t DATBitBand[16]; +} GPIO_DATInitType; + +#define GPIO_A ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x40014018,0))) +#define GPIO_B ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x40000028,0))) +#define GPIO_C ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x40000048,0))) +#define GPIO_D ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x40000068,0))) +#define GPIO_E ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x40000088,0))) +#define GPIO_F ((GPIO_DATInitType*) (uint32_t)(GET_BITBAND_ADDR(0x400000A8,0))) +#define IS_GPIO_DAT(__GPIODAT__) (((__GPIODAT__) == GPIO_A) ||\ + ((__GPIODAT__) == GPIO_B) ||\ + ((__GPIODAT__) == GPIO_C) ||\ + ((__GPIODAT__) == GPIO_D) ||\ + ((__GPIODAT__) == GPIO_E) ||\ + ((__GPIODAT__) == GPIO_F)) + +#define IS_GPIO_PINNUM(__PINNUM__) ((__PINNUM__) < 16U) + +#define IS_GPIO_BITVAL(__BITVAL__) (((__BITVAL__) == 1U) || ((__BITVAL__) == 0U)) + +//GPIO_Pin +#define GPIO_Pin_0 ((uint16_t)0x0001) +#define GPIO_Pin_1 ((uint16_t)0x0002) +#define GPIO_Pin_2 ((uint16_t)0x0004) +#define GPIO_Pin_3 ((uint16_t)0x0008) +#define GPIO_Pin_4 ((uint16_t)0x0010) +#define GPIO_Pin_5 ((uint16_t)0x0020) +#define GPIO_Pin_6 ((uint16_t)0x0040) +#define GPIO_Pin_7 ((uint16_t)0x0080) +#define GPIO_Pin_8 ((uint16_t)0x0100) +#define GPIO_Pin_9 ((uint16_t)0x0200) +#define GPIO_Pin_10 ((uint16_t)0x0400) +#define GPIO_Pin_11 ((uint16_t)0x0800) +#define GPIO_Pin_12 ((uint16_t)0x1000) +#define GPIO_Pin_13 ((uint16_t)0x2000) +#define GPIO_Pin_14 ((uint16_t)0x4000) +#define GPIO_Pin_15 ((uint16_t)0x8000) +#define GPIO_Pin_All ((uint16_t)0xFFFF) +#define IS_GPIO_PIN(__PIN__) ((((__PIN__) & GPIO_Pin_All) != 0UL) &&\ + (((__PIN__) & ~GPIO_Pin_All) == 0UL)) +#define IS_GPIO_PINR(__PINR__) (((__PINR__) == GPIO_Pin_0) ||\ + ((__PINR__) == GPIO_Pin_1) ||\ + ((__PINR__) == GPIO_Pin_2) ||\ + ((__PINR__) == GPIO_Pin_3) ||\ + ((__PINR__) == GPIO_Pin_4) ||\ + ((__PINR__) == GPIO_Pin_5) ||\ + ((__PINR__) == GPIO_Pin_6) ||\ + ((__PINR__) == GPIO_Pin_7) ||\ + ((__PINR__) == GPIO_Pin_8) ||\ + ((__PINR__) == GPIO_Pin_9) ||\ + ((__PINR__) == GPIO_Pin_10) ||\ + ((__PINR__) == GPIO_Pin_11) ||\ + ((__PINR__) == GPIO_Pin_12) ||\ + ((__PINR__) == GPIO_Pin_13) ||\ + ((__PINR__) == GPIO_Pin_14) ||\ + ((__PINR__) == GPIO_Pin_15)) + +//GPIO_Mode +#define GPIO_MODE_INPUT (0xCU) +#define GPIO_MODE_OUTPUT_CMOS (0x2U) +#define GPIO_MODE_OUTPUT_OD (0x3U) +#define GPIO_MODE_INOUT_OD (0xBU) +#define GPIO_MODE_INOUT_CMOS (0xAU) +#define GPIO_MODE_FORBIDDEN (0x4U) +#define IS_GPIO_MODE(__MODE__) (((__MODE__) == GPIO_MODE_INPUT) ||\ + ((__MODE__) == GPIO_MODE_OUTPUT_CMOS) ||\ + ((__MODE__) == GPIO_MODE_OUTPUT_OD) ||\ + ((__MODE__) == GPIO_MODE_INOUT_OD) ||\ + ((__MODE__) == GPIO_MODE_INOUT_CMOS) ||\ + ((__MODE__) == GPIO_MODE_FORBIDDEN)) + +/************** Bits definition for IO_MISC register ******************/ +#define IO_MISC_PLLHDIV_1 (0x0U << GPIOAF_IO_MISC_PLLHDIV_Pos) +#define IO_MISC_PLLHDIV_2 (0x1U << GPIOAF_IO_MISC_PLLHDIV_Pos) +#define IO_MISC_PLLHDIV_4 (0x2U << GPIOAF_IO_MISC_PLLHDIV_Pos) +#define IO_MISC_PLLHDIV_8 (0x3U << GPIOAF_IO_MISC_PLLHDIV_Pos) +#define IO_MISC_PLLHDIV_16 (0x4U << GPIOAF_IO_MISC_PLLHDIV_Pos) + +//GPIO AF +#define GPIOB_AF_PLLHDIV GPIOAF_IOB_SEL_SEL1 +#define GPIOB_AF_PLLLOUT GPIOAF_IOB_SEL_SEL2 +#define GPIOB_AF_OSC GPIOAF_IOB_SEL_SEL6 +#define GPIOE_AF_CMP1O GPIOAF_IOE_SEL_SEL7 +#define IS_GPIO_GPIOAF(__GPIOAF__) (((__GPIOAF__) == GPIOB_AF_PLLHDIV) ||\ + ((__GPIOAF__) == GPIOB_AF_PLLLOUT) ||\ + ((__GPIOAF__) == GPIOB_AF_OSC) ||\ + ((__GPIOAF__) == GPIOE_AF_CMP1O)) + +#define IS_GPIOB_GPIOAF(__GPIOAF__) (((__GPIOAF__) == GPIOB_AF_PLLHDIV) ||\ + ((__GPIOAF__) == GPIOB_AF_PLLLOUT) ||\ + ((__GPIOAF__) == GPIOB_AF_OSC)) + +#define IS_GPIOE_GPIOAF(__GPIOAF__) ((__GPIOAF__) == GPIOE_AF_CMP1O) + + +//PMUIO AF +#define PMUIO7_AF_PLLDIV GPIOA_SEL_SEL7 +#define PMUIO6_AF_CMP2O GPIOA_SEL_SEL6 +#define PMUIO3_AF_PLLDIV GPIOA_SEL_SEL3 +#define PMUIO_AF_Msk (PMUIO7_AF_PLLDIV | PMUIO6_AF_CMP2O | PMUIO3_AF_PLLDIV) + +//GPIO pin remap +#define GPIO_REMAP_I2C GPIOAF_IO_MISC_I2CIOC +#define IS_GPIO_REMAP(__REMAP__) ((__REMAP__) == GPIO_REMAP_I2C) + +//PLLDIV +#define GPIO_PLLDIV_1 IO_MISC_PLLHDIV_1 +#define GPIO_PLLDIV_2 IO_MISC_PLLHDIV_2 +#define GPIO_PLLDIV_4 IO_MISC_PLLHDIV_4 +#define GPIO_PLLDIV_8 IO_MISC_PLLHDIV_8 +#define GPIO_PLLDIV_16 IO_MISC_PLLHDIV_16 +#define IS_GPIO_PLLDIV(__PLLDIV__) (((__PLLDIV__) == GPIO_PLLDIV_1) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_2) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_4) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_8) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_16)) + + +#define IS_GPIO_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOB) || \ + ((INSTANCE) == GPIOC) || \ + ((INSTANCE) == GPIOD) || \ + ((INSTANCE) == GPIOE) || \ + ((INSTANCE) == GPIOF)) + +#define IS_PMUIO_ALL_INSTANCE(INSTANCE) ((INSTANCE) == GPIOA) + +#define IS_GPIOAF_ALL_INSTANCE(INSTANCE) (((INSTANCE) == GPIOB) || \ + ((INSTANCE) == GPIOE)) + +#define IS_GPIOE_GPIOAF(__GPIOAF__) ((__GPIOAF__) == GPIOE_AF_CMP1O) + +#define IS_GPIO_PMUIOAF(__PMUIOAF__) ((((__PMUIOAF__) & PMUIO_AF_Msk) != 0U) &&\ + (((__PMUIOAF__) & ~PMUIO_AF_Msk) == 0U)) + +#define IS_GPIO_REMAP(__REMAP__) ((__REMAP__) == GPIO_REMAP_I2C) + +#define IS_GPIO_PLLDIV(__PLLDIV__) (((__PLLDIV__) == GPIO_PLLDIV_1) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_2) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_4) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_8) ||\ + ((__PLLDIV__) == GPIO_PLLDIV_16)) + +/* Exported Functions ------------------------------------------------------- */ +/* GPIO Exported Functions Group1: + Initialization and functions --------------*/ +void GPIOBToF_Init(GPIO_Type *GPIOx, GPIO_InitType *InitStruct); +void GPIOA_Init(GPIOA_Type *GPIOx, GPIO_InitType *InitStruct); +/* GPIO Exported Functions Group2: + Read input data ---------------------------*/ +uint8_t GPIOBToF_ReadInputDataBit(GPIO_Type *GPIOx, uint16_t GPIO_Pin); +uint8_t GPIOA_ReadInputDataBit(GPIOA_Type *GPIOx, uint16_t GPIO_Pin); +uint16_t GPIOBToF_ReadInputData(GPIO_Type* GPIOx); +uint16_t GPIOA_ReadInputData(GPIOA_Type* GPIOx); +/* GPIO Exported Functions Group3: + Read output data --------------------------*/ +uint8_t GPIOBToF_ReadOutputDataBit(GPIO_Type* GPIOx, uint16_t GPIO_Pin); +uint8_t GPIOA_ReadOutputDataBit(GPIOA_Type* GPIOx, uint16_t GPIO_Pin); +uint16_t GPIOBToF_ReadOutputData(GPIO_Type* GPIOx); +uint16_t GPIOA_ReadOutputData(GPIOA_Type* GPIOx); +/* GPIO Exported Functions Group4: + Write output data -------------------------*/ +void GPIO_WriteBit(GPIO_DATInitType* DATx, uint8_t PinNum, uint8_t val); +void GPIOBToF_Write(GPIO_Type* GPIOx, uint16_t val); +void GPIOA_Write(GPIOA_Type* GPIOx, uint16_t val); +/* GPIO Exported Functions Group5: + IO AF configure ---------------------------*/ +void GPIOBToF_AFConfig(GPIO_Type* GPIOx, uint32_t GPIO_AFx, uint8_t NewState); +void GPIOA_AFConfig(uint32_t PMUIO_AFx, uint8_t NewState); +/* GPIO Exported Functions Group6: + IO Remap configure ------------------------*/ +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, uint8_t NewState); +/* GPIO Exported Functions Group7: + Others ------------------------------------*/ +void GPIO_PLLDIVConfig(uint32_t Divider); +void GPIOA_DeGlitchCmd( uint16_t GPIO_Pin, uint8_t NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_GPIO_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_i2c.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_i2c.h new file mode 100644 index 0000000000..280e36ba96 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_i2c.h @@ -0,0 +1,164 @@ +/** + ****************************************************************************** + * @file lib_i2c.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief IIC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_I2C_H +#define __LIB_I2C_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t SlaveAddr; + uint32_t GeneralCallAck; + uint32_t AssertAcknowledge; + uint32_t ClockSource; +} I2C_InitType; + +/************** Bits definition for I2C_CTRL register ******************/ +#define I2C_CTRL_CR_0 (0x0U << I2C_CTRL_CR0_Pos) /*!< 0x0000000 */ +#define I2C_CTRL_CR_1 (0x1U << I2C_CTRL_CR0_Pos) /*!< 0x0000001 */ +#define I2C_CTRL_CR_2 (0x2U << I2C_CTRL_CR0_Pos) /*!< 0x0000002 */ +#define I2C_CTRL_CR_3 (0x3U << I2C_CTRL_CR0_Pos) /*!< 0x0000003 */ +#define I2C_CTRL_CR_4 (0x80U << I2C_CTRL_CR0_Pos) /*!< 0x0000080 */ +#define I2C_CTRL_CR_5 (0x81U << I2C_CTRL_CR0_Pos) /*!< 0x0000081 */ +#define I2C_CTRL_CR_6 (0x82U << I2C_CTRL_CR0_Pos) /*!< 0x0000082 */ +#define I2C_CTRL_CR_7 (0x83U << I2C_CTRL_CR0_Pos) /*!< 0x0000083 */ + +/************** Bits definition for I2C_STS register ******************/ +#define I2C_STS_STS_0x00 (0x0U << I2C_STS_STS_Pos) /*!< 0x0000000 */ +#define I2C_STS_STS_0x08 (0x1U << I2C_STS_STS_Pos) /*!< 0x0000008 */ +#define I2C_STS_STS_0x10 (0x2U << I2C_STS_STS_Pos) /*!< 0x0000010 */ +#define I2C_STS_STS_0x18 (0x3U << I2C_STS_STS_Pos) /*!< 0x0000018 */ +#define I2C_STS_STS_0x20 (0x4U << I2C_STS_STS_Pos) /*!< 0x0000020 */ +#define I2C_STS_STS_0x28 (0x5U << I2C_STS_STS_Pos) /*!< 0x0000028 */ +#define I2C_STS_STS_0x30 (0x6U << I2C_STS_STS_Pos) /*!< 0x0000030 */ +#define I2C_STS_STS_0x38 (0x7U << I2C_STS_STS_Pos) /*!< 0x0000038 */ +#define I2C_STS_STS_0x40 (0x8U << I2C_STS_STS_Pos) /*!< 0x0000040 */ +#define I2C_STS_STS_0x48 (0x9U << I2C_STS_STS_Pos) /*!< 0x0000048 */ +#define I2C_STS_STS_0x50 (0xAU << I2C_STS_STS_Pos) /*!< 0x0000050 */ +#define I2C_STS_STS_0x58 (0xBU << I2C_STS_STS_Pos) /*!< 0x0000058 */ +#define I2C_STS_STS_0x60 (0xCU << I2C_STS_STS_Pos) /*!< 0x0000060 */ +#define I2C_STS_STS_0x68 (0xDU << I2C_STS_STS_Pos) /*!< 0x0000068 */ +#define I2C_STS_STS_0x70 (0xEU << I2C_STS_STS_Pos) /*!< 0x0000070 */ +#define I2C_STS_STS_0x78 (0xFU << I2C_STS_STS_Pos) /*!< 0x0000078 */ +#define I2C_STS_STS_0x80 (0x10U << I2C_STS_STS_Pos) /*!< 0x0000080 */ +#define I2C_STS_STS_0x88 (0x11U << I2C_STS_STS_Pos) /*!< 0x0000088 */ +#define I2C_STS_STS_0x90 (0x12U << I2C_STS_STS_Pos) /*!< 0x0000090 */ +#define I2C_STS_STS_0x98 (0x13U << I2C_STS_STS_Pos) /*!< 0x0000098 */ +#define I2C_STS_STS_0xA0 (0x14U << I2C_STS_STS_Pos) /*!< 0x00000A0 */ +#define I2C_STS_STS_0xA8 (0x15U << I2C_STS_STS_Pos) /*!< 0x00000A8 */ +#define I2C_STS_STS_0xB0 (0x16U << I2C_STS_STS_Pos) /*!< 0x00000B0 */ +#define I2C_STS_STS_0xB8 (0x17U << I2C_STS_STS_Pos) /*!< 0x00000B8 */ +#define I2C_STS_STS_0xC0 (0x18U << I2C_STS_STS_Pos) /*!< 0x00000C0 */ +#define I2C_STS_STS_0xC8 (0x19U << I2C_STS_STS_Pos) /*!< 0x00000C8 */ +#define I2C_STS_STS_0xF8 (0x1FU << I2C_STS_STS_Pos) /*!< 0x00000F8 */ + +//GeneralCallAck +#define I2C_GENERALCALLACK_ENABLE I2C_ADDR_GC +#define I2C_GENERALCALLACK_DISABLE 0 +//AssertAcknowledge +#define I2C_ASSERTACKNOWLEDGE_ENABLE I2C_CTRL_AA +#define I2C_ASSERTACKNOWLEDGE_DISABLE 0 +//ClockSource +#define I2C_CLOCKSOURCE_APBD256 I2C_CTRL_CR_0 +#define I2C_CLOCKSOURCE_APBD224 I2C_CTRL_CR_1 +#define I2C_CLOCKSOURCE_APBD192 I2C_CTRL_CR_2 +#define I2C_CLOCKSOURCE_APBD160 I2C_CTRL_CR_3 +#define I2C_CLOCKSOURCE_APBD960 I2C_CTRL_CR_4 +#define I2C_CLOCKSOURCE_APBD120 I2C_CTRL_CR_5 +#define I2C_CLOCKSOURCE_APBD60 I2C_CTRL_CR_6 +#define I2C_CLOCKSOURCE_TIM3OFD8 I2C_CTRL_CR_7 + +#define I2C_CTRL_CR (0x83) +typedef struct +{ + uint16_t SlaveAddr; + uint8_t SubAddrType; + uint32_t PageRange; + uint32_t SubAddress; + uint8_t *pBuffer; + uint32_t Length; +} I2C_WRType; +//SubAddrType +#define I2C_SUBADDR_1BYTE (1) +#define I2C_SUBADDR_2BYTE (2) +#define I2C_SUBADDR_OTHER (3) + +//remap +#define I2C_REMAP_ENABLE (1) +#define I2C_REMAP_DISABLE (0) + +/* Private macros ------------------------------------------------------------*/ + +#define IS_I2C_GC(__GC__) (((__GC__) == I2C_GENERALCALLACK_ENABLE) ||\ + ((__GC__) == I2C_GENERALCALLACK_DISABLE)) + +#define IS_I2C_AA(__AA__) (((__AA__) == I2C_ASSERTACKNOWLEDGE_ENABLE) ||\ + ((__AA__) == I2C_ASSERTACKNOWLEDGE_DISABLE)) + +#define IS_I2C_CLKSRC(__CLKSRC__) (((__CLKSRC__) == I2C_CLOCKSOURCE_APBD256) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD224) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD192) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD160) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD960) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD120) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_APBD60) ||\ + ((__CLKSRC__) == I2C_CLOCKSOURCE_TIM3OFD8)) + +#define I2C_SUBADDR_TYPE(__TYPE__) (((__TYPE__) == I2C_SUBADDR_1BYTE) ||\ + ((__TYPE__) == I2C_SUBADDR_2BYTE) ||\ + ((__TYPE__) == I2C_SUBADDR_OTHER)) + +/****************************** I2C Instances *********************************/ +#define IS_I2C_ALL_INSTANCE(INSTANCE) ((INSTANCE) == I2C) + + +/* Exported Functions ------------------------------------------------------- */ +/* I2C Exported Functions Group1: + (De)Initialization ------------------------*/ +void I2C_DeInit(uint32_t remap); +void I2C_StructInit(I2C_InitType *InitStruct); +void I2C_Init(I2C_InitType *InitStruct); +/* I2C Exported Functions Group2: + Interrupt ---------------------------------*/ +void I2C_INTConfig(uint32_t NewState); +uint8_t I2C_GetINTStatus(void); +void I2C_ClearINTStatus(void); +/* I2C Exported Functions Group3: + Transfer datas ----------------------------*/ +uint16_t I2C_MasterReadBytes(I2C_WRType *InitStruct); +uint16_t I2C_MasterWriteBytes(I2C_WRType *InitStruct); +/* I2C Exported Functions Group4: + MISC Configuration ------------------------*/ +void I2C_Cmd(uint32_t NewState); + +/* I2C Exported Functions Group5: + Others ------------------------------------*/ +void I2C_AssertAcknowledgeConfig(uint32_t NewState); +uint8_t I2C_ReceiveData(void); +void I2C_SendData(uint8_t Dat); +void I2C_GenerateSTART(uint32_t NewState); +void I2C_GenerateSTOP(uint32_t NewState); +uint8_t I2C_GetStatusCode(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_I2C_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_iso7816.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_iso7816.h new file mode 100644 index 0000000000..2c2cf10ba0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_iso7816.h @@ -0,0 +1,174 @@ +/** + ****************************************************************************** + * @file lib_iso7816.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ISO7816 library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_ISO7816_H +#define __LIB_ISO7816_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t FirstBit; + uint32_t Parity; + uint32_t Baudrate; + uint32_t TXRetry; + uint32_t RXACKLength; + uint32_t TXNACKLength; +} ISO7816_InitType; +//FirstBit +#define ISO7816_FIRSTBIT_MSB (0UL) +#define ISO7816_FIRSTBIT_LSB ISO7816_CFG_LSB +#define IS_ISO7816_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == ISO7816_FIRSTBIT_MSB) ||\ + ((__FIRSTBIT__) == ISO7816_FIRSTBIT_LSB)) +//Parity +#define ISO7816_PARITY_EVEN (0UL) +#define ISO7816_PARITY_ODD ISO7816_CFG_CHKP +#define IS_ISO7816_PARITY(__PARITY__) (((__PARITY__) == ISO7816_PARITY_EVEN) ||\ + ((__PARITY__) == ISO7816_PARITY_ODD)) +//Baudrate +#define IS_ISO7816_BAUDRATE(__BAUDRATE__) ((200UL <= (__BAUDRATE__)) &&\ + ((__BAUDRATE__) <= 2625000UL)) +//TXRetry +#define ISO7816_TXRTY_0 ((0x00U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_1 ((0x01U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_2 ((0x02U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_3 ((0x03U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_4 ((0x04U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_5 ((0x05U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_6 ((0x06U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_7 ((0x07U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_8 ((0x08U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_9 ((0x09U << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_10 ((0x0AU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_11 ((0x0BU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_12 ((0x0CU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_13 ((0x0DU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_14 ((0x0EU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define ISO7816_TXRTY_15 ((0x0FU << ISO7816_CFG_TXRTYCNT_Pos) \ + | (1U << 10)) +#define IS_ISO7816_TXRTY(__TXRTY__) (((__TXRTY__) == ISO7816_TXRTY_0) || \ + ((__TXRTY__) == ISO7816_TXRTY_1) || \ + ((__TXRTY__) == ISO7816_TXRTY_2) || \ + ((__TXRTY__) == ISO7816_TXRTY_3) || \ + ((__TXRTY__) == ISO7816_TXRTY_4) || \ + ((__TXRTY__) == ISO7816_TXRTY_5) || \ + ((__TXRTY__) == ISO7816_TXRTY_6) || \ + ((__TXRTY__) == ISO7816_TXRTY_7) || \ + ((__TXRTY__) == ISO7816_TXRTY_8) || \ + ((__TXRTY__) == ISO7816_TXRTY_9) || \ + ((__TXRTY__) == ISO7816_TXRTY_10) || \ + ((__TXRTY__) == ISO7816_TXRTY_11) || \ + ((__TXRTY__) == ISO7816_TXRTY_12) || \ + ((__TXRTY__) == ISO7816_TXRTY_13) || \ + ((__TXRTY__) == ISO7816_TXRTY_14) || \ + ((__TXRTY__) == ISO7816_TXRTY_15)) +//RXACKLength +#define ISO7816_RXACKLEN_2 (0UL) +#define ISO7816_RXACKLEN_1 (ISO7816_CFG_RXACKSET) +#define IS_ISO7816_RXACKLEN(__RXACKLEN__) (((__RXACKLEN__) == ISO7816_RXACKLEN_2) ||\ + ((__RXACKLEN__) == ISO7816_RXACKLEN_1)) +//TXNACKLength +#define ISO7816_TXNACKLEN_0 (0UL) +#define ISO7816_TXNACKLEN_1 (ISO7816_CFG_AUTORXACK) +#define ISO7816_TXNACKLEN_2 (ISO7816_CFG_AUTORXACK | ISO7816_CFG_ACKLEN) +#define IS_ISO7816_TXNACKLEN(__TXNACKLEN__) (((__TXNACKLEN__) == ISO7816_TXNACKLEN_0) ||\ + ((__TXNACKLEN__) == ISO7816_TXNACKLEN_1) ||\ + ((__TXNACKLEN__) == ISO7816_TXNACKLEN_2)) + +#define IS_ISO7816_PRESCALER(__PRESCALER__) ((__PRESCALER__) <= 0x80) + +//interrupt +#define ISO7816_INT_TXRTYERR ISO7816_CFG_TXRTYERRIE +#define ISO7816_INT_RXOV ISO7816_CFG_RXOVIE +#define ISO7816_INT_TXDONE ISO7816_CFG_TXDONEIE +#define ISO7816_INT_RX ISO7816_CFG_RXIE +#define ISO7816_INT_RXERR ISO7816_CFG_RXERRIE +#define ISO7816_INT_Msk (ISO7816_INT_TXRTYERR \ + |ISO7816_INT_RXOV \ + |ISO7816_INT_TXDONE \ + |ISO7816_INT_RX \ + |ISO7816_INT_RXERR) +#define IS_ISO7816_INT(__INT__) ((((__INT__) & ISO7816_INT_Msk) != 0U) &&\ + (((__INT__) & ~ISO7816_INT_Msk) == 0U)) + +//INTStatus +#define ISO7816_INTSTS_TXRTYERR ISO7816_INFO_TXRTYERRIF +#define ISO7816_INTSTS_RXOV ISO7816_INFO_RXOVIF +#define ISO7816_INTSTS_TXDONE ISO7816_INFO_TXDONEIF +#define ISO7816_INTSTS_RX ISO7816_INFO_RXIF +#define ISO7816_INTSTS_RXERR ISO7816_INFO_RXERRIF +#define ISO7816_INTSTS_Msk (ISO7816_INTSTS_TXRTYERR \ + |ISO7816_INTSTS_RXOV \ + |ISO7816_INTSTS_TXDONE \ + |ISO7816_INTSTS_RX \ + |ISO7816_INTSTS_RXERR) +#define IS_ISO7816_INTFLAGR(__INTFLAG__) (((__INTFLAG__) == ISO7816_INTSTS_TXRTYERR) ||\ + ((__INTFLAG__) == ISO7816_INTSTS_RXOV) ||\ + ((__INTFLAG__) == ISO7816_INTSTS_TXDONE) ||\ + ((__INTFLAG__) == ISO7816_INTSTS_RX) ||\ + ((__INTFLAG__) == ISO7816_INTSTS_RXERR)) + +#define IS_ISO7816_INTFLAGC(__INTFLAG__) ((((__INTFLAG__)&ISO7816_INTSTS_Msk) != 0U) &&\ + (((__INTFLAG__)&(~ISO7816_INTSTS_Msk)) == 0U)) +//status +#define ISO7816_FLAG_DMATXDONE ISO7816_INFO_DMATXDONE +#define IS_ISO7816_FLAGR(__FLAG__) ((__FLAG__) == ISO7816_FLAG_DMATXDONE) +#define IS_ISO7816_FLAGC(__FLAG__) ((__FLAG__) == ISO7816_FLAG_DMATXDONE) + +/****************************** ISO7816 Instances *****************************/ +#define IS_ISO7816_ALL_INSTANCE(INSTANCE) (((INSTANCE) == ISO78160) || \ + ((INSTANCE) == ISO78161)) + +/* Exported Functions ------------------------------------------------------- */ +void ISO7816_DeInit(ISO7816_Type *ISO7816x); +void ISO7816_StructInit(ISO7816_InitType *InitStruct); +void ISO7816_Init(ISO7816_Type *ISO7816x, ISO7816_InitType *Init_Struct); +void ISO7816_Cmd(ISO7816_Type *ISO7816x, uint32_t NewState); +void ISO7816_BaudrateConfig(ISO7816_Type *ISO7816x, uint32_t BaudRate); +void ISO7816_CLKDIVConfig(ISO7816_Type *ISO7816x, uint32_t Prescaler); +void ISO7816_CLKOutputCmd(ISO7816_Type *ISO7816x, uint32_t NewState); +void ISO7816_SendData(ISO7816_Type *ISO7816x, uint8_t ch); +uint8_t ISO7816_ReceiveData(ISO7816_Type *ISO7816x); +void ISO7816_INTConfig(ISO7816_Type *ISO7816x, uint32_t INTMask, uint8_t NewState); +uint8_t ISO7816_GetINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask); +void ISO7816_ClearINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask); +uint8_t ISO7816_GetFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask); +void ISO7816_ClearFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask); +uint8_t ISO7816_GetLastTransmitACK(ISO7816_Type *ISO7816x); +uint8_t ISO7816_GetLastReceiveCHKSUM(ISO7816_Type *ISO7816x); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_ISO7816_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_lcd.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_lcd.h new file mode 100644 index 0000000000..836806a6a3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_lcd.h @@ -0,0 +1,139 @@ +/** + ****************************************************************************** + * @file lib_lcd.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief LCD library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_LCD_H +#define __LIB_LCD_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/* LCD COMx IO typedef */ +typedef struct +{ + __IO uint32_t *GPIO; + uint16_t Pin; +}LCD_COMIO; + +typedef struct +{ + uint32_t Type; + uint32_t Drv; + uint32_t FRQ; + uint32_t SWPR; + uint32_t FBMODE; + uint32_t BKFILL; +} LCD_InitType; + +typedef struct +{ + uint32_t SegCtrl0; + uint32_t SegCtrl1; + uint16_t SegCtrl2; + uint32_t COMMode; +} LCD_IOInitType; + +/************** Bits definition for ANA_REG6 register ******************/ +#define ANA_REG6_VLCD_0 (0x0U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_1 (0x1U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_2 (0x2U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_3 (0x3U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_4 (0x4U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_5 (0x5U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_6 (0x6U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_7 (0x7U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_8 (0x8U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_9 (0x9U << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_A (0xAU << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_B (0xBU << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_C (0xCU << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_D (0xDU << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_E (0xEU << ANA_REG6_VLCD_Pos) +#define ANA_REG6_VLCD_F (0xFU << ANA_REG6_VLCD_Pos) + +/************** Bits definition for LCD_CTRL register ******************/ + +/************** Bits definition for LCD_CTRL2 register ******************/ + +//Type +#define LCD_TYPE_4COM (0x0U << LCD_CTRL_TYPE_Pos) /*!< 0x00000000 */ +#define LCD_TYPE_6COM (0x1U << LCD_CTRL_TYPE_Pos) /*!< 0x00000010 */ +#define LCD_TYPE_8COM (0x2U << LCD_CTRL_TYPE_Pos) /*!< 0x00000020 */ +#define IS_LCD_TYPE(__TYPE__) (((__TYPE__) == LCD_TYPE_4COM) ||\ + ((__TYPE__) == LCD_TYPE_6COM) ||\ + ((__TYPE__) == LCD_TYPE_8COM)) + +//DrivingRes +#define LCD_DRV_300 (0x0U << LCD_CTRL_DRV_Pos) /*!< 0x00000000 */ +#define LCD_DRV_600 (0x1U << LCD_CTRL_DRV_Pos) /*!< 0x00000004 */ +#define LCD_DRV_150 (0x2U << LCD_CTRL_DRV_Pos) /*!< 0x00000008 */ +#define LCD_DRV_200 (0x3U << LCD_CTRL_DRV_Pos) /*!< 0x0000000C */ +#define IS_LCD_DRV(__DRV__) (((__DRV__) == LCD_DRV_300) ||\ + ((__DRV__) == LCD_DRV_600) ||\ + ((__DRV__) == LCD_DRV_150) ||\ + ((__DRV__) == LCD_DRV_200)) + +//ScanFRQ +#define LCD_FRQ_64H (0x0U << LCD_CTRL_FRQ_Pos) /*!< 0x00000000 */ +#define LCD_FRQ_128H (0x1U << LCD_CTRL_FRQ_Pos) /*!< 0x00000001 */ +#define LCD_FRQ_256H (0x2U << LCD_CTRL_FRQ_Pos) /*!< 0x00000002 */ +#define LCD_FRQ_512H (0x3U << LCD_CTRL_FRQ_Pos) /*!< 0x00000003 */ +#define IS_LCD_FRQ(__FRQ__) (((__FRQ__) == LCD_FRQ_64H) ||\ + ((__FRQ__) == LCD_FRQ_128H) ||\ + ((__FRQ__) == LCD_FRQ_256H) ||\ + ((__FRQ__) == LCD_FRQ_512H)) + +#define IS_LCD_SWPR(__SWPR__) ((__SWPR__) <= 0xFFUL) + +//SwitchMode +#define LCD_FBMODE_BUFA (0x0U << LCD_CTRL2_FBMODE_Pos) /*!< 0x00000000 */ +#define LCD_FBMODE_BUFAB (0x1U << LCD_CTRL2_FBMODE_Pos) /*!< 0x00000040 */ +#define LCD_FBMODE_BUFABLANK (0x2U << LCD_CTRL2_FBMODE_Pos) /*!< 0x00000080 */ +#define IS_LCD_FBMODE(__FBMODE__) (((__FBMODE__) == LCD_FBMODE_BUFA) ||\ + ((__FBMODE__) == LCD_FBMODE_BUFAB) ||\ + ((__FBMODE__) == LCD_FBMODE_BUFABLANK)) + +//BlankFill +#define LCD_BKFILL_1 LCD_CTRL2_BKFILL +#define LCD_BKFILL_0 0 +#define IS_LCD_BKFILL(__BKFILL__) (((__BKFILL__) == LCD_BKFILL_1) || ((__BKFILL__) == LCD_BKFILL_0)) + +//BiasSelection +#define LCD_BMODE_DIV3 0 +#define LCD_BMODE_DIV4 ANA_REG6_LCDBMODE +#define IS_LCD_BMODE(__BMODE__) (((__BMODE__) == LCD_BMODE_DIV3) ||\ + ((__BMODE__) == LCD_BMODE_DIV4)) + +/****************************** LCD Instances *********************************/ +#define IS_LCD_ALL_INSTANCE(INSTANCE) ((INSTANCE) == LCD) + +/* Exported Functions ------------------------------------------------------- */ +/* LCD Exported Functions Group1: + (De)Initialization -------------------------*/ +void LCD_DeInit(void); +void LCD_StructInit(LCD_InitType *LCD_InitStruct); +void LCD_Init(LCD_InitType *InitStruct); +/* LCD Exported Functions Group1: + MISC Configuration -------------------------*/ +void LCD_Cmd(LCD_IOInitType *IOInitType, uint32_t NewState); +void LCD_BiasModeConfig(uint32_t BiasSelection); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_LCD_H */ + +/*********************************** END OF FILE ******************************/ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_misc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_misc.h new file mode 100644 index 0000000000..10169c4371 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_misc.h @@ -0,0 +1,85 @@ +/** + ****************************************************************************** + * @file lib_misc.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief MISC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_MISC_H +#define __LIB_MISC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +//FlagMask +#define MISC_FLAG_LOCKUP MISC1_SRAMINT_LOCKUP +#define MISC_FLAG_PIAC MISC1_SRAMINT_PIAC +#define MISC_FLAG_HIAC MISC1_SRAMINT_HIAC +#define MISC_FLAG_PERR MISC1_SRAMINT_PERR +#define MISC_FLAG_Msk (MISC_FLAG_LOCKUP | MISC_FLAG_PIAC | MISC_FLAG_HIAC | MISC_FLAG_PERR) + +//MISC interrupt +#define MISC_INT_LOCK MISC1_SRAMINIT_LOCKIE +#define MISC_INT_PIAC MISC1_SRAMINIT_PIACIE +#define MISC_INT_HIAC MISC1_SRAMINIT_HIACIE +#define MISC_INT_PERR MISC1_SRAMINIT_PERRIE +#define MISC_INT_Msk (MISC_INT_LOCK | MISC_INT_PIAC | MISC_INT_HIAC | MISC_INT_PERR) + +//IR +#define MISC_IREN_TX0 (0x01U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_TX1 (0x02U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_TX2 (0x04U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_TX3 (0x08U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_TX4 (0x10U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_TX5 (0x20U << MISC1_IREN_IREN_Pos) +#define MISC_IREN_Msk (0x3FUL) + +/* Private macros ------------------------------------------------------------*/ +#define IS_MISC_FLAGR(__FLAGR__) (((__FLAGR__) == MISC_FLAG_LOCKUP) ||\ + ((__FLAGR__) == MISC_FLAG_PIAC) ||\ + ((__FLAGR__) == MISC_FLAG_HIAC) ||\ + ((__FLAGR__) == MISC_FLAG_PERR)) + +#define IS_MISC_FLAGC(__FLAGC__) ((((__FLAGC__) & MISC_FLAG_Msk) != 0U) &&\ + (((__FLAGC__) & ~MISC_FLAG_Msk) == 0U)) + +#define IS_MISC_INT(__INT__) ((((__INT__) & MISC_INT_Msk) != 0U) &&\ + (((__INT__) &~MISC_INT_Msk) == 0U)) + +#define IS_MISC_IREN(__IREN__) ((((__IREN__) & MISC_IREN_Msk) != 0U) &&\ + (((__IREN__) & ~MISC_IREN_Msk) == 0U)) + +/****************************** MISC Instances ********************************/ +#define IS_MISC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == MISC1) + +#define IS_MISC2_ALL_INSTANCE(INSTANCE) ((INSTANCE) == MISC2) + +/* Exported Functions ------------------------------------------------------- */ +uint8_t MISC_GetFlag(uint32_t FlagMask); +void MISC_ClearFlag(uint32_t FlagMask); +void MISC_INTConfig(uint32_t INTMask, uint32_t NewState); +void MISC_SRAMParityCmd(uint32_t NewState); +uint32_t MISC_GetSRAMPEAddr(void); +uint32_t MISC_GetAPBErrAddr(void); +uint32_t MISC_GetAHBErrAddr(void); +void MISC_IRCmd(uint32_t IRx, uint32_t NewState); +void MISC_IRDutyConfig(uint16_t DutyHigh, uint16_t DutyLow); +void MISC_HardFaultCmd(uint32_t NewState); +void MISC_LockResetCmd(uint32_t NewState); +void MISC_IRQLATConfig(uint8_t Latency); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_MISC_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pmu.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pmu.h new file mode 100644 index 0000000000..041eec5210 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pmu.h @@ -0,0 +1,367 @@ +/** + ****************************************************************************** + * @file lib_pmu.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief PMU library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_PMU_H +#define __LIB_PMU_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/** + * Deep-sleep low-power configuration +*/ +typedef struct +{ + uint32_t CMP1Power; /* Comparator 1 power control */ + uint32_t CMP2Power; /* Comparator 2 power control */ + uint32_t TADCPower; /* Tiny ADC power control */ + uint32_t BGPPower; /* BGP power control */ + uint32_t AVCCPower; /* AVCC power control */ +// uint32_t LCDPower; /* LCD controller power control */ + uint32_t VDCINDetector; /* VDCIN detector control */ + uint32_t VDDDetector; /* VDD detector control */ + uint32_t AHBPeriphralDisable; /* AHB Periphral clock disable selection */ + uint32_t APBPeriphralDisable; /* APB Periphral clock disable selection */ +} PMU_LowPWRTypeDef; + +/************** Bits definition for ANA_REG8 register ******************/ +#define ANA_REG8_VDDPVDSEL_0 (0x0UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_1 (0x1UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_2 (0x2UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_3 (0x3UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_4 (0x4UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_5 (0x5UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_6 (0x6UL << ANA_REG8_VDDPVDSEL_Pos) +#define ANA_REG8_VDDPVDSEL_7 (0x7UL << ANA_REG8_VDDPVDSEL_Pos) + +/****************************** PMU Instances *********************************/ +#define IS_PMU_ALL_INSTANCE(INSTANCE) ((INSTANCE) == PMU) + +/****************************** PMU_RETRAM Instances **************************/ +#define IS_PMU_RETRAM_ALL_INSTANCE(INSTANCE) ((INSTANCE) == PMU_RETRAM) + +/* CMP1Power */ +#define PMU_CMP1PWR_ON (ANA_REG3_CMP1PDN) +#define PMU_CMP1PWR_OFF (0UL) +#define IS_PMU_COMP1PWR(__CMP1PWR__) (((__CMP1PWR__) == PMU_CMP1PWR_ON) ||\ + ((__CMP1PWR__) == PMU_CMP1PWR_OFF)) +/* CMP2Power */ +#define PMU_CMP2PWR_ON (ANA_REG3_CMP2PDN) +#define PMU_CMP2PWR_OFF (0UL) +#define IS_PMU_COMP2PWR(__CMP2PWR__) (((__CMP2PWR__) == PMU_CMP2PWR_ON) ||\ + ((__CMP2PWR__) == PMU_CMP2PWR_OFF)) +/* TADCPower */ +#define PMU_TADCPWR_ON (ANA_REGF_ADTPDN) +#define PMU_TADCPWR_OFF (0UL) +#define IS_PMU_TADCPWR(__TADCPWR__) (((__TADCPWR__) == PMU_TADCPWR_ON) ||\ + ((__TADCPWR__) == PMU_TADCPWR_OFF)) +/* BGPPower */ +#define PMU_BGPPWR_ON (0UL) +#define PMU_BGPPWR_OFF (ANA_REG3_BGPPD) +#define IS_PMU_BGPPWR(__BGPPWR__) (((__BGPPWR__) == PMU_BGPPWR_ON) ||\ + ((__BGPPWR__) == PMU_BGPPWR_OFF)) +/* AVCCPower */ +#define PMU_AVCCPWR_ON (0UL) +#define PMU_AVCCPWR_OFF (ANA_REG8_AVCCLDOPD) +#define IS_PMU_AVCCPWR(__AVCCPWR__) (((__AVCCPWR__) == PMU_AVCCPWR_ON) ||\ + ((__AVCCPWR__) == PMU_AVCCPWR_OFF)) + +/* VDCINDetector */ +#define PMU_VDCINDET_ENABLE (0UL) +#define PMU_VDCINDET_DISABLE (ANA_REGA_VDCINDETPD) +#define IS_PMU_VDCINDET(__VDCINDET__) (((__VDCINDET__) == PMU_VDCINDET_ENABLE) ||\ + ((__VDCINDET__) == PMU_VDCINDET_DISABLE)) + +/* VDDDetector */ +#define PMU_VDDDET_ENABLE (0UL) +#define PMU_VDDDET_DISABLE (ANA_REG9_VDDDETPD) +#define IS_PMU_VDDDET(__VDDDET__) (((__VDDDET__) == PMU_VDDDET_ENABLE) ||\ + ((__VDDDET__) == PMU_VDDDET_DISABLE)) + +#define PMU_APB_ALL (MISC2_PCLKEN_DMA \ + |MISC2_PCLKEN_I2C \ + |MISC2_PCLKEN_SPI1 \ + |MISC2_PCLKEN_UART0 \ + |MISC2_PCLKEN_UART1 \ + |MISC2_PCLKEN_UART2 \ + |MISC2_PCLKEN_UART3 \ + |MISC2_PCLKEN_UART4 \ + |MISC2_PCLKEN_UART5 \ + |MISC2_PCLKEN_ISO78160 \ + |MISC2_PCLKEN_ISO78161 \ + |MISC2_PCLKEN_TIMER \ + |MISC2_PCLKEN_MISC1 \ + |MISC2_PCLKEN_MISC2 \ + |MISC2_PCLKEN_U32K0 \ + |MISC2_PCLKEN_U32K1 \ + |MISC2_PCLKEN_SPI2 \ + |MISC2_PCLKEN_SPI3) +#define PMU_APB_DMA MISC2_PCLKEN_DMA +#define PMU_APB_I2C MISC2_PCLKEN_I2C +#define PMU_APB_SPI1 MISC2_PCLKEN_SPI1 +#define PMU_APB_UART0 MISC2_PCLKEN_UART0 +#define PMU_APB_UART1 MISC2_PCLKEN_UART1 +#define PMU_APB_UART2 MISC2_PCLKEN_UART2 +#define PMU_APB_UART3 MISC2_PCLKEN_UART3 +#define PMU_APB_UART4 MISC2_PCLKEN_UART4 +#define PMU_APB_UART5 MISC2_PCLKEN_UART5 +#define PMU_APB_ISO78160 MISC2_PCLKEN_ISO78160 +#define PMU_APB_ISO78161 MISC2_PCLKEN_ISO78161 +#define PMU_APB_TIMER MISC2_PCLKEN_TIMER +#define PMU_APB_MISC1 MISC2_PCLKEN_MISC1 +#define PMU_APB_U32K0 MISC2_PCLKEN_U32K0 +#define PMU_APB_U32K1 MISC2_PCLKEN_U32K1 +#define PMU_APB_SPI2 MISC2_PCLKEN_SPI2 +#define PMU_APB_SPI3 MISC2_PCLKEN_SPI3 + +#define PMU_AHB_ALL (MISC2_HCLKEN_DMA \ + |MISC2_HCLKEN_GPIO \ + |MISC2_HCLKEN_CRYPT \ + |MISC2_HCLKEN_LCD) +#define PMU_AHB_DMA MISC2_HCLKEN_DMA +#define PMU_AHB_GPIO MISC2_HCLKEN_GPIO +#define PMU_AHB_LCD MISC2_HCLKEN_LCD +#define PMU_AHB_CRYPT MISC2_HCLKEN_CRYPT + +//PMU interrupt +#define PMU_INT_IOAEN PMU_CONTROL_INT_IOA_EN +#define PMU_INT_32K PMU_CONTROL_INT_32K_EN +#define PMU_INT_6M PMU_CONTROL_INT_6M_EN +#define PMU_INT_Msk (PMU_INT_IOAEN \ + |PMU_INT_32K \ + |PMU_INT_6M) +#define IS_PMU_INT(__INT__) ((((__INT__)&PMU_INT_Msk) != 0UL) &&\ + (((__INT__)&(~PMU_INT_Msk)) == 0UL)) + +//INTStatus +#define PMU_INTSTS_32K PMU_STS_INT_32K +#define PMU_INTSTS_6M PMU_STS_INT_6M +#define PMU_INTSTS_Msk (PMU_INTSTS_32K \ + |PMU_INTSTS_6M) +#define IS_PMU_INTFLAGR(__INTFLAG__) (((__INTFLAG__) == PMU_INTSTS_32K) ||\ + ((__INTFLAG__) == PMU_INTSTS_6M)) + +#define IS_PMU_INTFLAGC(__INTFLAG__) ((((__INTFLAG__)&PMU_INTSTS_Msk) != 0UL) &&\ + (((__INTFLAG__)&(~PMU_INTSTS_Msk)) == 0UL)) + +/***** Reset Source Status *****/ +#define PMU_RSTSRC_EXTRST PMU_STS_EXTRST +#define PMU_RSTSRC_PORST PMU_STS_PORST +#define PMU_RSTSRC_DPORST PMU_STS_DPORST +#define PMU_RSTSRC_WDTRST PMU_STS_WDTRST +#define PMU_RSTSRC_SFTRST PMU_STS_SFTRST +#define PMU_RSTSRC_MODERST PMU_STS_MODERST +#define PMU_RSTSRC_Msk (PMU_RSTSRC_EXTRST |\ + PMU_RSTSRC_PORST |\ + PMU_RSTSRC_DPORST |\ + PMU_RSTSRC_WDTRST |\ + PMU_RSTSRC_SFTRST |\ + PMU_RSTSRC_MODERST) +#define PMU_RSTSRC_ALL PMU_RSTSRC_Msk +#define PMU_RESETSRC(__RSTSRC__) (((__RSTSRC__) == PMU_RSTSRC_EXTRST) ||\ + ((__RSTSRC__) == PMU_RSTSRC_PORST) ||\ + ((__RSTSRC__) == PMU_RSTSRC_DPORST) ||\ + ((__RSTSRC__) == PMU_RSTSRC_WDTRST) ||\ + ((__RSTSRC__) == PMU_RSTSRC_SFTRST) ||\ + ((__RSTSRC__) == PMU_RSTSRC_MODERST)) +#define PMU_RESETSRC_CLR(__RSTSRC__) ((((__RSTSRC__) & PMU_RSTSRC_Msk) != 0UL) &&\ + (((__RSTSRC__) & (~PMU_RSTSRC_Msk)) == 0UL)) + +/***** DeepSleep wakeup Source Status *****/ +#define PMU_DSLEEPWKUSRC_MODE PMU_STS_WKUMODE +#define PMU_DSLEEPWKUSRC_XTAL PMU_STS_WKUXTAL +#define PMU_DSLEEPWKUSRC_U32K PMU_STS_WKUU32K +#define PMU_DSLEEPWKUSRC_ANA PMU_STS_WKUANA +#define PMU_DSLEEPWKUSRC_RTC PMU_STS_WKURTC +#define PMU_DSLEEPWKUSRC_IOA PMU_STS_WKUIOA +#define PMU_DSLEEPWKUSRC_Msk (PMU_DSLEEPWKUSRC_MODE |\ + PMU_DSLEEPWKUSRC_XTAL |\ + PMU_DSLEEPWKUSRC_U32K |\ + PMU_DSLEEPWKUSRC_ANA |\ + PMU_DSLEEPWKUSRC_RTC |\ + PMU_DSLEEPWKUSRC_IOA) +#define IS_PMU_DSLEEPWKUSRC(__SRC__) (((__SRC__) == PMU_DSLEEPWKUSRC_MODE) ||\ + ((__SRC__) == PMU_DSLEEPWKUSRC_XTAL) ||\ + ((__SRC__) == PMU_DSLEEPWKUSRC_U32K) ||\ + ((__SRC__) == PMU_DSLEEPWKUSRC_ANA) ||\ + ((__SRC__) == PMU_DSLEEPWKUSRC_RTC) ||\ + ((__SRC__) == PMU_DSLEEPWKUSRC_IOA)) + + +//Status +#define PMU_STS_32K PMU_STS_EXIST_32K +#define PMU_STS_6M PMU_STS_EXIST_6M +#define IS_PMU_FLAG(__FLAG__) (((__FLAG__) == PMU_STS_32K) || ((__FLAG__) == PMU_STS_6M)) + +//Wakeup_Event +#define IOA_DISABLE (0UL) +#define IOA_RISING (1UL) +#define IOA_FALLING (2UL) +#define IOA_HIGH (3UL) +#define IOA_LOW (4UL) +#define IOA_EDGEBOTH (5UL) +#define IS_PMU_WAKEUP(__WAKEUP__) (((__WAKEUP__) == IOA_DISABLE) ||\ + ((__WAKEUP__) == IOA_RISING) ||\ + ((__WAKEUP__) == IOA_FALLING) ||\ + ((__WAKEUP__) == IOA_HIGH) ||\ + ((__WAKEUP__) == IOA_LOW) ||\ + ((__WAKEUP__) == IOA_EDGEBOTH)) + +/***** Wakeup_Event (PMU_SleepWKUSRCConfig_RTC) *****/ +#define PMU_RTCEVT_ALARM RTC_INTSTS_INTSTS10 +#define PMU_RTCEVT_WKUCNT RTC_INTSTS_INTSTS6 +#define PMU_RTCEVT_MIDNIGHT RTC_INTSTS_INTSTS5 +#define PMU_RTCEVT_WKUHOUR RTC_INTSTS_INTSTS4 +#define PMU_RTCEVT_WKUMIN RTC_INTSTS_INTSTS3 +#define PMU_RTCEVT_WKUSEC RTC_INTSTS_INTSTS2 +#define PMU_RTCEVT_TIMEILLE RTC_INTSTS_INTSTS1 +#define PMU_RTCEVT_ITVSITV RTC_INTSTS_INTSTS0 +#define PMU_RTCEVT_Msk (PMU_RTCEVT_WKUCNT \ + |PMU_RTCEVT_MIDNIGHT \ + |PMU_RTCEVT_WKUHOUR \ + |PMU_RTCEVT_WKUMIN \ + |PMU_RTCEVT_WKUSEC \ + |PMU_RTCEVT_TIMEILLE \ + |PMU_RTCEVT_ITVSITV \ + |PMU_RTCEVT_ALARM) +#define IS_PMU_RTCEVT(__RTCEVT__) ((((__RTCEVT__)&PMU_RTCEVT_Msk) != 0UL) &&\ + (((__RTCEVT__)&(~PMU_RTCEVT_Msk)) == 0UL)) + + +/***** BATRTCDisc (PMU_BATDischargeConfig) *****/ +#define PMU_BAT1 ANA_REG6_BAT1DISC +#define PMU_BATRTC ANA_REG6_BATRTCDISC +#define IS_PMU_BATRTCDISC(__BATRTCDISC__) (((__BATRTCDISC__) == PMU_BAT1) || ((__BATRTCDISC__) == PMU_BATRTC)) + +/***** PowerThreshold (PMU_PowerAlarmTHConfig) *****/ +#define PMU_VDDALARM_4_5V ANA_REG8_VDDPVDSEL_0 +#define PMU_VDDALARM_4_2V ANA_REG8_VDDPVDSEL_1 +#define PMU_VDDALARM_3_9V ANA_REG8_VDDPVDSEL_2 +#define PMU_VDDALARM_3_6V ANA_REG8_VDDPVDSEL_3 +#define PMU_VDDALARM_3_2V ANA_REG8_VDDPVDSEL_4 +#define PMU_VDDALARM_2_9V ANA_REG8_VDDPVDSEL_5 +#define PMU_VDDALARM_2_6V ANA_REG8_VDDPVDSEL_6 +#define PMU_VDDALARM_2_3V ANA_REG8_VDDPVDSEL_7 + +#define IS_PMU_VDDALARM_THR(__VDDALARM__) (((__VDDALARM__) == PMU_VDDALARM_4_5V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_4_2V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_3_9V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_3_6V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_3_2V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_2_9V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_2_6V) ||\ + ((__VDDALARM__) == PMU_VDDALARM_2_3V)) + +/***** RTCLDOSel (PMU_RTCLDOConfig) *****/ +#define PMU_RTCLDO_1_5 (0UL) +#define PMU_RTCLDO_1_2 ANA_REGA_RTCVSEL + +/***** StatusMask (PMU_GetPowerStatus) *****/ +#define PMU_PWRSTS_AVCCLV ANA_CMPOUT_AVCCLV +#define PMU_PWRSTS_VDCINDROP ANA_CMPOUT_VDCINDROP +#define PMU_PWRSTS_VDDALARM ANA_CMPOUT_VDDALARM + +/***** PMU_PDNDSleepConfig *****/ +//VDCIN_PDNS +#define PMU_VDCINPDNS_0 (0UL) +#define PMU_VDCINPDNS_1 (ANA_CTRL_PDNS) +#define IS_PMU_VDCINPDNS(__VDCINPDNS__) (((__VDCINPDNS__) == PMU_VDCINPDNS_0) ||\ + ((__VDCINPDNS__) == PMU_VDCINPDNS_1)) +//VDD_PDNS +#define PMU_VDDPDNS_0 (0UL) +#define PMU_VDDPDNS_1 (ANA_CTRL_PDNS2) +#define IS_PMU_VDDPDNS(__VDDPDNS__) (((__VDDPDNS__) == PMU_VDDPDNS_0) ||\ + ((__VDDPDNS__) == PMU_VDDPDNS_1)) + +#define PMU_VDDALARM_CHKFRE_NOCHECK (0x0UL << ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL_Pos) +#define PMU_VDDALARM_CHKFRE_30US (0x1UL << ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL_Pos) +#define IS_PMU_VDDALARM_CHKFRE(__CHKFRE__) (((__CHKFRE__) == PMU_VDDALARM_CHKFRE_NOCHECK) ||\ + ((__CHKFRE__) == PMU_VDDALARM_CHKFRE_30US)) + +#define IS_PMU_PWR_DEBSEL(__DEBSEL__) ((__DEBSEL__) < 256UL) + +#define PMU_VDCINHYSSEL_100MV (0x0UL << ANA_REG7_VDCINHYSSEL_Pos) +#define PMU_VDCINHYSSEL_200MV (0x1UL << ANA_REG7_VDCINHYSSEL_Pos) +#define IS_PMU_VDCIN_HYSSEL(__HYSSEL__) (((__HYSSEL__) == PMU_VDCINHYSSEL_100MV) ||\ + ((__HYSSEL__) == PMU_VDCINHYSSEL_200MV)) +/* Exported Functions ------------------------------------------------------- */ + +uint32_t PMU_EnterDSleepMode(void); +void PMU_EnterIdleMode(void); +uint32_t PMU_EnterSleepMode(void); + +void PMU_INTConfig(uint32_t INTMask, uint32_t NewState); +uint8_t PMU_GetINTStatus(uint32_t INTMask); +void PMU_ClearINTStatus(uint32_t INTMask); + +uint8_t PMU_GetCrystalStatus(uint32_t Mask); +uint16_t PMU_GetIOAAllINTStatus(void); +uint8_t PMU_GetIOAINTStatus(uint16_t INTMask); +void PMU_ClearIOAINTStatus(uint16_t INTMask); + +void PMU_WakeUpPinConfig(uint32_t IOAx, uint32_t Wakeup_Event); + +uint8_t PMU_EnterDSleep_LowPower(PMU_LowPWRTypeDef *InitStruct); +uint8_t PMU_EnterSleep_LowPower(PMU_LowPWRTypeDef *InitStruct); +#ifndef __GNUC__ +void PMU_EnterIdle_LowPower(void); +#endif +void PMU_SleepWKUSRCConfig_IOA(uint16_t IOAx, uint32_t Wakeup_Event, uint32_t Priority); +void PMU_SleepWKUSRCConfig_RTC(uint32_t Wakeup_Event, uint32_t Priority); +void PMU_DeepSleepWKUSRCConfig_IOA(uint16_t IOAx, uint32_t Wakeup_Event); +void PMU_DeepSleepWKUSRCConfig_RTC(uint32_t Wakeup_Event); +void PMU_PDNDSleepConfig(uint32_t VDCIN_PDNS, uint32_t VDD_PDNS); + +/***** BGP functions *****/ +void PMU_BGPCmd(uint32_t NewState); + +/***** VDD functions *****/ +void PMU_VDDAlarmConfig(uint32_t CheckTHR, uint32_t CheckFrequency); +uint8_t PMU_GetVDDAlarmStatus(void); + +/***** AVCC functions *****/ +void PMU_AVCCCmd(uint32_t NewState); +void PMU_AVCCOutputCmd(uint32_t NewState); +void PMU_AVCCLVDetectorCmd(uint32_t NewState); +uint8_t PMU_GetAVCCLVStatus(void); + +/***** VDCIN functions *****/ +void PMU_VDCINDetectorCmd(uint32_t NewState); +void PMU_VDCINHYSSEL(uint32_t HYSSEL); +uint8_t PMU_GetVDCINDropStatus(void); + +void PMU_PWRDEBSel(uint32_t DEBSel); + +/***** BAT functions *****/ +void PMU_BATDischargeConfig(uint32_t BATDisc, uint32_t NewState); + +/***** Other functions *****/ +uint8_t PMU_GetModeStatus(void); +uint8_t PMU_GetPowerStatus(uint32_t StatusMask); + +uint8_t PMU_GetResetSource(uint32_t Mask); +void PMU_ClearResetSource(uint32_t Mask); +uint32_t PMU_GetAllResetSource(void); + +uint8_t PMU_GetDSleepWKUSource(uint32_t Mask); +uint32_t PMU_GetAllDSleepWKUSource(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_PMU_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pwm.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pwm.h new file mode 100644 index 0000000000..1b194514bb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_pwm.h @@ -0,0 +1,258 @@ +/** + ****************************************************************************** + * @file lib_pwm.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief PWM library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_PWM_H +#define __LIB_PWM_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t ClockDivision; + uint32_t Mode; + uint32_t ClockSource; +} PWM_BaseInitType; + +/************** Bits definition for PWMx_CTL register ******************/ +#define PWM_CTL_TESL_APBDIV128 (0x0U << PWM_CTL_TSEL_Pos) /*!< 0x00000000 */ +#define PWM_CTL_TESL_APBDIV1 (0x1U << PWM_CTL_TSEL_Pos) /*!< 0x00000008 */ +#define PWM_CTL_MC_STOP (0x0U << PWM_CTL_MC_Pos) /*!< 0x00000000 */ +#define PWM_CTL_MC_UP (0x1U << PWM_CTL_MC_Pos) /*!< 0x00000010 */ +#define PWM_CTL_MC_CONTINUE (0x2U << PWM_CTL_MC_Pos) /*!< 0x00000020 */ +#define PWM_CTL_MC_UPDOWN (0x3U << PWM_CTL_MC_Pos) /*!< 0x00000030 */ +#define PWM_CTL_ID_DIV2 (0x0U << PWM_CTL_ID_Pos) /*!< 0x00000000 */ +#define PWM_CTL_ID_DIV4 (0x1U << PWM_CTL_ID_Pos) /*!< 0x00000040 */ +#define PWM_CTL_ID_DIV8 (0x2U << PWM_CTL_ID_Pos) /*!< 0x00000080 */ +#define PWM_CTL_ID_DIV16 (0x3U << PWM_CTL_ID_Pos) /*!< 0x000000C0 */ + +/************** Bits definition for PWMx_TAR register ******************/ + +/************** Bits definition for PWMx_CCTLy register ******************/ +////////////#define PWM_CCTL_OUTMOD_CONST (0x00UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_SET (0x01UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_TOGGLE_RESET (0x02UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_SET_RESET (0x03UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_TOGGLE (0x04UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_RESET (0x05UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_TOGGLE_SET (0x06UL << PWM_CCTL_OUTMOD_Pos) +#define PWM_CCTL_OUTMOD_RESET_SET (0x07UL << PWM_CCTL_OUTMOD_Pos) +//////////////////// + +//ClockDivision +#define PWM_CLKDIV_2 (0x0U << PWM_CTL_ID_Pos) +#define PWM_CLKDIV_4 (0x1U << PWM_CTL_ID_Pos) +#define PWM_CLKDIV_8 (0x2U << PWM_CTL_ID_Pos) +#define PWM_CLKDIV_16 (0x3U << PWM_CTL_ID_Pos) +#define IS_PWM_CLKDIV(__CLKDIV__) (((__CLKDIV__) == PWM_CLKDIV_2) ||\ + ((__CLKDIV__) == PWM_CLKDIV_4) ||\ + ((__CLKDIV__) == PWM_CLKDIV_8) ||\ + ((__CLKDIV__) == PWM_CLKDIV_16)) + +//Mode +#define PWM_MODE_STOP (0x0U << PWM_CTL_MC_Pos) +#define PWM_MODE_UPCOUNT (0x1U << PWM_CTL_MC_Pos) +#define PWM_MODE_CONTINUOUS (0x2U << PWM_CTL_MC_Pos) +#define PWM_MODE_UPDOWN (0x3U << PWM_CTL_MC_Pos) +#define IS_PWM_CNTMODE(__CNTMODE__) (((__CNTMODE__) == PWM_MODE_STOP) ||\ + ((__CNTMODE__) == PWM_MODE_UPCOUNT) ||\ + ((__CNTMODE__) == PWM_MODE_CONTINUOUS) ||\ + ((__CNTMODE__) == PWM_MODE_UPDOWN)) + +//ClockSource +#define PWM_CLKSRC_APB (0x1U << PWM_CTL_TSEL_Pos) +#define PWM_CLKSRC_APBD128 (0x0U << PWM_CTL_TSEL_Pos) +#define IS_PWM_CLKSRC(__CLKSRC__) (((__CLKSRC__) == PWM_CLKSRC_APB) ||\ + ((__CLKSRC__) == PWM_CLKSRC_APBD128)) + +typedef struct +{ + uint32_t Channel; + uint32_t Period; + uint32_t OutMode; +} PWM_OCInitType; +typedef struct +{ + uint32_t Channel; + uint32_t CaptureMode; +} PWM_ICInitType; +//Channel +#define PWM_CHANNEL_0 (0UL) +#define PWM_CHANNEL_1 (1UL) +#define PWM_CHANNEL_2 (2UL) +#define IS_PWM_CHANNEL(__CHANNEL__) (((__CHANNEL__) == PWM_CHANNEL_0) ||\ + ((__CHANNEL__) == PWM_CHANNEL_1) ||\ + ((__CHANNEL__) == PWM_CHANNEL_2)) +//OutMode +#define PWM_OUTMOD_CONST (0x0U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_SET (0x1U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_TOGGLE_RESET (0x2U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_SET_RESET (0x3U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_TOGGLE (0x4U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_RESET (0x5U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_TOGGLE_SET (0x6U << PWM_CCTL_OUTMOD_Pos) +#define PWM_OUTMOD_RESET_SET (0x7U << PWM_CCTL_OUTMOD_Pos) +#define IS_PWM_OUTMODE(__OUTMODE__) (((__OUTMODE__) == PWM_OUTMOD_CONST) ||\ + ((__OUTMODE__) == PWM_OUTMOD_SET) ||\ + ((__OUTMODE__) == PWM_OUTMOD_TOGGLE_RESET) ||\ + ((__OUTMODE__) == PWM_OUTMOD_SET_RESET) ||\ + ((__OUTMODE__) == PWM_OUTMOD_TOGGLE) ||\ + ((__OUTMODE__) == PWM_OUTMOD_RESET) ||\ + ((__OUTMODE__) == PWM_OUTMOD_TOGGLE_SET) ||\ + ((__OUTMODE__) == PWM_OUTMOD_RESET_SET)) + +//CaptureMode +#define PWM_CM_DISABLE (0x0U << PWM_CCTL_CM_Pos) +#define PWM_CM_RISING (0x1U << PWM_CCTL_CM_Pos) +#define PWM_CM_FALLING (0x2U << PWM_CCTL_CM_Pos) +#define PWM_CM_BOTH (0x3U << PWM_CCTL_CM_Pos) +#define IS_PWM_CAPMODE(__CAPMODE__) (((__CAPMODE__) == PWM_CM_DISABLE) ||\ + ((__CAPMODE__) == PWM_CM_RISING) ||\ + ((__CAPMODE__) == PWM_CM_FALLING) ||\ + ((__CAPMODE__) == PWM_CM_BOTH)) + +//Interrupt +#define PWM_INT_CCIFG PWM_CCTL_CCIFG +#define PWM_INT_COV PWM_CCTL_COV +#define PWM_INT_Msk (PWM_INT_CCIFG | PWM_INT_COV) +#define IS_PWM_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == PWM_INT_CCIFG) ||\ + ((__INTFLAGR__) == PWM_INT_COV)) +#define IS_PWM_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & PWM_INT_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~PWM_INT_Msk) == 0U)) + +//PWM output selection +#define PWM0_OUT0 0 +#define PWM0_OUT1 1 +#define PWM0_OUT2 2 +#define PWM1_OUT0 4 +#define PWM1_OUT1 5 +#define PWM1_OUT2 6 +#define PWM2_OUT0 8 +#define PWM2_OUT1 9 +#define PWM2_OUT2 10 +#define PWM3_OUT0 12 +#define PWM3_OUT1 13 +#define PWM3_OUT2 14 +#define IS_PWM_OUTSEL(__OUTSEL__) (((__OUTSEL__) == PWM0_OUT0) ||\ + ((__OUTSEL__) == PWM0_OUT1) ||\ + ((__OUTSEL__) == PWM0_OUT2) ||\ + ((__OUTSEL__) == PWM1_OUT0) ||\ + ((__OUTSEL__) == PWM1_OUT1) ||\ + ((__OUTSEL__) == PWM1_OUT2) ||\ + ((__OUTSEL__) == PWM2_OUT0) ||\ + ((__OUTSEL__) == PWM2_OUT1) ||\ + ((__OUTSEL__) == PWM2_OUT2) ||\ + ((__OUTSEL__) == PWM3_OUT0) ||\ + ((__OUTSEL__) == PWM3_OUT1) ||\ + ((__OUTSEL__) == PWM3_OUT2)) + +//outline +#define PWM_OLINE_0 1 +#define PWM_OLINE_1 2 +#define PWM_OLINE_2 4 +#define PWM_OLINE_3 8 +#define PWM_OLINE_Msk 0xF +#define IS_PWM_OUTLINE(__OUTLINE__) ((((__OUTLINE__) & PWM_OLINE_Msk) != 0U) &&\ + (((__OUTLINE__) & ~PWM_OLINE_Msk) == 0U)) + +//inline +#define PWM_ILINE_0 0 +#define PWM_ILINE_1 1 +#define PWM_ILINE_2 2 +#define PWM_ILINE_3 3 +#define IS_PWM_INLINE(__INLINE__) (((__INLINE__) == PWM_ILINE_0) ||\ + ((__INLINE__) == PWM_ILINE_1) ||\ + ((__INLINE__) == PWM_ILINE_2) ||\ + ((__INLINE__) == PWM_ILINE_3)) + +//PWM input selection +#define PWM1_IN2 0x014 +#define PWM1_IN1 0x012 +#define PWM1_IN0 0x010 +#define PWM0_IN2 0x004 +#define PWM0_IN1 0x002 +#define PWM0_IN0 0x000 +#define PWM3_IN2 0x114 +#define PWM3_IN1 0x112 +#define PWM3_IN0 0x110 +#define PWM2_IN2 0x104 +#define PWM2_IN1 0x102 +#define PWM2_IN0 0x100 +#define IS_PWM_INSEL(__INSEL__) (((__INSEL__) == PWM1_IN2) ||\ + ((__INSEL__) == PWM1_IN1) ||\ + ((__INSEL__) == PWM1_IN0) ||\ + ((__INSEL__) == PWM0_IN2) ||\ + ((__INSEL__) == PWM0_IN1) ||\ + ((__INSEL__) == PWM0_IN0) ||\ + ((__INSEL__) == PWM3_IN2) ||\ + ((__INSEL__) == PWM3_IN1) ||\ + ((__INSEL__) == PWM3_IN0) ||\ + ((__INSEL__) == PWM2_IN2) ||\ + ((__INSEL__) == PWM2_IN1) ||\ + ((__INSEL__) == PWM2_IN0)) + +//Level +#define PWM_LEVEL_HIGH (0x1U << PWM_CCTL_OUT_Pos) +#define PWM_LEVEL_LOW 0 +#define IS_PWM_OUTLVL(__OUTLVL__) (((__OUTLVL__) == PWM_LEVEL_HIGH) ||\ + ((__OUTLVL__) == PWM_LEVEL_LOW)) + +#define IS_PWM_CCR(__CCR__) ((__CCR__) < 0x10000U) + + +/****************************** PWM Instances *********************************/ +#define IS_PWM_ALL_INSTANCE(INSTANCE) (((INSTANCE) == PWM0) || \ + ((INSTANCE) == PWM1) || \ + ((INSTANCE) == PWM2) || \ + ((INSTANCE) == PWM3)) + +#define IS_PWMMUX_ALL_INSTANCE(INSTANCE) ((INSTANCE) == PWMMUX) + +/* Exported Functions ------------------------------------------------------- */ +/* PWM Exported Functions Group1: + Initialization ----------------------------*/ +void PWM_BaseInit(PWM_Type *PWMx, PWM_BaseInitType *InitStruct); +void PWM_BaseStructInit(PWM_BaseInitType *InitStruct); +void PWM_OCStructInit(PWM_OCInitType *OCInitType); +void PWM_OCInit(PWM_Type *PWMx, PWM_OCInitType *OCInitType); +void PWM_ICStructInit(PWM_ICInitType *ICInitType); +void PWM_ICInit(PWM_Type *PWMx, PWM_ICInitType *ICInitType); +/* PWM Exported Functions Group2: + Interrupt ---------------------------------*/ +void PWM_BaseINTConfig(PWM_Type *PWMx, uint32_t NewState); +uint8_t PWM_GetBaseINTStatus(PWM_Type *PWMx); +void PWM_ClearBaseINTStatus(PWM_Type *PWMx); +void PWM_ChannelINTConfig(PWM_Type *PWMx, uint32_t Channel, uint32_t NewState); +uint8_t PWM_GetChannelINTStatus(PWM_Type *PWMx, uint32_t Channel, uint32_t IntMask); +void PWM_ClearChannelINTStatus(PWM_Type *PWMx, uint32_t Channel, uint32_t IntMask); +/* PWM Exported Functions Group3: + MISC --------------------------------------*/ +void PWM_ClearCounter(PWM_Type *PWMx); +void PWM_CCRConfig(PWM_Type *PWMx, uint32_t Channel, uint16_t Period); +//Compare output +void PWM_OLineConfig(uint32_t OutSelection, uint32_t OLine); +void PWM_OutputCmd(PWM_Type *PWMx, uint32_t Channel, uint32_t NewState); +void PWM_SetOutLevel(PWM_Type *PWMx, uint32_t Channel, uint32_t Level); +void PWM_ILineConfig(uint32_t InSelection, uint32_t ILine); +uint8_t PWM_GetSCCI(PWM_Type *PWMx, uint32_t Channel); +uint32_t PWM_GetCapture(PWM_Type *PWMx, uint32_t Channel); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_PWM_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_rtc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_rtc.h new file mode 100644 index 0000000000..b56aed2b29 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_rtc.h @@ -0,0 +1,226 @@ +/** + ****************************************************************************** + * @file lib_rtc.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief RTC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_RTC_H +#define __LIB_RTC_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +/* RTC Time struct */ +typedef struct +{ + uint32_t Year; + uint32_t Month; + uint32_t Date; + uint32_t WeekDay; + uint32_t Hours; + uint32_t Minutes; + uint32_t Seconds; + uint32_t SubSeconds; +} RTC_TimeTypeDef; + +/* RTC Alarm Time struct */ +typedef struct +{ + uint32_t AlarmHours; + uint32_t AlarmMinutes; + uint32_t AlarmSeconds; + uint32_t AlarmSubSeconds; +}RTC_AlarmTypeDef; + +#define RTC_ACCURATE 0 +#define RTC_INACCURATE 1 +#define IS_RTC_ACCURATESEL(__ACCURATESEL__) (((__ACCURATESEL__) == RTC_ACCURATE) ||\ + ((__ACCURATESEL__) == RTC_INACCURATE)) + +/************** Bits definition for RTC_WKUCNT register ******************/ +#define RTC_WKUCNT_CNTSEL_0 (0x0U << RTC_WKUCNT_CNTSEL_Pos) +#define RTC_WKUCNT_CNTSEL_1 (0x1U << RTC_WKUCNT_CNTSEL_Pos) +#define RTC_WKUCNT_CNTSEL_2 (0x2U << RTC_WKUCNT_CNTSEL_Pos) +#define RTC_WKUCNT_CNTSEL_3 (0x3U << RTC_WKUCNT_CNTSEL_Pos) + +/************** Bits definition for RTC_PSCA register ******************/ +#define RTC_PSCA_PSCA_0 (0x0U << RTC_PSCA_PSCA_Pos) +#define RTC_PSCA_PSCA_1 (0x1U << RTC_PSCA_PSCA_Pos) +//#define RTC_PSCA_PSCA_2 (0x2U << RTC_PSCA_PSCA_Pos) +//#define RTC_PSCA_PSCA_3 (0x3U << RTC_PSCA_PSCA_Pos) + +/****************************** RTC Instances *********************************/ +#define IS_RTC_ALL_INSTANCE(INSTANCE) ((INSTANCE) == RTC) + +//INT +#define RTC_INT_ALARM RTC_INTSTS_INTSTS10 +#define RTC_INT_CEILLE RTC_INTSTS_INTSTS8 +#define RTC_INT_WKUCNT RTC_INTSTS_INTSTS6 +#define RTC_INT_MIDNIGHT RTC_INTSTS_INTSTS5 +#define RTC_INT_WKUHOUR RTC_INTSTS_INTSTS4 +#define RTC_INT_WKUMIN RTC_INTSTS_INTSTS3 +#define RTC_INT_WKUSEC RTC_INTSTS_INTSTS2 +#define RTC_INT_TIMEILLE RTC_INTSTS_INTSTS1 +#define RTC_INT_ITVSITV RTC_INTSTS_INTSTS0 +#define RTC_INT_Msk (0x57FUL) + +//INTSTS +#define RTC_INTSTS_ALARM RTC_INTSTS_INTSTS10 +#define RTC_INTSTS_CEILLE RTC_INTSTS_INTSTS8 +#define RTC_INTSTS_WKUCNT RTC_INTSTS_INTSTS6 +#define RTC_INTSTS_MIDNIGHT RTC_INTSTS_INTSTS5 +#define RTC_INTSTS_WKUHOUR RTC_INTSTS_INTSTS4 +#define RTC_INTSTS_WKUMIN RTC_INTSTS_INTSTS3 +#define RTC_INTSTS_WKUSEC RTC_INTSTS_INTSTS2 +#define RTC_INTSTS_TIMEILLE RTC_INTSTS_INTSTS1 +#define RTC_INTSTS_ITVSITV RTC_INTSTS_INTSTS0 +#define RTC_INTSTS_Msk (0x57FUL) + +//CNTCLK +#define RTC_WKUCNT_RTCCLK RTC_WKUCNT_CNTSEL_0 +#define RTC_WKUCNT_2048 RTC_WKUCNT_CNTSEL_1 +#define RTC_WKUCNT_512 RTC_WKUCNT_CNTSEL_2 +#define RTC_WKUCNT_128 RTC_WKUCNT_CNTSEL_3 + +//Prescaler +#define RTC_CLKDIV_1 RTC_PSCA_PSCA_0 +#define RTC_CLKDIV_4 RTC_PSCA_PSCA_1 + +//PLLDIVSOUCE +#define RTC_PLLDIVSOURCE_PCLK 0 +#define RTC_PLLDIVSOURCE_PLLL (0x1U << RTC_CTL_RTCPLLCLKSEL_Pos) + +//RTC_ITV +#define RTC_ITV_SEC (0x80) +#define RTC_ITV_MIN (1 << RTC_ITV_ITV_Pos) +#define RTC_ITV_HOUR (2 << RTC_ITV_ITV_Pos) +#define RTC_ITV_DAY (3 << RTC_ITV_ITV_Pos) +#define RTC_ITV_500MS (4 << RTC_ITV_ITV_Pos) +#define RTC_ITV_250MS (5 << RTC_ITV_ITV_Pos) +#define RTC_ITV_125MS (6 << RTC_ITV_ITV_Pos) +#define RTC_ITV_62MS (7 << RTC_ITV_ITV_Pos) +#define RTC_ITV_SITVSEC (7 << RTC_ITV_ITV_Pos) +//RTC_SITV +#define RTC_SITV_EN (1 << RTC_SITV_SITVEN_Pos) //Control Multi Second interval.1:enable; 0:disable. + +/* Private macros ------------------------------------------------------------*/ +#define IS_RTC_REGOP_STARTADDR(__STARTADDR__) (((__STARTADDR__) & 0x3U) == 0U) +/* Year 0 ~ 99 */ +#define IS_RTC_TIME_YEAR(__YEAR__) ((__YEAR__) < 0x9AU) +/* Month 1 ~ 12 */ +#define IS_RTC_TIME_MONTH(__MONTH__) (((__MONTH__) > 0x0U) && ((__MONTH__) < 0x13U)) +/* Date 1 ~ 31 */ +#define IS_RTC_TIME_DATE(__DATE__) (((__DATE__) > 0x0U) && ((__DATE__) < 0x32U)) +/* Weekday 0 ~ 6 */ +#define IS_RTC_TIME_WEEKDAY(__WEEKDAY__) ((__WEEKDAY__) < 0x7U) +/* Hours 0 ~ 23 */ +#define IS_RTC_TIME_HOURS(__HOURS__) ((__HOURS__) < 0x24U) +/* Minutes 0 ~ 59 */ +#define IS_RTC_TIME_MINS(__MINS__) ((__MINS__) < 0x5AU) +/* Seconds 0 ~ 59 */ +#define IS_RTC_TIME_SECS(__SECS__) ((__SECS__) < 0x5AU) +/* SubSeconds 0 ~ 0x999 */ +#define IS_RTC_TIME_SubSECS(__SubSECS__) ((__SubSECS__) < 0x1000U) + +#define IS_RTC_INT(__INT__) ((((__INT__) & RTC_INT_Msk) != 0U) &&\ + (((__INT__) & ~RTC_INT_Msk) == 0U)) + +#define IS_RTC_INTFLAGR(__INTFLAGR_) (((__INTFLAGR_) == RTC_INTSTS_CEILLE) ||\ + ((__INTFLAGR_) == RTC_INTSTS_WKUCNT) ||\ + ((__INTFLAGR_) == RTC_INTSTS_MIDNIGHT) ||\ + ((__INTFLAGR_) == RTC_INTSTS_WKUHOUR) ||\ + ((__INTFLAGR_) == RTC_INTSTS_WKUMIN) ||\ + ((__INTFLAGR_) == RTC_INTSTS_WKUSEC) ||\ + ((__INTFLAGR_) == RTC_INTSTS_ALARM) ||\ + ((__INTFLAGR_) == RTC_INTSTS_TIMEILLE) ||\ + ((__INTFLAGR_) == RTC_INTSTS_ITVSITV)) + +#define IS_RTC_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & RTC_INTSTS_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~RTC_INTSTS_Msk) == 0U)) + +#define IS_RTC_WKUSEC_PERIOD(__PERIOD__) (((__PERIOD__) < 0x41U) && ((__PERIOD__) > 0U)) + +#define IS_RTC_WKUMIN_PERIOD(__PERIOD__) (((__PERIOD__) < 0x41U) && ((__PERIOD__) > 0U)) + +#define IS_RTC_WKUHOUR_PERIOD(__PERIOD__) (((__PERIOD__) < 0x21U) && ((__PERIOD__) > 0U)) + +#define IS_RTC_WKUCNT_PERIOD(__PERIOD__) (((__PERIOD__) < 0x1000001U) && ((__PERIOD__) > 0U)) + +#define IS_RTC_WKUCNT_CNTSEL(__CNTSEL__) (((__CNTSEL__) == RTC_WKUCNT_RTCCLK) ||\ + ((__CNTSEL__) == RTC_WKUCNT_2048) ||\ + ((__CNTSEL__) == RTC_WKUCNT_512) ||\ + ((__CNTSEL__) == RTC_WKUCNT_128)) + +#define IS_RTC_CLKDIV(__CLKDIV__) (((__CLKDIV__) == RTC_CLKDIV_1) ||\ + ((__CLKDIV__) == RTC_CLKDIV_4)) + +#define IS_RTC_PLLDIVSOURCE(__PLLDIVSOURCE__) (((__PLLDIVSOURCE__) == RTC_PLLDIVSOURCE_PCLK) ||\ + ((__PLLDIVSOURCE__) == RTC_PLLDIVSOURCE_PLLL)) + +#define IS_RTC_ITV(__ITV__) (((__ITV__) == RTC_ITV_SEC) ||\ + ((__ITV__) == RTC_ITV_MIN) ||\ + ((__ITV__) == RTC_ITV_HOUR) ||\ + ((__ITV__) == RTC_ITV_DAY) ||\ + ((__ITV__) == RTC_ITV_500MS) ||\ + ((__ITV__) == RTC_ITV_250MS) ||\ + ((__ITV__) == RTC_ITV_125MS) ||\ + ((__ITV__) == RTC_ITV_62MS) ||\ + ((__ITV__) == RTC_ITV_SITVSEC)) + +#define IS_RTC_SITV(__SITV__) (((__SITV__) < 65U) && ((__SITV__) > 0U)) + +/* Exported Functions ------------------------------------------------------- */ +/* RTC Exported Functions Group1: + Time functions -----------------------------*/ +void RTC_SetTime(RTC_TimeTypeDef *sTime, uint32_t AccurateSel); +void RTC_GetTime(RTC_TimeTypeDef *gTime, uint32_t AccurateSel); +void RTC_SubSecondCmd(uint32_t NewState); +/* RTC Exported Functions Group2: + Alarms configuration functions -------------*/ +void RTC_SetAlarm(RTC_AlarmTypeDef *RTC_AlarmStruct, uint32_t AccurateSel); +void RTC_GetAlarm(RTC_AlarmTypeDef *RTC_AlarmStruct, uint32_t AccurateSel); +void RTC_AlarmCmd(uint32_t NewState); +void RTC_AlarmAccurateCmd(uint32_t NewState); +/* RTC Exported Functions Group3: + Registers operation functions --------------*/ +void RTC_WriteProtection(uint32_t NewState); +void RTC_WaitForSynchro(void); +void RTC_WriteRegisters(uint32_t StartAddr, const uint32_t *wBuffer, uint8_t Len); +void RTC_ReadRegisters(uint32_t StartAddr, uint32_t *rBuffer, uint8_t Len); +/* RTC Exported Functions Group4: + Interrupt functions ------------------------*/ +void RTC_INTConfig(uint32_t INTMask, uint32_t NewState); +uint8_t RTC_GetINTStatus(uint32_t FlagMask); +void RTC_ClearINTStatus(uint32_t FlagMask); + +/* RTC Exported Functions Group5: + Wake-up functions --------------------------*/ +void RTC_WKUSecondsConfig(uint8_t nPeriod); +void RTC_WKUMinutesConfig(uint8_t nPeriod); +void RTC_WKUHoursConfig(uint8_t nPeriod); +void RTC_WKUCounterConfig(uint32_t nClock,uint32_t CNTCLK); +void RTC_WAKE_ITV(uint8_t nType); +void RTC_WAKE_SITV(uint8_t nPeriod); +uint32_t RTC_GetWKUCounterValue(void); +/* RTC Exported Functions Group6: + MISC functions -----------------------------*/ +void RTC_PrescalerConfig(uint32_t Prescaler); +void RTC_PLLDIVConfig(uint32_t DIVSource,uint32_t nfrequency); +void RTC_PLLDIVOutputCmd(uint8_t NewState); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_RTC_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_spi.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_spi.h new file mode 100644 index 0000000000..59681ad12c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_spi.h @@ -0,0 +1,212 @@ +/** + ****************************************************************************** + * @file lib_spi.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief SPI library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_SPI_H +#define __LIB_SPI_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t Mode; + uint32_t SPH; + uint32_t SPO; + uint32_t ClockDivision; + uint32_t CSNSoft; + uint32_t SWAP; +} SPI_InitType; + +/************** Bits definition for SPIx_CTRL register ******************/ +#define SPI_CTRL_SCKSEL_0 (0x1U << SPI_CTRL_SCKSEL_Pos) /*!< 0x00000001 */ +#define SPI_CTRL_SCKSEL_1 (0x2U << SPI_CTRL_SCKSEL_Pos) /*!< 0x00000002 */ +#define SPI_CTRL_SCKSEL_2 (0x4U << SPI_CTRL_SCKSEL_Pos) /*!< 0x00000004 */ + +/************** Bits definition for SPIx_TXSTS register ******************/ +#define SPI_TXSTS_TXFFLAG_0 (0x1U << SPI_TXSTS_TXFFLAG_Pos) /*!< 0x00000001 */ +#define SPI_TXSTS_TXFFLAG_1 (0x2U << SPI_TXSTS_TXFFLAG_Pos) /*!< 0x00000002 */ +#define SPI_TXSTS_TXFFLAG_2 (0x4U << SPI_TXSTS_TXFFLAG_Pos) /*!< 0x00000004 */ +#define SPI_TXSTS_TXFFLAG_3 (0x8U << SPI_TXSTS_TXFFLAG_Pos) /*!< 0x00000008 */ +#define SPI_TXSTS_TXFLEV_0 (0x1U << SPI_TXSTS_TXFLEV_Pos) /*!< 0x00000010 */ +#define SPI_TXSTS_TXFLEV_1 (0x2U << SPI_TXSTS_TXFLEV_Pos) /*!< 0x00000020 */ +#define SPI_TXSTS_TXFLEV_2 (0x4U << SPI_TXSTS_TXFLEV_Pos) /*!< 0x00000040 */ + +/************** Bits definition for SPIx_TXDAT register ******************/ + +/************** Bits definition for SPIx_RXSTS register ******************/ +#define SPI_RXSTS_RXFFLAG_0 (0x1U << SPI_RXSTS_RXFFLAG_Pos) /*!< 0x00000001 */ +#define SPI_RXSTS_RXFFLAG_1 (0x2U << SPI_RXSTS_RXFFLAG_Pos) /*!< 0x00000002 */ +#define SPI_RXSTS_RXFFLAG_2 (0x4U << SPI_RXSTS_RXFFLAG_Pos) /*!< 0x00000004 */ +#define SPI_RXSTS_RXFFLAG_3 (0x8U << SPI_RXSTS_RXFFLAG_Pos) /*!< 0x00000008 */ +#define SPI_RXSTS_RXFLEV_0 (0x1U << SPI_RXSTS_RXFLEV_Pos) /*!< 0x00000010 */ +#define SPI_RXSTS_RXFLEV_1 (0x2U << SPI_RXSTS_RXFLEV_Pos) /*!< 0x00000020 */ +#define SPI_RXSTS_RXFLEV_2 (0x4U << SPI_RXSTS_RXFLEV_Pos) /*!< 0x00000040 */ +//Mode +#define SPI_MODE_MASTER 0 +#define SPI_MODE_SLAVE SPI_CTRL_MOD +//SPH +#define SPI_SPH_0 0 +#define SPI_SPH_1 SPI_CTRL_SCKPHA +//SPO +#define SPI_SPO_0 0 +#define SPI_SPO_1 SPI_CTRL_SCKPOL +//ClockDivision +#define SPI_CLKDIV_2 (0) +#define SPI_CLKDIV_4 (SPI_CTRL_SCKSEL_0) +#define SPI_CLKDIV_8 (SPI_CTRL_SCKSEL_1) +#define SPI_CLKDIV_16 (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_1) +#define SPI_CLKDIV_32 (SPI_CTRL_SCKSEL_2) +#define SPI_CLKDIV_64 (SPI_CTRL_SCKSEL_0 | SPI_CTRL_SCKSEL_2) +#define SPI_CLKDIV_128 (SPI_CTRL_SCKSEL_1 | SPI_CTRL_SCKSEL_2) +//CSNSoft +#define SPI_CSNSOFT_ENABLE SPI_CTRL_CSGPIO +#define SPI_CSNSOFT_DISABLE 0 +//SWAP +#define SPI_SWAP_ENABLE SPI_CTRL_SWAP +#define SPI_SWAP_DISABLE 0 + +//INT +#define SPI_INT_TX (0x80000000|SPI_TXSTS_TXIEN) +#define SPI_INT_RX (0x40000000|SPI_RXSTS_RXIEN) + +//status +#define SPI_STS_TXIF (0x80000000|SPI_TXSTS_TXIF) +#define SPI_STS_TXEMPTY (0x80000000|SPI_TXSTS_TXEMPTY) +#define SPI_STS_TXFUR (0x80000000|SPI_TXSTS_TXFUR) +#define SPI_STS_DMATXDONE (0x80000000|SPI_TXSTS_DMATXDONE) +#define SPI_STS_RXIF (0x40000000|SPI_RXSTS_RXIF) +#define SPI_STS_RXFULL (0x40000000|SPI_RXSTS_RXFULL) +#define SPI_STS_RXFOV (0x40000000|SPI_RXSTS_RXFOV) +#define SPI_STS_BSY (0x20000000|SPI_MISC_BSY) +#define SPI_STS_RFF (0x20000000|SPI_MISC_RFF) +#define SPI_STS_RNE (0x20000000|SPI_MISC_RNE) +#define SPI_STS_TNF (0x20000000|SPI_MISC_TNF) +#define SPI_STS_TFE (0x20000000|SPI_MISC_TFE) + +//TXFLEV +#define SPI_TXFLEV_0 (0) +#define SPI_TXFLEV_1 (SPI_TXSTS_TXFLEV_0) +#define SPI_TXFLEV_2 (SPI_TXSTS_TXFLEV_1) +#define SPI_TXFLEV_3 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1) +#define SPI_TXFLEV_4 (SPI_TXSTS_TXFLEV_2) +#define SPI_TXFLEV_5 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_2) +#define SPI_TXFLEV_6 (SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2) +#define SPI_TXFLEV_7 (SPI_TXSTS_TXFLEV_0 | SPI_TXSTS_TXFLEV_1 | SPI_TXSTS_TXFLEV_2) + +//RXFLEV +#define SPI_RXFLEV_0 (0) +#define SPI_RXFLEV_1 (SPI_RXSTS_RXFLEV_0) +#define SPI_RXFLEV_2 (SPI_RXSTS_RXFLEV_1) +#define SPI_RXFLEV_3 (SPI_RXSTS_RXFLEV_0 | SPI_RXSTS_RXFLEV_1) +#define SPI_RXFLEV_4 (SPI_RXSTS_RXFLEV_2) +#define SPI_RXFLEV_5 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_0) +#define SPI_RXFLEV_6 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1) +#define SPI_RXFLEV_7 (SPI_RXSTS_RXFLEV_2 | SPI_RXSTS_RXFLEV_1 | SPI_RXSTS_RXFLEV_0) + + +/* Private macros ------------------------------------------------------------*/ +#define IS_SPI_MODE(__MODE__) (((__MODE__) == SPI_MODE_MASTER) || ((__MODE__) == SPI_MODE_SLAVE)) + +#define IS_SPI_SPH(__SPH__) (((__SPH__) == SPI_SPH_0) || ((__SPH__) == SPI_SPH_1)) + +#define IS_SPI_SPO(__SPO__) (((__SPO__) == SPI_SPO_0) || ((__SPO__) == SPI_SPO_1)) + +#define IS_SPI_CLKDIV(__CLKDIV__) (((__CLKDIV__) == SPI_CLKDIV_2) ||\ + ((__CLKDIV__) == SPI_CLKDIV_4) ||\ + ((__CLKDIV__) == SPI_CLKDIV_8) ||\ + ((__CLKDIV__) == SPI_CLKDIV_16) ||\ + ((__CLKDIV__) == SPI_CLKDIV_32) ||\ + ((__CLKDIV__) == SPI_CLKDIV_64) ||\ + ((__CLKDIV__) == SPI_CLKDIV_128)) + +#define IS_SPI_CSN(__CSN__) (((__CSN__) == SPI_CSNSOFT_ENABLE) || ((__CSN__) == SPI_CSNSOFT_DISABLE)) + +#define IS_SPI_SWAP(__SWAP__) (((__SWAP__) == SPI_SWAP_ENABLE) || ((__SWAP__) == SPI_SWAP_DISABLE)) + +#define IS_SPI_INT(__INT__) ((((__INT__) & (SPI_INT_TX | SPI_INT_RX)) != 0U) &&\ + (((__INT__) & ~(SPI_INT_TX | SPI_INT_RX)) == 0U)) + +#define IS_SPI_STSR(__STSR__) (((__STSR__) == SPI_STS_TXIF) ||\ + ((__STSR__) == SPI_STS_TXEMPTY) ||\ + ((__STSR__) == SPI_STS_TXFUR) ||\ + ((__STSR__) == SPI_STS_DMATXDONE) ||\ + ((__STSR__) == SPI_STS_RXFULL) ||\ + ((__STSR__) == SPI_STS_RXFOV) ||\ + ((__STSR__) == SPI_STS_BSY) ||\ + ((__STSR__) == SPI_STS_RFF) ||\ + ((__STSR__) == SPI_STS_RNE) ||\ + ((__STSR__) == SPI_STS_TNF) ||\ + ((__STSR__) == SPI_STS_TFE) ||\ + ((__STSR__) == SPI_STS_RXIF)) + +#define IS_SPI_STSC(__STSC__) ((((__STSC__) & (SPI_STS_TXIF | SPI_STS_RXIF | SPI_STS_DMATXDONE)) != 0U) &&\ + (((__STSC__) & ~(SPI_STS_TXIF | SPI_STS_RXIF | SPI_STS_DMATXDONE)) == 0U)) + +#define IS_SPI_TXFLEV(__TXFLEV__) (((__TXFLEV__) == SPI_TXFLEV_0) ||\ + ((__TXFLEV__) == SPI_TXFLEV_1) ||\ + ((__TXFLEV__) == SPI_TXFLEV_2) ||\ + ((__TXFLEV__) == SPI_TXFLEV_3) ||\ + ((__TXFLEV__) == SPI_TXFLEV_4) ||\ + ((__TXFLEV__) == SPI_TXFLEV_5) ||\ + ((__TXFLEV__) == SPI_TXFLEV_6) ||\ + ((__TXFLEV__) == SPI_TXFLEV_7)) + +#define IS_SPI_RXFLEV(__RXFLEV__) (((__RXFLEV__) == SPI_RXFLEV_0) ||\ + ((__RXFLEV__) == SPI_RXFLEV_1) ||\ + ((__RXFLEV__) == SPI_RXFLEV_2) ||\ + ((__RXFLEV__) == SPI_RXFLEV_3) ||\ + ((__RXFLEV__) == SPI_RXFLEV_4) ||\ + ((__RXFLEV__) == SPI_RXFLEV_5) ||\ + ((__RXFLEV__) == SPI_RXFLEV_6) ||\ + ((__RXFLEV__) == SPI_RXFLEV_7)) + +/****************************** SPI Instances *********************************/ +#define IS_SPI_ALL_INSTANCE(INSTANCE) (((INSTANCE) == SPI1) || \ + ((INSTANCE) == SPI2) || \ + ((INSTANCE) == SPI3)) + +/* Exported Functions ------------------------------------------------------- */ +/* SPI Exported Functions Group1: + (De)Initialization -------------------------*/ +void SPI_DeviceInit(SPI_Type *SPIx); +void SPI_Init(SPI_Type *SPIx, SPI_InitType *InitStruct); +void SPI_StructInit(SPI_InitType *InitStruct); +/* SPI Exported Functions Group2: + Interrupt (flag) ---------------------------*/ +void SPI_INTConfig(SPI_Type *SPIx, uint32_t INTMask, uint32_t NewState); +uint8_t SPI_GetStatus(SPI_Type *SPIx, uint32_t Status); +void SPI_ClearStatus(SPI_Type *SPIx, uint32_t Status); +/* SPI Exported Functions Group3: + Transfer datas -----------------------------*/ +void SPI_SendData(SPI_Type *SPIx, uint8_t ch); +uint8_t SPI_ReceiveData(SPI_Type *SPIx); +/* SPI Exported Functions Group4: + MISC Configuration -------------------------*/ +void SPI_Cmd(SPI_Type *SPIx, uint32_t NewState); +void SPI_TransmitFIFOLevelConfig(SPI_Type *SPIx, uint32_t FIFOLevel); +void SPI_ReceiveFIFOLevelConfig(SPI_Type *SPIx, uint32_t FIFOLevel); +uint8_t SPI_GetTransmitFIFOLevel(SPI_Type *SPIx); +uint8_t SPI_GetReceiveFIFOLevel(SPI_Type *SPIx); +void SPI_SmartModeCmd(SPI_Type *SPIx, uint32_t NewState); +void SPI_OverWriteModeCmd(SPI_Type *SPIx, uint32_t NewState); + + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_SPI_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_tmr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_tmr.h new file mode 100644 index 0000000000..9a5a2969e9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_tmr.h @@ -0,0 +1,68 @@ +/** + ****************************************************************************** + * @file lib_tmr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Timer library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_TMR_H +#define __LIB_TMR_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t Period; + uint32_t ClockSource; + uint32_t EXTGT; +} TMR_InitType; +//ClockSource +#define TMR_CLKSRC_INTERNAL 0 +#define TMR_CLKSRC_EXTERNAL TMR_CTRL_EXTCLK +//ClockGate +#define TMR_EXTGT_DISABLE 0 +#define TMR_EXTGT_ENABLE TMR_CTRL_EXTEN + +/* Private macros ------------------------------------------------------------*/ +#define IS_TMR_CLKSRC(__CLKSRC__) (((__CLKSRC__) == TMR_CLKSRC_INTERNAL) || ((__CLKSRC__) == TMR_CLKSRC_EXTERNAL)) + +#define IS_TMR_EXTGT(__EXTGT__) (((__EXTGT__) == TMR_EXTGT_DISABLE) || ((__EXTGT__) == TMR_EXTGT_ENABLE)) + +/****************************** TMR Instances *********************************/ +#define IS_TMR_ALL_INSTANCE(INSTANCE) (((INSTANCE) == TMR0) || \ + ((INSTANCE) == TMR1) || \ + ((INSTANCE) == TMR2) || \ + ((INSTANCE) == TMR3)) + +/* Exported Functions ------------------------------------------------------- */ +/* Timer Exported Functions Group1: + (De)Initialization ----------------------*/ +void TMR_DeInit(TMR_Type *TMRx); +void TMR_Init(TMR_Type *TMRx, TMR_InitType *InitStruct); +void TMR_StructInit(TMR_InitType *InitStruct); +/* Timer Exported Functions Group2: + Interrupt (flag) -------------------------*/ +void TMR_INTConfig(TMR_Type *TMRx, uint32_t NewState); +uint8_t TMR_GetINTStatus(TMR_Type *TMRx); +void TMR_ClearINTStatus(TMR_Type *TMRx); +/* Timer Exported Functions Group3: + MISC Configuration -----------------------*/ +void TMR_Cmd(TMR_Type *TMRx, uint32_t NewState); +uint32_t TMR_GetCurrentValue(TMR_Type *TMRx); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_TMR_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_u32k.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_u32k.h new file mode 100644 index 0000000000..546d390a86 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_u32k.h @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file lib_u32k.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief UART 32K library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_U32K_H +#define __LIB_U32K_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +typedef struct +{ + uint32_t Debsel; + uint32_t Parity; + uint32_t FirstBit; + uint32_t AutoCal; + uint32_t Baudrate; + uint32_t LineSel; +} U32K_InitType; + +/************** Bits definition for U32Kx_CTRL0 register ******************/ +#define U32K_CTRL0_PMODE_EVEN (0x0U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000000 */ +#define U32K_CTRL0_PMODE_ODD (0x1U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000010 */ +#define U32K_CTRL0_PMODE_0 (0x2U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000020 */ +#define U32K_CTRL0_PMODE_1 (0x3U << U32K_CTRL0_PMODE_Pos) /*!< 0x00000030 */ +#define U32K_CTRL0_DEBSEL_0 (0x0U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000000 */ +#define U32K_CTRL0_DEBSEL_1 (0x1U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000040 */ +#define U32K_CTRL0_DEBSEL_2 (0x2U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x00000080 */ +#define U32K_CTRL0_DEBSEL_3 (0x3U << U32K_CTRL0_DEBSEL_Pos) /*!< 0x000000C0 */ + +/************** Bits definition for U32Kx_CTRL1 register ******************/ +#define U32K_CTRL1_RXSEL_RX0 (0x0U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000000 */ +#define U32K_CTRL1_RXSEL_RX1 (0x1U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000010 */ +#define U32K_CTRL1_RXSEL_RX2 (0x2U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000020 */ +#define U32K_CTRL1_RXSEL_RX3 (0x3U << U32K_CTRL1_RXSEL_Pos) /*!< 0x00000030 */ +//Debsel +#define U32K_DEBSEL_0 (0x0U << U32K_CTRL0_DEBSEL_Pos) +#define U32K_DEBSEL_1 (0x1U << U32K_CTRL0_DEBSEL_Pos) +#define U32K_DEBSEL_2 (0x2U << U32K_CTRL0_DEBSEL_Pos) +#define U32K_DEBSEL_3 (0x3U << U32K_CTRL0_DEBSEL_Pos) +//Parity +#define U32K_PARITY_EVEN (0x1U << U32K_CTRL0_PMODE_Pos) +#define U32K_PARITY_ODD (0x3U << U32K_CTRL0_PMODE_Pos) +#define U32K_PARITY_0 (0x5U << U32K_CTRL0_PMODE_Pos) +#define U32K_PARITY_1 (0x7U << U32K_CTRL0_PMODE_Pos) +#define U32K_PARITY_NONE (0x0U << U32K_CTRL0_PMODE_Pos) +//FirstBit +#define U32K_FIRSTBIT_LSB 0 +#define U32K_FIRSTBIT_MSB (0x1U << U32K_CTRL0_MSB_Pos) +//AutoCal +#define U32K_AUTOCAL_ON 0 +#define U32K_AUTOCAL_OFF (0x1U << U32K_CTRL0_ACOFF_Pos) +//Line +#define U32K_LINE_RX0 (0x0U << U32K_CTRL1_RXSEL_Pos) +#define U32K_LINE_RX1 (0x1U << U32K_CTRL1_RXSEL_Pos) +#define U32K_LINE_RX2 (0x2U << U32K_CTRL1_RXSEL_Pos) +#define U32K_LINE_RX3 (0x3U << U32K_CTRL1_RXSEL_Pos) + +//INT +#define U32K_INT_RXOV (0x1U << U32K_CTRL1_RXOVIE_Pos) +#define U32K_INT_RXPE (0x1U << U32K_CTRL1_RXPEIE_Pos) +#define U32K_INT_RX (0x1U << U32K_CTRL1_RXIE_Pos) +#define U32K_INT_Msk (U32K_INT_RXOV \ + |U32K_INT_RXPE \ + |U32K_INT_RX) + +//INT Status +#define U32K_INTSTS_RXOV (0x1U << U32K_STS_RXOV_Pos) +#define U32K_INTSTS_RXPE (0x1U << U32K_STS_RXPE_Pos) +#define U32K_INTSTS_RX (0x1U << U32K_STS_RXIF_Pos) +#define U32K_INTSTS_Msk (U32K_INTSTS_RXOV \ + |U32K_INTSTS_RXPE \ + |U32K_INTSTS_RX) + +//WKUMode +#define U32K_WKUMOD_RX 0 // Wake-up when receive data +#define U32K_WKUMOD_PC (0x1U << U32K_CTRL0_WKUMODE_Pos) // Wake-up when receive data and parity/stop bit correct + + +/****************************** U32K Instances ********************************/ +#define IS_U32K_ALL_INSTANCE(INSTANCE) (((INSTANCE) == U32K0) || \ + ((INSTANCE) == U32K1)) + +/* Private macros ------------------------------------------------------------*/ +#define IS_U32K_DEBSEL(__DEBSEL__) (((__DEBSEL__) == U32K_DEBSEL_0) ||\ + ((__DEBSEL__) == U32K_DEBSEL_1) ||\ + ((__DEBSEL__) == U32K_DEBSEL_2) ||\ + ((__DEBSEL__) == U32K_DEBSEL_3)) + +#define IS_U32K_PARITY(__PARITY__) (((__PARITY__) == U32K_PARITY_EVEN) ||\ + ((__PARITY__) == U32K_PARITY_ODD) ||\ + ((__PARITY__) == U32K_PARITY_0) ||\ + ((__PARITY__) == U32K_PARITY_1) ||\ + ((__PARITY__) == U32K_PARITY_NONE)) + +#define IS_U32K_WORDLEN(__WORDLEN__) (((__WORDLEN__) == U32K_WORDLEN_8B) || ((__WORDLEN__) == U32K_WORDLEN_9B)) + +#define IS_U32K_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == U32K_FIRSTBIT_LSB) || ((__FIRSTBIT__) == U32K_FIRSTBIT_MSB)) + +#define IS_U32K_AUTOCAL(__AUTOCAL__) (((__AUTOCAL__) == U32K_AUTOCAL_ON) || ((__AUTOCAL__) == U32K_AUTOCAL_OFF)) + +#define IS_U32K_LINE(__LINE__) (((__LINE__) == U32K_LINE_RX0) ||\ + ((__LINE__) == U32K_LINE_RX1) ||\ + ((__LINE__) == U32K_LINE_RX2) ||\ + ((__LINE__) == U32K_LINE_RX3)) + +#define IS_U32K_BAUDRATE(__BAUDRATE__) ((300UL <= (__BAUDRATE__)) &&\ + ((__BAUDRATE__) <= 14400UL)) + +#define IS_U32K_INT(__INT__) ((((__INT__) & U32K_INT_Msk) != 0U) &&\ + (((__INT__) & ~U32K_INT_Msk) == 0U)) + +#define IS_U32K_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == U32K_INTSTS_RXOV) ||\ + ((__INTFLAGR__) == U32K_INTSTS_RXPE) ||\ + ((__INTFLAGR__) == U32K_INTSTS_RX)) + +#define IS_U32K_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & U32K_INTSTS_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~U32K_INTSTS_Msk) == 0U)) + +#define IS_U32K_WKUMODE(__WKUMODE__) (((__WKUMODE__) == U32K_WKUMOD_RX) || ((__WKUMODE__) == U32K_WKUMOD_PC)) + +/* Exported Functions ------------------------------------------------------- */ +/* U32K Exported Functions Group1: + (De)Initialization -----------------------*/ +void U32K_DeInit(U32K_Type *U32Kx); +void U32K_Init(U32K_Type *U32Kx, U32K_InitType *InitStruct); +void U32K_StructInit(U32K_InitType *InitStruct); +/* U32K Exported Functions Group2: + Interrupt (flag) configure ---------------*/ +void U32K_INTConfig(U32K_Type *U32Kx, uint32_t INTMask, uint8_t NewState); +uint8_t U32K_GetINTStatus(U32K_Type *U32Kx, uint32_t INTMask); +void U32K_ClearINTStatus(U32K_Type *U32Kx, uint32_t INTMask); +/* U32K Exported Functions Group3: + Receive datas -----------------------------*/ +uint8_t U32K_ReceiveData(U32K_Type *U32Kx); +/* U32K Exported Functions Group4: + MISC Configuration -------- ---------------*/ +void U32K_BaudrateConfig(U32K_Type *U32Kx, uint32_t BaudRate); +void U32K_Cmd(U32K_Type *U32Kx, uint32_t NewState); +void U32K_LineConfig(U32K_Type *U32Kx, uint32_t Line); +void U32K_WKUModeConfig(U32K_Type *U32Kx, uint32_t WKUMode); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_U32K_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_uart.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_uart.h new file mode 100644 index 0000000000..b91f852889 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_uart.h @@ -0,0 +1,172 @@ +/** + ****************************************************************************** + * @file lib_uart.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief UART library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_UART_H +#define __LIB_UART_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +//UART Init struct +typedef struct +{ + uint32_t Mode; + uint32_t Parity; + uint32_t FirstBit; + uint32_t Baudrate; +} UART_InitType; + +//Mode +#define UART_MODE_RX (0x1U << UART_CTRL_RXEN_Pos) +#define UART_MODE_TX (0x1U << UART_CTRL_TXEN_Pos) +#define UART_MODE_OFF 0 +#define UART_MODE_Msk (UART_MODE_RX | UART_MODE_TX) +//Parity +#define UART_PARITY_EVEN (0x1U << UART_CTRL2_PMODE_Pos) +#define UART_PARITY_ODD (0x3U << UART_CTRL2_PMODE_Pos) +#define UART_PARITY_0 (0x5U << UART_CTRL2_PMODE_Pos) +#define UART_PARITY_1 (0x7U << UART_CTRL2_PMODE_Pos) +#define UART_PARITY_NONE (0x0U << UART_CTRL2_PMODE_Pos) + +//FirstBit +#define UART_FIRSTBIT_LSB 0 +#define UART_FIRSTBIT_MSB (0x1U << UART_CTRL2_MSB_Pos) + +//UART Configration Information struct +typedef struct +{ + uint32_t Mode_Transmit :1; //1: TX Enable; 0: TX Disable + uint32_t Mode_Receive :1; //1: RX Enable; 0: RX Disable + uint32_t Baudrate; //The value of current budrate + uint8_t Parity; //0:1+8+1 mode; 1: Even parity; 3:Odd parity; 5: parity bit=0; 7: parity bit=1; + uint8_t FirstBit; //0: LSB transmit first; 1: MSB transmit first +} UART_ConfigINFOType; + +//status +#define UART_FLAG_DMATXDONE (0x1U << UART_STATE_DMATXDONE_Pos) +#define UART_FLAG_RXPARITY (0x1U << UART_STATE_RXPSTS_Pos) +#define UART_FLAG_TXDONE (0x1U << UART_STATE_TXDONE_Pos) +#define UART_FLAG_RXPE (0x1U << UART_STATE_RXPE_Pos) +#define UART_FLAG_RXOV (0x1U << UART_STATE_RXOV_Pos) +#define UART_FLAG_TXOV (0x1U << UART_STATE_TXOV_Pos) +#define UART_FLAG_RXFULL (0x1U << UART_STATE_RXFULL_Pos) +#define UART_FLAG_RCMsk (UART_FLAG_DMATXDONE \ + |UART_FLAG_TXDONE \ + |UART_FLAG_RXPE \ + |UART_FLAG_RXOV \ + |UART_FLAG_RXFULL \ + |UART_FLAG_TXOV) + +//interrupt +#define UART_INT_TXDONE (0x1U << UART_CTRL_TXDONEIE_Pos) +#define UART_INT_RXPE (0x1U << UART_CTRL_RXPEIE_Pos) +#define UART_INT_RXOV (0x1U << UART_CTRL_RXOVIE_Pos) +#define UART_INT_TXOV (0x1U << UART_CTRL_TXOVIE_Pos) +#define UART_INT_RX (0x1U << UART_CTRL_RXIE_Pos) +#define UART_INT_Msk (UART_INT_TXDONE \ + |UART_INT_RXPE \ + |UART_INT_RXOV \ + |UART_INT_TXOV \ + |UART_INT_RX) + +//INTStatus +#define UART_INTSTS_TXDONE (0x1U << UART_INTSTS_TXDONEIF_Pos) +#define UART_INTSTS_RXPE (0x1U << UART_INTSTS_RXPEIF_Pos) +#define UART_INTSTS_RXOV (0x1U << UART_INTSTS_RXOVIF_Pos) +#define UART_INTSTS_TXOV (0x1U << UART_INTSTS_TXOVIF_Pos) +#define UART_INTSTS_RX (0x1U << UART_INTSTS_RXIF_Pos) +#define UART_INTSTS_Msk (UART_INTSTS_TXDONE \ + |UART_INTSTS_RXPE \ + |UART_INTSTS_RXOV \ + |UART_INTSTS_TXOV \ + |UART_INTSTS_RX) + +/* Private macros ------------------------------------------------------------*/ +#define IS_UART_MODE(__MODE__) (((((__MODE__) & UART_MODE_Msk) != 0U) && (((__MODE__) & ~UART_MODE_Msk) == 0U))) + +#define IS_UART_PARITY(__PARITY__) (((__PARITY__) == UART_PARITY_EVEN) ||\ + ((__PARITY__) == UART_PARITY_ODD) ||\ + ((__PARITY__) == UART_PARITY_0) ||\ + ((__PARITY__) == UART_PARITY_1) ||\ + ((__PARITY__) == UART_PARITY_NONE)) + +#define IS_UART_FIRSTBIT(__FIRSTBIT__) (((__FIRSTBIT__) == UART_FIRSTBIT_LSB) ||\ + ((__FIRSTBIT__) == UART_FIRSTBIT_MSB)) + +#define IS_UART_BAUDRATE(__BAUDRATE__) ((300UL <= (__BAUDRATE__)) &&\ + ((__BAUDRATE__) <= 819200UL)) + +#define IS_UART_FLAGR(__FLAGR__) (((__FLAGR__) == UART_FLAG_DMATXDONE) ||\ + ((__FLAGR__) == UART_FLAG_RXPARITY) ||\ + ((__FLAGR__) == UART_FLAG_TXDONE) ||\ + ((__FLAGR__) == UART_FLAG_RXPE) ||\ + ((__FLAGR__) == UART_FLAG_RXOV) ||\ + ((__FLAGR__) == UART_FLAG_TXOV) ||\ + ((__FLAGR__) == UART_FLAG_RXFULL)) + +#define IS_UART_FLAGC(__FLAGC__) ((((__FLAGC__) & UART_FLAG_RCMsk) != 0U) &&\ + (((__FLAGC__) & ~UART_FLAG_RCMsk) == 0U)) + +#define IS_UART_INT(__INT__) ((((__INT__) & UART_INT_Msk) != 0U) &&\ + (((__INT__) & ~UART_INT_Msk) == 0U)) + +#define IS_UART_INTFLAGR(__INTFLAGR__) (((__INTFLAGR__) == UART_INTSTS_TXDONE) ||\ + ((__INTFLAGR__) == UART_INTSTS_RXPE) ||\ + ((__INTFLAGR__) == UART_INTSTS_RXOV) ||\ + ((__INTFLAGR__) == UART_INTSTS_TXOV) ||\ + ((__INTFLAGR__) == UART_INTSTS_RX)) + +#define IS_UART_INTFLAGC(__INTFLAGC__) ((((__INTFLAGC__) & UART_INTSTS_Msk) != 0U) &&\ + (((__INTFLAGC__) & ~UART_INTSTS_Msk) == 0U)) + +/****************************** UART Instances ********************************/ +#define IS_UART_ALL_INSTANCE(INSTANCE) (((INSTANCE) == UART0) || \ + ((INSTANCE) == UART1) || \ + ((INSTANCE) == UART2) || \ + ((INSTANCE) == UART3) || \ + ((INSTANCE) == UART4) || \ + ((INSTANCE) == UART5)) + +/* Exported Functions ------------------------------------------------------- */ +/* UART Exported Functions Group1: + Initialization and functions --------------*/ +void UART_DeInit(UART_Type *UARTx); +void UART_Init(UART_Type *UARTx, UART_InitType *InitStruct); +void UART_StructInit(UART_InitType *InitStruct); +/* UART Exported Functions Group2: + (Interrupt) Flag --------------------------*/ +uint8_t UART_GetFlag(UART_Type *UARTx, uint32_t FlagMask); +void UART_ClearFlag(UART_Type *UARTx, uint32_t FlagMask); +void UART_INTConfig(UART_Type *UARTx, uint32_t INTMask, uint8_t NewState); +uint8_t UART_GetINTStatus(UART_Type *UARTx, uint32_t INTMask); +void UART_ClearINTStatus(UART_Type *UARTx, uint32_t INTMask); +/* UART Exported Functions Group3: + Transfer datas ----------------------------*/ +void UART_SendData(UART_Type *UARTx, uint8_t ch); +uint8_t UART_ReceiveData(UART_Type *UARTx); +/* UART Exported Functions Group4: + MISC Configuration ------------------------*/ +void UART_BaudrateConfig(UART_Type *UARTx, uint32_t BaudRate); +void UART_Cmd(UART_Type *UARTx, uint32_t Mode, uint32_t NewState); +void UART_GetConfigINFO(UART_Type *UARTx, UART_ConfigINFOType *ConfigInfo); + + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_UART_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_version.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_version.h new file mode 100644 index 0000000000..542d05e1e2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_version.h @@ -0,0 +1,36 @@ +/** +******************************************************************************* + * @file lib_version.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Version library. +*******************************************************************************/ + +#ifndef __LIB_VERSION_H +#define __LIB_VERSION_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + +#define DRIVER_VERSION(major,minor) (((major) << 8) | (minor)) + +/* Exported Functions ------------------------------------------------------- */ + +/** + * @brief Read receive data register. + * @param None + * @retval Version value + */ +uint16_t Target_GetDriveVersion(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_VERSION_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_wdt.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_wdt.h new file mode 100644 index 0000000000..300884dc26 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/inc/lib_wdt.h @@ -0,0 +1,47 @@ +/** + ****************************************************************************** + * @file lib_wdt.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief WDT library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#ifndef __LIB_WDT_H +#define __LIB_WDT_H + +#ifdef __cplusplus + extern "C" { +#endif + +#include "target.h" + + +#define WDT_2_SECS (0x0U << PMU_WDTEN_WDTSEL_Pos) +#define WDT_4_SECS (0x1U << PMU_WDTEN_WDTSEL_Pos) +#define WDT_8_SECS (0x2U << PMU_WDTEN_WDTSEL_Pos) +#define WDT_16_SECS (0x3U << PMU_WDTEN_WDTSEL_Pos) + +/* Private macros ------------------------------------------------------------*/ +#define IS_WDT_PERIOD(__PERIOD__) (((__PERIOD__) == WDT_2_SECS) ||\ + ((__PERIOD__) == WDT_4_SECS) ||\ + ((__PERIOD__) == WDT_8_SECS) ||\ + ((__PERIOD__) == WDT_16_SECS)) + +/* Exported Functions ------------------------------------------------------- */ +void WDT_Enable(void); +void WDT_Disable(void); +void WDT_Clear(void); +void WDT_SetPeriod(uint32_t period); +uint16_t WDT_GetCounterValue(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __LIB_WDT_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc.c new file mode 100644 index 0000000000..decb391094 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc.c @@ -0,0 +1,988 @@ +/** + ****************************************************************************** + * @file lib_adc.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ADC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_adc.h" +#include "main.h" + +#define ANA_INTEN_ADCMsk (0x3FC003U) +#define ANA_INTSTS_ADCMsk (0x3FC003U) + +#define ADC_SYNC_WR(); {__NOP(); __NOP(); __NOP(); __NOP();} + +/** + * @brief Initializes ADC peripheral registers to their default reset values. + * @note 1. Disable ADC + 2. Disable resistor division. + 3. Disable ADC auto/manual done interrupt. + 4. The ADC correlation (register) is written to the default value. + * @param None + * @retval status: - 0 Function succeeded. + * - nep 0 Function failed. + */ +uint32_t ADC_DeInit(void) +{ + uint32_t tmp[3]; + uint32_t ANA_ADCCTRL0_RSTValue = (0x300000U); + uint32_t ANA_ADCCTRL1_RSTValue = (0x02U); + uint32_t ANA_ADCCTRL2_RSTValue = (0x8014U); + uint32_t ANA_ADCDATATHD1_0_RSTValue = (0U); + uint32_t ANA_ADCDATATHD3_2_RSTValue = (0U); + uint32_t ANA_ADCDATATHD_CH_RSTValue = (0U); + uint32_t RTC_ADCUCALK_RSTValue = (0x599A599AU); + uint32_t RTC_ADCMACTL_RSTValue = (0x78000000U); + uint32_t RTC_ADCDTCTL_RSTValue = (0x80000000); + uint32_t i, nCount, nValue, nAddress, nChecksum; + uint8_t need_check = 0; + uint32_t retval = 0; + + nCount = *(__IO uint32_t *)NVR_REGINFOCOUNT1; + nChecksum = nCount; + nChecksum = ~nChecksum; + if(nChecksum != *(__IO uint32_t *)(NVR_REGINFOCOUNT1+4)) + { + nCount = *(__IO uint32_t *)(NVR_REGINFOCOUNT1+NVR_REGINFOBAKOFFSET); + nChecksum = nCount; + nChecksum = ~nChecksum; + if(nChecksum != *(__IO uint32_t *)(NVR_REGINFOCOUNT1+NVR_REGINFOBAKOFFSET+4)) + { + retval = 0xFFFFFFFFUL; + } + else + { + need_check = 1; + } + } + else + { + need_check = 1; + } + + if (need_check) + { + for(i=0; iADCCTRL0)) + { + ANA_ADCCTRL0_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&ANA->ADCCTRL1)) + { + ANA_ADCCTRL1_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&ANA->ADCCTRL2)) + { + ANA_ADCCTRL2_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&ANA->ADCDATATHD1_0)) + { + ANA_ADCDATATHD1_0_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&ANA->ADCDATATHD3_2)) + { + ANA_ADCDATATHD3_2_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&ANA->ADCDATATHD_CH)) + { + ANA_ADCDATATHD_CH_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&RTC->ADCUCALK)) + { + RTC_ADCUCALK_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&RTC->ADCMACTL)) + { + RTC_ADCMACTL_RSTValue = nValue; + } + else if(nAddress == (uint32_t)(&RTC->ADCDTCTL)) + { + RTC_ADCDTCTL_RSTValue = nValue; + } + else + { /* No operation */ } + } + } + + if((ANA->ADCSTATE&0x07) != 0) + { + ADC_Cmd(DISABLE); + } + + /* 6.5MHz clock. */ + ANA->REG0 &= ~ANA_REG0_ADCFRQSEL; + /* ADC mode */ + ANA->REG1 &= ~ANA_REG1_ADCMODESEL; + /* Power up VINBUF and REFBUF. */ + ANA->REG11 = 0; + /* Power down ADC */ + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + /* Disable interrupt, Clear interrupt flag */ + ANA->INTEN &= ~ANA_INTEN_ADCMsk; + ANA->INTSTS = ANA_INTSTS_ADCMsk; + while (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG); + ANA->ADCCTRL0 = ANA_ADCCTRL0_RSTValue; + while (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG); + ANA->ADCCTRL1 = ANA_ADCCTRL1_RSTValue; + ANA->ADCCTRL2 = ANA_ADCCTRL2_RSTValue|ANA_ADCCTRL2_CONV_ERR_CLR|ANA_ADCCTRL2_CAL_ERR_CLR; + + ANA->ADCDATATHD1_0= ANA_ADCDATATHD1_0_RSTValue; + ANA->ADCDATATHD3_2 = ANA_ADCDATATHD3_2_RSTValue; + ANA->ADCDATATHD_CH = ANA_ADCDATATHD_CH_RSTValue; + tmp[0] = RTC_ADCUCALK_RSTValue; + tmp[1] = RTC_ADCMACTL_RSTValue; + tmp[2] = RTC_ADCDTCTL_RSTValue; + RTC_WriteRegisters((uint32_t)&RTC->ADCUCALK, tmp, 3); + + ANA->ADCCTRL2 = ANA_ADCCTRL2_RSTValue; + + return (retval); +} + +/** + * @brief Fills each ADC_InitStruct member with its default value. + * @param ADC_InitStruct: pointer to an ADC_InitType structure which will be initialized. + * @retval None + */ +void ADC_StructInit(ADC_InitType* ADC_InitStruct) +{ + /*------ Reset ADC init structure parameters values ------*/ + ADC_InitStruct->Mode = ADC_MODE_DC; + ADC_InitStruct->ClockSource = ADC_CLKSRC_RCH; + ADC_InitStruct->ClockFrq = ADC_CLKFRQ_HIGH; + ADC_InitStruct->SkipSample = ADC_SKIP_0; + ADC_InitStruct->AverageSample = ADC_AVERAGE_2; + ADC_InitStruct->TriggerSource = ADC_TRIGSOURCE_OFF; + ADC_InitStruct->Channel = ADC_CHANNEL_GND0; + ADC_InitStruct->ResDivEnable = 0; + ADC_InitStruct->AverageEnable = 0; +} + +/** + * @brief Initializes ADC. + * @param ADC_InitStruct: pointer to an ADC_InitType structure which will be initialized. + Mode: + ADC_MODE_DC (Not include ADC_CHANNEL_TEMP) + ADC_MODE_AC (Only ADC_CHANNEL_CHx be valid) + ADC_MODE_TEMP (Only ADC_CHANNEL_TEMP be valid) + ClockSource: + ADC_CLKSRC_RCH + ADC_CLKSRC_PLLL + ClockFrq: + ADC_CLKFRQ_HIGH + ADC_CLKFRQ_LOW + SkipSample: + ADC_SKIP_0 + ADC_SKIP_4 + ADC_SKIP_8 + ADC_SKIP_12 + AverageSample: + ADC_AVERAGE_2 + ADC_AVERAGE_4 + ADC_AVERAGE_8 + ADC_AVERAGE_16 + ADC_AVERAGE_32 + ADC_AVERAGE_64 + TriggerSource: + ADC_TRIGSOURCE_OFF + ADC_TRIGSOURCE_ITVSITV + ADC_TRIGSOURCE_WKUSEC + ADC_TRIGSOURCE_ALARM + ADC_TRIGSOURCE_TMR0 + ADC_TRIGSOURCE_TMR1 + ADC_TRIGSOURCE_TMR2 + ADC_TRIGSOURCE_TMR3 + Channel: + ResDivEnable: (also can be ADC_CHANNEL_NONE) + AverageEnable: (also can be ADC_CHANNEL_NONE) + ADC_CHANNEL_GND0 + ADC_CHANNEL_BAT1 + ADC_CHANNEL_BATRTC + ADC_CHANNEL_CH3 + ADC_CHANNEL_CH4 + ADC_CHANNEL_CH5 + ADC_CHANNEL_CH6 + ADC_CHANNEL_CH7 + ADC_CHANNEL_CH8 + ADC_CHANNEL_CH9 + ADC_CHANNEL_TEMP + ADC_CHANNEL_CH11 + ADC_CHANNEL_DVCC + ADC_CHANNEL_GND13 + ADC_CHANNEL_GND14 + ADC_CHANNEL_GND15 + ADC_CHANNEL_DC_ALL + ADC_CHANNEL_AC_ALL + * @retval None + */ +void ADC_Init(ADC_InitType *ADC_InitStruct) +{ + uint32_t tmp_anareg0, tmp_anareg1, tmp_anareg3, tmp_anareg11; + uint32_t tmp_adcctrl0, tmp_adcctrl1, tmp_adcctrl2; + uint32_t tmp_rtcadcmactl; + + /* Check parameters */ + assert_parameters(IS_ADC_MODE(ADC_InitStruct->Mode)); + assert_parameters(IS_ADC_CLKSRC(ADC_InitStruct->ClockSource)); + assert_parameters(IS_ADC_CLKFRQ(ADC_InitStruct->ClockFrq)); + assert_parameters(IS_ADC_SKIP(ADC_InitStruct->SkipSample)); + assert_parameters(IS_ADC_AVERAG(ADC_InitStruct->AverageSample)); + assert_parameters(IS_ADC_TRIGSOURCE(ADC_InitStruct->TriggerSource)); + + while (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG); + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + + tmp_adcctrl0 = ANA->ADCCTRL0; + tmp_adcctrl1 = ANA->ADCCTRL1; + tmp_adcctrl2 = ANA->ADCCTRL2; + tmp_anareg0 = ANA->REG0; + tmp_anareg1 = ANA->REG1; + tmp_anareg3 = ANA->REG3; + tmp_anareg11 = 0; + tmp_rtcadcmactl = RTC->ADCMACTL; + + /* Configure clock source and trigger source */ + tmp_adcctrl0 &= ~(ANA_ADCCTRL0_AEN | ANA_ADCCTRL0_CLKSRCSEL); + tmp_adcctrl0 |= (ADC_InitStruct->TriggerSource | ADC_InitStruct->ClockSource); + + /* Configure ClockFrq */ + if (ADC_InitStruct->ClockFrq == ADC_CLKFRQ_HIGH) + { + tmp_anareg0 &= ~ANA_REG0_ADCFRQSEL; + tmp_adcctrl2 &= ~ANA_ADCCTRL2_ADCCR; + } + else + { + tmp_anareg0 |= ANA_REG0_ADCFRQSEL; + tmp_adcctrl2 |= ANA_ADCCTRL2_ADCCR; + } + + /* Configure skip samples and average samples */ + tmp_rtcadcmactl &= ~(RTC_ADCMACTL_SKIP_SAMPLE | RTC_ADCMACTL_AVERAGE_SAMPLE); + tmp_rtcadcmactl |= (ADC_InitStruct->SkipSample | ADC_InitStruct->AverageSample); + + /* Mode: DC */ + if (ADC_InitStruct->Mode == ADC_MODE_DC) + { + /* Check parameters */ + assert_parameters(IS_ADC_CHANNEL_DC(ADC_InitStruct->Channel)); + assert_parameters(IS_ADC_CHANNEL_EN_DC(ADC_InitStruct->AverageEnable)); + assert_parameters(IS_ADC_CHANNEL_EN_DC(ADC_InitStruct->ResDivEnable)); + + /* Enable or disable Channels */ + tmp_adcctrl2 &= ~ANA_ADCCTRL2_SCAN_CHx; + tmp_adcctrl2 |= (ADC_InitStruct->Channel << ADC_CHANNEL_SHIFT); + /* Enable or disable average */ + tmp_rtcadcmactl &= ~RTC_ADCMACTL_AVERAGE_CHx; + tmp_rtcadcmactl |= (ADC_InitStruct->AverageEnable << ADC_AVERAGECH_SHIFT); + /* Enable or disable RESDIV */ + tmp_adcctrl1 &= ~ANA_ADCCTRL1_RESDIV_CHx; + tmp_adcctrl1 |= (ADC_InitStruct->ResDivEnable << ADC_RESDIVCH_SHIFT); + /* Others */ + tmp_anareg1 &= ~ANA_REG1_ADCMODESEL; + } + /* Mode: AC */ + else if (ADC_InitStruct->Mode == ADC_MODE_AC) + { + /* Check parameters */ + assert_parameters(IS_ADC_CHANNEL_AC(ADC_InitStruct->Channel)); + assert_parameters(IS_ADC_CHANNEL_EN_AC(ADC_InitStruct->AverageEnable)); + + /* Enable or disable Channels */ + tmp_adcctrl2 &= ~ANA_ADCCTRL2_SCAN_CHx; + tmp_adcctrl2 |= (ADC_InitStruct->Channel << ADC_CHANNEL_SHIFT); + /* Enable or disable average */ + tmp_rtcadcmactl &= ~RTC_ADCMACTL_AVERAGE_CHx; + tmp_rtcadcmactl |= (ADC_InitStruct->AverageEnable << ADC_AVERAGECH_SHIFT); + /* Enable or disable RESDIV */ + tmp_adcctrl1 &= ~ANA_ADCCTRL1_RESDIV_CHx; + tmp_adcctrl1 |= (ADC_InitStruct->Channel << ADC_RESDIVCH_SHIFT); + /* Others */ + tmp_anareg1 |= ANA_REG1_ADCMODESEL; + } + /* Mode: TEMP */ + else + { + /* Check parameters */ + assert_parameters(IS_ADC_CHANNEL_TEMP(ADC_InitStruct->Channel)); + + /* Enable ADC_CHANNEL_TEMP */ + tmp_adcctrl2 &= ~ANA_ADCCTRL2_SCAN_CHx; + tmp_adcctrl2 |= (ADC_CHANNEL_TEMP << ADC_CHANNEL_SHIFT); + /* Enable average */ + tmp_rtcadcmactl &= ~RTC_ADCMACTL_AVERAGE_CHx; + tmp_rtcadcmactl |= (ADC_CHANNEL_TEMP << ADC_AVERAGECH_SHIFT); + /* Disable RESDIV */ + tmp_adcctrl1 &= ~ANA_ADCCTRL1_RESDIV_CHx; + /* Others */ + tmp_anareg1 &= ~ANA_REG1_ADCMODESEL; + if(ADC_InitStruct->ClockFrq == ADC_CLKFRQ_LOW) + { + /* It can improve the accuracy of temperature measurement */ + tmp_anareg11 |= (ANA_REG11_VINBUFPD | ANA_REG11_REFBUFPD); + } + } + + ANA->ADCCTRL0 = tmp_adcctrl0&(~ANA_ADCCTRL0_MTRIG); + ANA->ADCCTRL1 = tmp_adcctrl1; + ANA->ADCCTRL2 = tmp_adcctrl2; + ANA->REG0 = tmp_anareg0; + ANA->REG1 = tmp_anareg1; + ANA->REG3 = tmp_anareg3; + ANA->REG11 = tmp_anareg11; + RTC_WriteRegisters((uint32_t)&RTC->ADCMACTL, &tmp_rtcadcmactl, 1); +} + +/** + * @brief Fills each ADCTHD_InitType member with its default value. + * @param ADC_THDStruct: pointer to an ADC_THDStruct structure which will be initialized. + * @retval None + */ +void ADC_THDStructInit(ADCTHD_InitType* ADC_THDStruct) +{ + ADC_THDStruct->THDChannel = ADC_THDCHANNEL0; + ADC_THDStruct->UpperTHD = 0x0000; + ADC_THDStruct->LowerTHD = 0x0000; + ADC_THDStruct->TriggerSel = ADC_THDSEL_HIGH; + ADC_THDStruct->THDSource = ADC_CHANNEL_GND0; +} + +/** + * @brief Initializes ADC threshold. + * @param ADC_THDStruct: + * THDChannel: + * ADC_THDCHANNEL0 + * ADC_THDCHANNEL1 + * ADC_THDCHANNEL2 + * ADC_THDCHANNEL3 + * UpperTHD: + * 0~0xFF + * LowerTHD: + * 0~0xFF + * TriggerSel: + * ADC_THDSEL_HIGH + * ADC_THDSEL_RISING + * ADC_THDSEL_FALLING + * ADC_THDSEL_BOTH + * THDSource: + * ADC_CHANNEL_GND0 + * ADC_CHANNEL_BAT1 + * ADC_CHANNEL_BATRTC + * ADC_CHANNEL_CH3 + * ADC_CHANNEL_CH4 + * ADC_CHANNEL_CH5 + * ADC_CHANNEL_CH6 + * ADC_CHANNEL_CH7 + * ADC_CHANNEL_CH8 + * ADC_CHANNEL_CH9 + * ADC_CHANNEL_TEMP + * ADC_CHANNEL_CH11 + * ADC_CHANNEL_DVCC + * ADC_CHANNEL_GND13 + * ADC_CHANNEL_GND14 + * ADC_CHANNEL_GND15 + * @retval None + */ +void ADC_THDInit(ADCTHD_InitType* ADC_THDStruct) +{ + uint32_t tmp = 0; + uint32_t position = 0x00U; + uint32_t currentch = 0x00U; + + /* Check parameters */ + assert_parameters(IS_ADC_THDCHANNEL(ADC_THDStruct->THDChannel)); + assert_parameters(IS_ADC_THDSEL(ADC_THDStruct->TriggerSel)); + assert_parameters(IS_ADC_CHANNEL_GETDATA(ADC_THDStruct->THDSource)); + + while ((ADC_THDStruct->THDSource >> position) != 0U) + { + /* Get current ch position */ + currentch = ADC_THDStruct->THDSource & (0x01U << position); + + if (currentch) + { + break; + } + position++; + } + + if ((ADC_THDStruct->THDChannel == ADC_THDCHANNEL0) || (ADC_THDStruct->THDChannel == ADC_THDCHANNEL1)) + { + ANA->ADCDATATHD1_0 &= ~((ANA_ADCDATATHD1_0_LOWER_THD0|ANA_ADCDATATHD1_0_UPPER_THD0) << (16*ADC_THDStruct->THDChannel)); + ANA->ADCDATATHD1_0 |= (((ADC_THDStruct->UpperTHD<<8)|ADC_THDStruct->LowerTHD) << (16*ADC_THDStruct->THDChannel)); + } + else + { + ANA->ADCDATATHD3_2 &= ~((ANA_ADCDATATHD3_2_LOWER_THD2|ANA_ADCDATATHD3_2_UPPER_THD2) << (16*(ADC_THDStruct->THDChannel - 2))); + ANA->ADCDATATHD3_2 |= (((ADC_THDStruct->UpperTHD<<8)|ADC_THDStruct->LowerTHD) << (16*(ADC_THDStruct->THDChannel - 2))); + } + + tmp = ANA->ADCDATATHD_CH; + tmp &= ~(ANA_ADCDATATHD_CH_THD0_SEL << (ADC_THDStruct->THDChannel*2)); + tmp |= (ADC_THDStruct->TriggerSel << (ADC_THDStruct->THDChannel*2 + ANA_ADCDATATHD_CH_THD0_SEL_Pos)); + + tmp &= ~(ANA_ADCDATATHD_CH_THD0_CH << (ADC_THDStruct->THDChannel*4)); + tmp |= (position << (ADC_THDStruct->THDChannel*4+ANA_ADCDATATHD_CH_THD0_CH_Pos)); + + ANA->ADCDATATHD_CH = tmp; +} + +/** + * @brief Starts ADC calibration (ADC calibration is implemented when DPORST or ADC RESET happened). + * @param None + * @retval None + */ +void ADC_Calibration(void) +{ + //Set 6.5M ADC clock + ANA->REG0 &= ~ANA_REG0_ADCFRQSEL; + ADC_SYNC_WR(); + + //Disable ADC + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + ADC_SYNC_WR(); + ANA->ADCCTRL2 |= ANA_ADCCTRL2_CAL_ERR_CLR; + ADC_SYNC_WR(); + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_CAL_ERR_CLR; + ADC_SYNC_WR(); + + while(1) + { + //ADC STOP + ANA->ADCCTRL0 |= ANA_ADCCTRL0_STOP; + ADC_SYNC_WR(); + ANA->ADCCTRL0 &= ~ANA_ADCCTRL0_STOP; + ADC_SYNC_WR(); + + //Reset ADC + ANA->ADCCTRL2 |= ANA_ADCCTRL2_RESET; + ADC_SYNC_WR(); + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_RESET; + ADC_SYNC_WR(); + + //Enable ADC TRG_CAL + ANA->ADCCTRL2 |= ANA_ADCCTRL2_ADC_EN_TRG_CAL; + ADC_SYNC_WR(); + ANA->ADCCTRL2 |= ANA_ADCCTRL2_ADC_EN; + ADC_SYNC_WR(); + + /* while loop until ADC calibration is done */ + ADC_SYNC_WR(); + while (!(ANA->ADCCTRL2 & ANA_ADCCTRL2_ADC_CAL_DONE)); + + //Disable ADC TRG_CAL + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN_TRG_CAL; + ADC_SYNC_WR(); + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + ADC_SYNC_WR(); + + if(ANA->ADCCTRL2 & ANA_ADCCTRL2_CAL_ERR) + { + ANA->ADCCTRL2 |= ANA_ADCCTRL2_CAL_ERR_CLR; + ADC_SYNC_WR(); + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_CAL_ERR_CLR; + ADC_SYNC_WR(); + } + else + { + break; + } + } +} + +/** + * @brief Calculates ADC value via ADC original data. + * @param [in]Mode: + ADC_3V_ADCCHx_NODIV + ADC_3V_ADCCHx_RESDIV + ADC_3V_BAT1_RESDIV + ADC_3V_BATRTC_RESDIV + ADC_5V_ADCCHx_NODIV + ADC_5V_ADCCHx_RESDIV + ADC_5V_BAT1_RESDIV + ADC_5V_BATRTC_RESDIV + ADC_TEMP + * @param [in]adc_data: The ADC original data + * @param [out]value: The pointer of value calculated by this function + * @retval 1 NVR checksum error. + 0 Function successed. + */ +uint32_t ADC_CalculateValue(uint32_t Mode, int16_t adc_data, int16_t *value) +{ + NVR_ADCVOLPARA parameter; + NVR_TempParams TempParams; + + /* Check parameters */ + assert_parameters(IS_ADCVOL_MODE(Mode)); + + if (Mode == ADC_TEMP) + { + if (NVR_GetTempParameters(&TempParams)) + { + return 1; + } + else + { + /* Calculate temperature */ + *value = ((TempParams.RTCTempP0 * ((adc_data*adc_data)>>16)) + TempParams.RTCTempP1*adc_data + TempParams.RTCTempP2) >> 8; + } + } + else + { + if (NVR_GetVoltageParameters(Mode, ¶meter)) + { + return 1; + } + else + { + *value = (int16_t)((parameter.aParameter*(float)adc_data + parameter.bParameter) + parameter.OffsetParameter); + } + } + + return 0; +} + +/** + * @brief Enables or disables ADC. + * @note None + * @param NewState + ENABLE + DISABLE + * @retval None + */ +void ADC_Cmd(uint32_t NewState) +{ + __IO uint32_t dly = 400UL; + + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + while (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG); + if (NewState == DISABLE) + { + if(ANA->ADCSTATE & ANA_ADCSTATE_ADCSTATE) + { + ANA->ADCCTRL0 |= ANA_ADCCTRL0_STOP; + if ((MISC2->CLKSEL&MISC2_CLKSEL_CLKSEL) == MISC2_CLKSEL_CLKSEL_RTCCLK) + { + __NOP(); + __NOP(); + } + else + { + while (dly--) + __NOP(); + } + ANA->ADCCTRL0 &= ~ANA_ADCCTRL0_STOP; + } + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + } + else + { + ANA->ADCCTRL0 &= ~ANA_ADCCTRL0_STOP; + ANA->ADCCTRL2 |= ANA_ADCCTRL2_ADC_EN; + + if ((MISC2->CLKSEL&MISC2_CLKSEL_CLKSEL) == MISC2_CLKSEL_CLKSEL_RTCCLK) + { + __NOP(); + __NOP(); + } + else + { + while (dly--) + __NOP(); + } + /* Start Manual ADC conversion */ + ADC_StartManual(); + /* Waiting Manual ADC conversion done */ + ADC_WaitForManual(DELAY_MS(100)); + } +} + +/** + * @brief Enables or disables ADC lower threshold detect function. + * @note None + * @param THDChannel: + ADC_THDCHANNEL0~ADC_THDCHANNEL3 + NewState + ENABLE + DISABLE + * @retval None + */ +void ADC_LowerTHDCmd(uint32_t THDChannel,uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_ADC_THDCHANNEL(THDChannel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == DISABLE) + { + ANA->ADCCTRL1 &= ~(ANA_ADCCTRL1_LOWER_THD0_EN << (THDChannel*2)); + } + else + { + ANA->ADCCTRL1 |= (ANA_ADCCTRL1_LOWER_THD0_EN << (THDChannel*2)); + } +} + +/** + * @brief Enables or disables ADC upper threshold detect function. + * @note None + * @param THDChannel: + ADC_THDCHANNEL0~ADC_THDCHANNEL3 + NewState + ENABLE + DISABLE + * @retval None + */ +void ADC_UpperTHDCmd(uint32_t THDChannel,uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_ADC_THDCHANNEL(THDChannel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == DISABLE) + { + ANA->ADCCTRL1 &= ~(ANA_ADCCTRL1_UPPER_THD0_EN << (THDChannel*2)); + } + else + { + ANA->ADCCTRL1 |= (ANA_ADCCTRL1_UPPER_THD0_EN << (THDChannel*2)); + } +} + +/** + * @brief Starts ADC manual-trigger. + * @param None + * @retval None + */ +void ADC_StartManual(void) +{ + while (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG); + ANA->ADCCTRL0 |= ANA_ADCCTRL0_MTRIG; +} + +/** + * @brief Waits until the last Manual ADC conversion done. + * @param Timeout + * @retval 0:adc finish + 1:adc timeout + + */ +uint8_t ADC_WaitForManual(uint32_t Timeout) +{ + uint32_t TickCurrent; + + SysTick->LOAD = Timeout; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk \ + |SysTick_CTRL_ENABLE_Msk; + + while(1) + { + /* Check adc done */ + if(0 == (ANA->ADCCTRL0 & ANA_ADCCTRL0_MTRIG)) + { + SysTick->CTRL = 0; + return 0; + } + /* Check timeout */ + TickCurrent = SysTick->CTRL; + if ((TickCurrent & SysTick_CTRL_COUNTFLAG_Msk)) + { + break; + } + } + + SysTick->CTRL = 0; + return 1; + +} + +/** + * @brief ADC soft reset + * @param ADC init values + * @retval 0:adc success + 1:adc fail + + */ +uint8_t ADC_SoftReset(ADC_InitType* ADC_InitStruct) +{ + /* ADC DeInit */ + ADC_DeInit(); + + /* ADC Calibration */ + ADC_Calibration(); + + /* ADC Init */ + ADC_Init(ADC_InitStruct); + + /* ADC Enable */ + ADC_Cmd(ENABLE); + + return 0; +} + +/** + * @brief Waits until the last Auto ADC conversion done. + * @param None + * @retval 0:adc finish + 1:adc timeout + + */ +uint8_t ADC_WaitForAuto(uint32_t Timeout) +{ + uint32_t TickCurrent; + + SysTick->LOAD = Timeout; + SysTick->VAL = 0; + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk \ + |SysTick_CTRL_ENABLE_Msk; + + while(1) + { + /* Check adc done */ + if(ADC_GetINTStatus(ADC_INTSTS_AUTODONE)) + { + ADC_ClearINTStatus(ADC_INTSTS_AUTODONE); + SysTick->CTRL = 0; + return 0; + } + /* Check timeout */ + TickCurrent = SysTick->CTRL; + if ((TickCurrent & SysTick_CTRL_COUNTFLAG_Msk)) + { + break; + } + } + + SysTick->CTRL = 0; + return 1; + +} +/** + * @brief Gets ADC vonversion value. + * @param Channel: + * ADC_CHANNEL_GND0 + * ADC_CHANNEL_BAT1 + * ADC_CHANNEL_BATRTC + * ADC_CHANNEL_CH3 + * ADC_CHANNEL_CH4 + * ADC_CHANNEL_CH5 + * ADC_CHANNEL_CH6 + * ADC_CHANNEL_CH7 + * ADC_CHANNEL_CH8 + * ADC_CHANNEL_CH9 + * ADC_CHANNEL_TEMP + * ADC_CHANNEL_CH11 + * ADC_CHANNEL_DVCC + * ADC_CHANNEL_GND13 + * ADC_CHANNEL_GND14 + * ADC_CHANNEL_GND15 + * @retval ADC conversion value. + */ +int16_t ADC_GetADCConversionValue(uint32_t Channel) +{ + uint32_t position = 0x0000UL; + uint32_t chcurrent = 0x0000UL; + + /* Check parameters */ + assert_parameters(IS_ADC_CHANNEL_GETDATA(Channel)); + + while ((Channel >> position) != 0UL) + { + chcurrent = Channel & (0x01U << position); + if (chcurrent) + break; + position++; + } + return (ANA->ADCDATA[position]); +} + +/** + * @brief Enables or disables ADC interrupt. + * @param INTMask: can use the '|' operator + ADC_INT_UPPER_TH3 + ADC_INT_LOWER_TH3 + ADC_INT_UPPER_TH2 + ADC_INT_LOWER_TH2 + ADC_INT_UPPER_TH1 + ADC_INT_LOWER_TH1 + ADC_INT_UPPER_TH0 + ADC_INT_LOWER_TH0 + ADC_INT_AUTODONE + ADC_INT_MANUALDONE + NewState + ENABLE + DISABLE + * @retval None + */ +void ADC_INTConfig(uint32_t INTMask, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + assert_parameters(IS_ADC_INT(INTMask)); + + if (NewState == ENABLE) + ANA->INTEN |= INTMask; + else + ANA->INTEN &= ~INTMask; +} + +/** + * @brief Clears ADC interrupt status. + * @param INTMask: can use the '|' operator + ADC_INTSTS_UPPER_TH3 + ADC_INTSTS_LOWER_TH3 + ADC_INTSTS_UPPER_TH2 + ADC_INTSTS_LOWER_TH2 + ADC_INTSTS_UPPER_TH1 + ADC_INTSTS_LOWER_TH1 + ADC_INTSTS_UPPER_TH0 + ADC_INTSTS_LOWER_TH0 + ADC_INTSTS_AUTODONE + ADC_INTSTS_MANUALDONE + * @retval None + */ +void ADC_ClearINTStatus(uint32_t INTMask) +{ + /* Parameter check */ + assert_parameters(IS_ADC_INTFLAGC(INTMask)); + + ANA->INTSTS = INTMask; +} + +/** + * @brief Gets ADC interrupt status. + * @param INTMask: + ADC_INTSTS_UPPER_TH3 + ADC_INTSTS_LOWER_TH3 + ADC_INTSTS_UPPER_TH2 + ADC_INTSTS_LOWER_TH2 + ADC_INTSTS_UPPER_TH1 + ADC_INTSTS_LOWER_TH1 + ADC_INTSTS_UPPER_TH0 + ADC_INTSTS_LOWER_TH0 + ADC_INTSTS_AUTODONE + ADC_INTSTS_MANUALDONE + * @retval 1: status set + 0: status reset. + */ +uint8_t ADC_GetINTStatus(uint32_t INTMask) +{ + /* Parameter check */ + assert_parameters(IS_ADC_INTFLAGR(INTMask)); + + if (ANA->INTSTS & INTMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Gets ADC flag + * @param FlagMask + ADC_FLAG_CONV_ERR + ADC_FLAG_CAL_ERR + ADC_FLAG_CAL_DONE + ADC_FLAG_BUSY + * @retval 1 flag set + * 0 flag reset. + */ +uint8_t ADC_GetFlag(uint32_t FlagMask) +{ + /* Parameter check */ + assert_parameters(IS_ADC_ADCFLAG(FlagMask)); + + if (ANA->ADCCTRL2 & FlagMask) + return 1; + else + return 0; +} + +/** + * @brief Clears ADC flag + * @param FlagMask: status to clear, can use the '|' operator. + ADC_FLAG_CONV_ERR + ADC_FLAG_CAL_ERR + * @retval None + */ +void ADC_ClearFlag(uint32_t FlagMask) +{ + uint32_t tmp; + + /* Parameter check */ + assert_parameters(IS_ADC_ADCFLAGC(FlagMask)); + + if (FlagMask == ADC_FLAG_CONV_ERR) + { + tmp = ANA->ADCCTRL2; + tmp &= ~ANA_ADCCTRL2_CAL_ERR_CLR; + tmp |= ANA_ADCCTRL2_CONV_ERR_CLR; + } + else if (FlagMask == ADC_FLAG_CAL_ERR) + { + tmp = ANA->ADCCTRL2; + tmp &= ~ANA_ADCCTRL2_CONV_ERR_CLR; + tmp |= ANA_ADCCTRL2_CAL_ERR_CLR; + } + else + { + tmp = ANA->ADCCTRL2; + tmp |= (ANA_ADCCTRL2_CAL_ERR_CLR | ANA_ADCCTRL2_CONV_ERR_CLR); + } + ANA->ADCCTRL2 = tmp; +} + +/** + * @brief Gets threshold flag + * @param THDFlagMask + ADC_THDFLAG_UPPER3 + ADC_THDFLAG_LOWER3 + ADC_THDFLAG_UPPER2 + ADC_THDFLAG_LOWER2 + ADC_THDFLAG_UPPER1 + ADC_THDFLAG_LOWER1 + ADC_THDFLAG_UPPER0 + ADC_THDFLAG_LOWER0 + * @retval 1 flag set + * 0 flag reset. + */ +uint8_t ADC_GetTHDFlag(uint32_t THDFlagMask) +{ + /* Parameter check */ + assert_parameters(IS_ADC_THDFLAG(THDFlagMask)); + + if(ANA->ADCDATATHD_CH & THDFlagMask) + return 1; + else + return 0; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc_tiny.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc_tiny.c new file mode 100644 index 0000000000..b24a8863e7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_adc_tiny.c @@ -0,0 +1,176 @@ +/** + ****************************************************************************** + * @file lib_adc_tiny.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ADC_TINY library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_adc_tiny.h" + +#define ANA_REGF_RSTValue (0U) + +/** + * @brief Initializes the Tiny ADC peripheral registers to their default reset values. + * @param None + * @retval None + */ +void TADC_DeInit(void) +{ + ANA->REGF = ANA_REGF_RSTValue; + ANA->INTSTS = ANA_INTSTS_INTSTS13; + ANA->INTEN &= ~ANA_INTEN_INTEN13; + ANA->MISC &= ~ANA_MISC_TADCTH; +} + +/** + * @brief Fills each TADC_InitStruct member with its default value. + * @param TADC_InitStruct: pointer to an TADCInitType structure which will be initialized. + * @retval None + */ +void TADC_StructInit(TADCInitType* TADC_InitStruct) +{ + /*--------------- Reset TADC init structure parameters values ---------------*/ + /* Initialize the SignalSel member */ + TADC_InitStruct->SignalSel = ADCTINY_SIGNALSEL_IOE6; + /* Initialize the ADTREF1 member */ + TADC_InitStruct->ADTREF1 = ADCTINY_REF1_0_9; + /* Initialize the ADTREF2 member */ + TADC_InitStruct->ADTREF2 = ADCTINY_REF2_1_8; + /* Initialize the ADTREF3 member */ + TADC_InitStruct->ADTREF3 = ADCTINY_REF3_2_7; +} + +/** + * @brief Initializes Tiny ADC. + * @param TADC_InitStruct + SelADT: + ADCTINY_SIGNALSEL_IOE6 + ADCTINY_SIGNALSEL_IOE7 + ADTREF1: + ADCTINY_REF1_0_9 + ADCTINY_REF1_0_7 + ADTREF2: + ADCTINY_REF2_1_8 + ADCTINY_REF2_1_6 + ADTREF3: + ADCTINY_REF3_2_7 + ADCTINY_REF3_2_5 + * @retval None + */ +void TADC_Init(TADCInitType* TADC_InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_ADCTINY_SELADT(TADC_InitStruct->SignalSel)); + assert_parameters(IS_ADCTINY_ADTREF1(TADC_InitStruct->ADTREF1)); + assert_parameters(IS_ADCTINY_ADTREF2(TADC_InitStruct->ADTREF2)); + assert_parameters(IS_ADCTINY_ADTREF3(TADC_InitStruct->ADTREF3)); + + tmp = ANA->REGF; + tmp &= ~(ANA_REGF_ADTSEL \ + |ANA_REGF_ADTREF1SEL\ + |ANA_REGF_ADTREF2SEL\ + |ANA_REGF_ADTREF3SEL); + tmp |= (TADC_InitStruct->SignalSel \ + |TADC_InitStruct->ADTREF1\ + |TADC_InitStruct->ADTREF2\ + |TADC_InitStruct->ADTREF3); + ANA->REGF = tmp; +} + +/** + * @brief Enables or disables Tiny ADC . + * @param NewState + ENABLE + DISABLE + * @retval None + */ +void TADC_Cmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + if (NewState == ENABLE) + ANA->REGF |= ANA_REGF_ADTPDN; + else + ANA->REGF &= ~ANA_REGF_ADTPDN; +} + +/** + * @brief Gets Tiny ADC output value. + * @param None + * @retval Output of Tiny ADC(0 ~ 3). + */ +uint8_t TADC_GetOutput(void) +{ + return ((ANA->CMPOUT & ANA_CMPOUT_TADCO) >> ANA_CMPOUT_TADCO_Pos); +} + +/** + * @brief Configures Tiny ADC interrupt threshold. + * @param THSel: + ADCTINY_THSEL_0 + ADCTINY_THSEL_1 + ADCTINY_THSEL_2 + ADCTINY_THSEL_3 + * @retval None. + */ +void TADC_IntTHConfig(uint32_t THSel) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_ADCTINY_THSEL(THSel)); + + tmp = ANA->MISC; + tmp &= ~ANA_MISC_TADCTH; + tmp |= THSel; + ANA->MISC = tmp; +} + +/** + * @brief Enables or disables Tiny ADC interrupt. + * @param NewState + ENABLE + DISABLE + * @retval None + */ +void TADC_INTConfig(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + if (NewState == ENABLE) + ANA->INTEN |= ANA_INTEN_INTEN13; + else + ANA->INTEN &= ~ANA_INTEN_INTEN13; +} + +/** + * @brief Gets Tiny ADC interrupt status. + * @param None + * @retval Interrupt status. + */ +uint8_t TADC_GetINTStatus(void) +{ + if (ANA->INTSTS & ANA_INTSTS_INTSTS13) + return 1; + else + return 0; +} + +/** + * @brief Clears Tiny ADC interrupt status. + * @param None + * @retval None + */ +void TADC_ClearINTStatus(void) +{ + ANA->INTSTS = ANA_INTSTS_INTSTS13; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_ana.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_ana.c new file mode 100644 index 0000000000..a9ed925f29 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_ana.c @@ -0,0 +1,160 @@ +/** + ****************************************************************************** + * @file lib_ana.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Analog library. + ****************************************************************************** + * @attention + * + * + ****************************************************************************** + */ + +/* Includes ------------------------------------------------------------------*/ +#include "lib_ana.h" + +/** + * @brief Gets analog status. + * @param StatusMask: + ANA_STATUS_AVCCLV + ANA_STATUS_VDCINDROP + ANA_STATUS_VDDALARM + ANA_STATUS_CMP2 + ANA_STATUS_CMP1 + ANA_STATUS_LOCKL + ANA_STATUS_LOCKH + * @retval Analog status + */ +uint8_t ANA_GetStatus(uint32_t StatusMask) +{ + /* Check parameters */ + assert_parameters(IS_ANA_STATUS(StatusMask)); + + if (ANA->CMPOUT & StatusMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Gets analog interrupt status. + * @param IntMask: + ANA_INT_UPPER_TH3 + ANA_INT_LOWER_TH3 + ANA_INT_UPPER_TH2 + ANA_INT_LOWER_TH2 + ANA_INT_UPPER_TH1 + ANA_INT_LOWER_TH1 + ANA_INT_UPPER_TH0 + ANA_INT_LOWER_TH0 + ANA_INT_TADC_OVER + ANA_INT_REGERR + ANA_INT_SLPFAIL_VDCIN + ANA_INT_AVCCLV + ANA_INT_VDCINDROP + ANA_INT_VDDALARM + ANA_INT_CMP2 + ANA_INT_CMP1 + ANA_INT_ADCA + ANA_INT_ADCM + * @retval interrupt status. + */ +uint8_t ANA_GetINTStatus(uint32_t IntMask) +{ + /* Check parameters */ + assert_parameters(IS_ANA_INTSTSR(IntMask)); + + if (ANA->INTSTS&IntMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears analog interrupt status. + * @param IntMask:status to clear, can use the '|' operator. + ANA_INT_UPPER_TH3 + ANA_INT_LOWER_TH3 + ANA_INT_UPPER_TH2 + ANA_INT_LOWER_TH2 + ANA_INT_UPPER_TH1 + ANA_INT_LOWER_TH1 + ANA_INT_UPPER_TH0 + ANA_INT_LOWER_TH0 + ANA_INT_TADC_OVER + ANA_INT_REGERR + ANA_INT_SLPFAIL_VDCIN + ANA_INT_AVCCLV + ANA_INT_VDCINDROP + ANA_INT_VDDALARM + ANA_INT_CMP2 + ANA_INT_CMP1 + ANA_INT_ADCA + ANA_INT_ADCM + * @retval None + */ +void ANA_ClearINTStatus(uint32_t IntMask) +{ + /* Check parameters */ + assert_parameters(IS_ANA_INTSTSC(IntMask)); + + ANA->INTSTS = IntMask; +} + +/** + * @brief Enables or disables analog interrupt. + * @param IntMask:status to clear, can use the '|' operator. + ANA_INT_UPPER_TH3 + ANA_INT_LOWER_TH3 + ANA_INT_UPPER_TH2 + ANA_INT_LOWER_TH2 + ANA_INT_UPPER_TH1 + ANA_INT_LOWER_TH1 + ANA_INT_UPPER_TH0 + ANA_INT_LOWER_TH0 + ANA_INT_TADC_OVER + ANA_INT_REGERR + ANA_INT_SLPFAIL_VDCIN + ANA_INT_AVCCLV + ANA_INT_VDCINDROP + ANA_INT_VDDALARM + ANA_INT_CMP2 + ANA_INT_CMP1 + ANA_INT_ADCA + ANA_INT_ADCM + NewState: + ENABLE + DISABLE + * @retval None + */ +void ANA_INTConfig(uint32_t IntMask, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_ANA_INT(IntMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = ANA->INTEN; + if (NewState == ENABLE) + { + tmp |= IntMask; + } + else + { + tmp &= ~IntMask; + } + ANA->INTEN = tmp; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_clk.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_clk.c new file mode 100644 index 0000000000..d81f6e5e97 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_clk.c @@ -0,0 +1,674 @@ +/** + ****************************************************************************** + * @file lib_clk.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Clock library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_clk.h" + +/** + * @brief Initializes the CPU, AHB and APB buses clocks according to the specified + * parameters in the CLK_ClkInitStruct. + * + * @note This function performs the following: + * 1. If want to switch AHB clock source, enable BGP, enable 6.5M RC, + * AHB clock source switch to RCH first. + * 2. configure clock (except AHB clock source configuration). - optional + * 3. configure AHB clock source. - optional + * 4. HCLK/PCLK divider configuration. - optional + * + * @note CLK_InitTypeDef *CLK_ClkInitStruct + * [in]CLK_ClkInitStruct->ClockType, can use the '|' operator, the selection of parameters is as follows + * CLK_TYPE_ALL + * CLK_TYPE_AHBSRC + * CLK_TYPE_PLLL + * CLK_TYPE_PLLH + * CLK_TYPE_XTALH + * CLK_TYPE_RTCCLK + * CLK_TYPE_HCLK + * CLK_TYPE_PCLK + * + * CLK_TYPE_ALL All clocks' configurations is valid + * CLK_TYPE_AHBSRC CLK_ClkInitStruct->AHBSource(AHB Clock source configuration) is valid + * [in]CLK_ClkInitStruct->AHBSource: + * CLK_AHBSEL_6_5MRC + * CLK_AHBSEL_6_5MXTAL + * CLK_AHBSEL_HSPLL + * CLK_AHBSEL_RTCCLK + * CLK_AHBSEL_LSPLL + * CLK_TYPE_PLLL CLK_ClkInitStruct->PLLL(PLLL configuration) is valid + * [in]CLK_ClkInitStruct->PLLL.State: + * CLK_PLLL_ON (PLLL.Source/Frequency configuration is valid) + * CLK_PLLL_OFF (PLLL.Source/Frequency configuration is not valid) + * [in]CLK_ClkInitStruct->PLLL.Source: + * CLK_PLLLSRC_RCL + * CLK_PLLLSRC_XTALL + * [in]CLK_ClkInitStruct->PLLL.Frequency: + * CLK_PLLL_26_2144MHz + * CLK_PLLL_13_1072MHz + * CLK_PLLL_6_5536MHz + * CLK_PLLL_3_2768MHz + * CLK_PLLL_1_6384MHz + * CLK_PLLL_0_8192MHz + * CLK_PLLL_0_4096MHz + * CLK_PLLL_0_2048MHz + * CLK_TYPE_PLLH CLK_ClkInitStruct->PLLH(PLLH configuration) is valid + * [in]CLK_ClkInitStruct->PLLH.State: + * CLK_PLLH_ON (PLLH.Source/Frequency configuration is valid) + * CLK_PLLH_OFF (PLLH.Source/Frequency configuration is not valid) + * [in]CLK_ClkInitStruct->PLLH.Source: + * CLK_PLLHSRC_RCH + * CLK_PLLHSRC_XTALH + * [in]CLK_ClkInitStruct->PLLH.Frequency: + * CLK_PLLH_13_1072MHz + * CLK_PLLH_16_384MHz + * CLK_PLLH_19_6608MHz + * CLK_PLLH_22_9376MHz + * CLK_PLLH_26_2144MHz + * CLK_PLLH_29_4912MHz + * CLK_PLLH_32_768MHz + * CLK_PLLH_36_0448MHz + * CLK_PLLH_39_3216MHz + * CLK_PLLH_42_5984MHz + * CLK_PLLH_45_8752MHz + * CLK_PLLH_49_152MHz + * CLK_TYPE_XTALH CLK_ClkInitStruct->XTALH(XTALH configuration) is valid + * [in]CLK_ClkInitStruct->XTALH.State: + * CLK_XTALH_ON + * CLK_XTALH_OFF + * CLK_TYPE_RTCCLK CLK_ClkInitStruct->RTCCLK(RTCCLK configuration) is valid + * [in]CLK_ClkInitStruct->RTCCLK.Source: + * CLK_RTCCLKSRC_XTALL + * CLK_RTCCLKSRC_RCL + * [in]CLK_ClkInitStruct->RTCCLK.Divider: + * CLK_RTCCLKDIV_1 + * CLK_RTCCLKDIV_4 + * CLK_TYPE_HCLK CLK_ClkInitStruct->HCLK(AHB Clock(divider) configuration) is valid + * [in]CLK_ClkInitStruct->HCLK.Divider: + * 1 ~ 256 + * CLK_TYPE_PCLK CLK_ClkInitStruct->PCLK(APB Clock(divider) configuration) is valid + * [in]CLK_ClkInitStruct->PCLK.Divider: + * 1 ~ 256 + * + * @param CLK_ClkInitStruct pointer to an CLK_InitTypeDef structure that + * contains the configuration information for the clocks. + * + * @retval None + */ +void CLK_ClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct) +{ + uint32_t tmp; + + assert_parameters(IS_CLK_TYPE(CLK_ClkInitStruct->ClockType)); + + if (CLK_ClkInitStruct->ClockType & CLK_TYPE_AHBSRC) + { + /* Enable BGP */ + ANA->REG3 &= ~ANA_REG3_BGPPD; + /* Enable 6.5M RC */ + ANA->REG3 &= ~ANA_REG3_RCHPD; + + /* AHB clock source switch to RCH */ + MISC2->CLKSEL = 0; + } + + /*---------- XTALH configuration ----------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_XTALH) + { + assert_parameters(IS_CLK_XTALHSTA(CLK_ClkInitStruct->XTALH.State)); + + /* XTALH state configure */ + ANA->REG3 &= ~ANA_REG3_XOHPDN; + ANA->REG3 |= CLK_ClkInitStruct->XTALH.State; + + } + + /*-------------------- PLLL configuration --------------------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_PLLL) + { + assert_parameters(IS_CLK_PLLLSRC(CLK_ClkInitStruct->PLLL.Source)); + assert_parameters(IS_CLK_PLLLSTA(CLK_ClkInitStruct->PLLL.State)); + assert_parameters(IS_CLK_PLLLFRQ(CLK_ClkInitStruct->PLLL.Frequency)); + + /* PLLL state configure */ + if (CLK_ClkInitStruct->PLLL.State == CLK_PLLL_ON) + { + /* power up PLLL */ + ANA->REG3 |= ANA_REG3_PLLLPDN; + + /* Configure PLLL frequency */ + tmp = ANA->REG9; + tmp &= ~ANA_REG9_PLLLSEL; + tmp |= CLK_ClkInitStruct->PLLL.Frequency; + ANA->REG9 = tmp; + + /* Configure PLLL input clock selection */ + tmp = PMU->CONTROL; + tmp &= ~PMU_CONTROL_PLLL_SEL; + tmp |= CLK_ClkInitStruct->PLLL.Source; + PMU->CONTROL = tmp; + } + else + { + /* power down PLLL */ + ANA->REG3 &= ~ANA_REG3_PLLLPDN; + } + } + + /*-------------------- PLLH configuration --------------------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_PLLH) + { + assert_parameters(IS_CLK_PLLHSRC(CLK_ClkInitStruct->PLLH.Source)); + assert_parameters(IS_CLK_PLLHSTA(CLK_ClkInitStruct->PLLH.State)); + assert_parameters(IS_CLK_PLLHFRQ(CLK_ClkInitStruct->PLLH.Frequency)); + + /* PLLH state configure */ + if (CLK_ClkInitStruct->PLLH.State == CLK_PLLH_ON) + { + /* Power up PLLH */ + ANA->REG3 |= ANA_REG3_PLLHPDN; + + /* Configure PLLH frequency */ + tmp = ANA->REG9; + tmp &= ~ANA_REG9_PLLHSEL; + tmp |= CLK_ClkInitStruct->PLLH.Frequency; + ANA->REG9 = tmp; + + /* Clock input source, XTALH, XOH power on*/ + if (CLK_ClkInitStruct->PLLH.Source == CLK_PLLHSRC_XTALH) + { + ANA->REG3 |= ANA_REG3_XOHPDN; + } + + /* Configure PLLH input clock selection */ + tmp = PMU->CONTROL; + tmp &= ~PMU_CONTROL_PLLH_SEL; + tmp |= CLK_ClkInitStruct->PLLH.Source; + PMU->CONTROL = tmp; + } + else + { + /* Power down PLLH */ + ANA->REG3 &= ~ANA_REG3_PLLHPDN; + } + } + + /*---------- RTCCLK configuration ----------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_RTCCLK) + { + assert_parameters(IS_CLK_RTCSRC(CLK_ClkInitStruct->RTCCLK.Source)); + assert_parameters(IS_CLK_RTCDIV(CLK_ClkInitStruct->RTCCLK.Divider)); + + /* RTCCLK source(optional) */ + tmp = PMU->CONTROL; + tmp &= ~PMU_CONTROL_RTCCLK_SEL; + tmp |= CLK_ClkInitStruct->RTCCLK.Source; + PMU->CONTROL = tmp; + + /*----- RTCCLK Divider -----*/ + RTC_PrescalerConfig(CLK_ClkInitStruct->RTCCLK.Divider); + } + + /*---------- AHB clock source configuration ----------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_AHBSRC) + { + assert_parameters(IS_CLK_AHBSRC(CLK_ClkInitStruct->AHBSource)); + + /* clock source: 6.5M RC */ + if (CLK_ClkInitStruct->AHBSource == CLK_AHBSEL_6_5MRC) + { + /* clock source configuration */ + MISC2->CLKSEL = CLK_ClkInitStruct->AHBSource; + } + + /* clock source: 6_5MXTAL */ + else if (CLK_ClkInitStruct->AHBSource == CLK_AHBSEL_6_5MXTAL) + { + /* Power up 6.5M xtal */ + ANA->REG3 |= ANA_REG3_XOHPDN; + /* clock source configuration */ + MISC2->CLKSEL = CLK_ClkInitStruct->AHBSource; + } + + /* clock source: PLLH */ + else if (CLK_ClkInitStruct->AHBSource == CLK_AHBSEL_HSPLL) + { + /* Power up PLLH */ + ANA->REG3 |= ANA_REG3_PLLHPDN; + /* while loop until PLLL is lock */ + while (!(ANA->CMPOUT & ANA_CMPOUT_LOCKH)) + { + } + /* clock source configuration */ + MISC2->CLKSEL = CLK_ClkInitStruct->AHBSource; + } + + /* clock source: PLLL */ + else if (CLK_ClkInitStruct->AHBSource == CLK_AHBSEL_LSPLL) + { + /* Power up PLLL */ + ANA->REG3 |= ANA_REG3_PLLLPDN; + /* while loop until PLLL is lock */ + while (!(ANA->CMPOUT & ANA_CMPOUT_LOCKL)) + { + } + /* clock source configuration */ + MISC2->CLKSEL = CLK_ClkInitStruct->AHBSource; + } + /* clock source: RTCCLK */ + else + { + /* clock source configuration */ + MISC2->CLKSEL = CLK_ClkInitStruct->AHBSource; + } + } + + /*---------- HCLK configuration ----------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_HCLK) + { + assert_parameters(IS_CLK_HCLKDIV(CLK_ClkInitStruct->HCLK.Divider)); + + MISC2->CLKDIVH = (CLK_ClkInitStruct->HCLK.Divider) - 1; + } + + /*---------- PCLK configuration ----------*/ + if ((CLK_ClkInitStruct->ClockType) & CLK_TYPE_PCLK) + { + assert_parameters(IS_CLK_PCLKDIV(CLK_ClkInitStruct->PCLK.Divider)); + + MISC2->CLKDIVP = (CLK_ClkInitStruct->PCLK.Divider) - 1; + } +} + +/** + * @brief Enables or disables AHB Periphral clock. + * @param Periphral: can use the '|' operator + CLK_AHBPERIPHRAL_DMA + CLK_AHBPERIPHRAL_GPIO + CLK_AHBPERIPHRAL_LCD + CLK_AHBPERIPHRAL_CRYPT + NewState: + ENABLE + DISABLE + * @retval None. + */ +void CLK_AHBPeriphralCmd(uint32_t Periphral, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_CLK_AHBPERIPHRAL(Periphral)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + MISC2->HCLKEN |= Periphral; + } + else + { + MISC2->HCLKEN &= ~Periphral; + } +} + +/** + * @brief Enables or disables APB Periphral clock. + * @param Periphral: can use the '|' operator + CLK_APBPERIPHRAL_DMA + CLK_APBPERIPHRAL_I2C + CLK_APBPERIPHRAL_SPI1 + CLK_APBPERIPHRAL_SPI2 + CLK_APBPERIPHRAL_UART0 + CLK_APBPERIPHRAL_UART1 + CLK_APBPERIPHRAL_UART2 + CLK_APBPERIPHRAL_UART3 + CLK_APBPERIPHRAL_UART4 + CLK_APBPERIPHRAL_UART5 + CLK_APBPERIPHRAL_ISO78160 + CLK_APBPERIPHRAL_ISO78161 + CLK_APBPERIPHRAL_TIMER + CLK_APBPERIPHRAL_MISC1 + CLK_APBPERIPHRAL_MISC2 + CLK_APBPERIPHRAL_PMU + CLK_APBPERIPHRAL_RTC + CLK_APBPERIPHRAL_ANA + CLK_APBPERIPHRAL_U32K0 + CLK_APBPERIPHRAL_U32K1 + CLK_APBPERIPHRAL_SPI3 + NewState: + ENABLE + DISABLE + * @retval None. + */ +void CLK_APBPeriphralCmd(uint32_t Periphral, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_CLK_APBPERIPHRAL(Periphral)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + MISC2->PCLKEN |= Periphral; + } + else + { + MISC2->PCLKEN &= ~Periphral; + } +} + +/** + * @brief Returns the HCLK frequency + * @param None + * @retval HCLK frequency + */ +uint32_t CLK_GetHCLKFreq(void) +{ + uint32_t ahb_clksrc; + uint32_t ahb_div; + uint32_t pllh_frq; + uint32_t plll_frq; + uint32_t rtcclk_div; + uint32_t hclk; + + /* Get current AHB clock source */ + ahb_clksrc = MISC2->CLKSEL & MISC2_CLKSEL_CLKSEL; + /* Get AHB clock divider */ + ahb_div = (MISC2->CLKDIVH & MISC2_CLKDIVH_CLKDIVH) + 1; + + switch (ahb_clksrc) + { + /* AHB Clock source : 6.5M RC */ + case MISC2_CLKSEL_CLKSEL_RCOH: + hclk = 6553600 / ahb_div; + break; + + /* AHB Clock source : 6.5M XTAL */ + case MISC2_CLKSEL_CLKSEL_XOH: + hclk = 6553600 / ahb_div; + break; + + /* AHB Clock source : PLLH */ + case MISC2_CLKSEL_CLKSEL_PLLH: + /* Get PLLH Frequency */ + pllh_frq = ANA->REG9 & ANA_REG9_PLLHSEL; + switch (pllh_frq) + { + case ANA_REG9_PLLHSEL_X2: + hclk = 13107200 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X2_5: + hclk = 16384000 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X3: + hclk = 19660800 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X3_5: + hclk = 22937600 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X4: + hclk = 26214400 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X4_5: + hclk = 29491200 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X5: + hclk = 32768000 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X5_5: + hclk = 36044800 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X6: + hclk = 39321600 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X6_5: + hclk = 42598400 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X7: + hclk = 45875200 / ahb_div; + break; + + case ANA_REG9_PLLHSEL_X7_5: + hclk = 49152000 / ahb_div; + break; + + default: + hclk = 0; + break; + } + break; + + /* AHB Clock source : RTCCLK */ + case MISC2_CLKSEL_CLKSEL_RTCCLK: + /* Get current RTC clock divider */ + rtcclk_div = RTC->PSCA & RTC_PSCA_PSCA; + if (rtcclk_div == RTC_PSCA_PSCA_0) + { + hclk = 32768 / ahb_div; + } + else if (rtcclk_div == RTC_PSCA_PSCA_1) + { + hclk = 8192 / ahb_div; + } + else + { + hclk = 0; + } + break; + + /* AHB Clock source : PLLL */ + case MISC2_CLKSEL_CLKSEL_PLLL: + /* Get PLLL Frequency */ + plll_frq = ANA->REG9 & ANA_REG9_PLLLSEL; + switch (plll_frq) + { + case ANA_REG9_PLLLSEL_26M: + hclk = 26214400 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_13M: + hclk = 13107200 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_6_5M: + hclk = 6553600 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_3_2M: + hclk = 3276800 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_1_6M: + hclk = 1638400 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_800K: + hclk = 819200 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_400K: + hclk = 409600 / ahb_div; + break; + + case ANA_REG9_PLLLSEL_200K: + hclk = 204800 / ahb_div; + break; + + default: + hclk = 0; + break; + } + break; + + default: + hclk = 0; + break; + } + + return (hclk); +} + +/** + * @brief Returns the PLLL frequency + * @param None + * @retval PLLL frequency + */ +uint32_t CLK_GetPLLLFreq(void) +{ + uint32_t plll_frq; + + if (!(ANA->REG3 & ANA_REG3_PLLLPDN)) + return 0; + /* Get PLLL Frequency */ + plll_frq = ANA->REG9 & ANA_REG9_PLLLSEL; + switch (plll_frq) + { + case ANA_REG9_PLLLSEL_26M: + plll_frq = 26214400; + break; + + case ANA_REG9_PLLLSEL_13M: + plll_frq = 13107200; + break; + + case ANA_REG9_PLLLSEL_6_5M: + plll_frq = 6553600; + break; + + case ANA_REG9_PLLLSEL_3_2M: + plll_frq = 3276800; + break; + + case ANA_REG9_PLLLSEL_1_6M: + plll_frq = 1638400; + break; + + case ANA_REG9_PLLLSEL_800K: + plll_frq = 819200; + break; + + case ANA_REG9_PLLLSEL_400K: + plll_frq = 409600; + break; + + case ANA_REG9_PLLLSEL_200K: + plll_frq = 204800; + break; + + default: + plll_frq = 0; + break; + } + + return (plll_frq); +} + +/** + * @brief Returns the PCLK frequency + * @param None + * @retval PCLK frequency + */ +uint32_t CLK_GetPCLKFreq(void) +{ + return ((CLK_GetHCLKFreq()) / ((MISC2->CLKDIVP & MISC2_CLKDIVP_CLKDIVP) + 1)); +} + +/** + * @brief Get the CLK_ClkInitStruct according to the internal + * Clock configuration registers. + * + * @param CLK_ClkInitStruct pointer to an CLK_ClkInitStruct structure that + * contains the current clock configuration. + * + * @retval None + */ +void CLK_GetClockConfig(CLK_InitTypeDef *CLK_ClkInitStruct) +{ + /* Set all possible values for the Clock type parameter --------------------*/ + CLK_ClkInitStruct->ClockType = CLK_TYPE_ALL; + + /* Get AHB clock source ----------------------------------------------------*/ + CLK_ClkInitStruct->AHBSource = (uint32_t)(MISC2->CLKSEL & MISC2_CLKSEL_CLKSEL); + /* Get PLLL clock configration ---------------------------------------------*/ + CLK_ClkInitStruct->PLLL.Source = (uint32_t)(PMU->CONTROL & PMU_CONTROL_PLLL_SEL); + CLK_ClkInitStruct->PLLL.Frequency = (uint32_t)(ANA->REG9 & ANA_REG9_PLLLSEL); + CLK_ClkInitStruct->PLLL.State = (uint32_t)(ANA->REG3 & ANA_REG3_PLLLPDN); + /* Get PLLH clock configuration --------------------------------------------*/ + CLK_ClkInitStruct->PLLH.Source = (uint32_t)(PMU->CONTROL & PMU_CONTROL_PLLH_SEL); + CLK_ClkInitStruct->PLLH.Frequency = (uint32_t)(ANA->REG9 & ANA_REG9_PLLHSEL); + CLK_ClkInitStruct->PLLH.State = (uint32_t)(ANA->REG3 & ANA_REG3_PLLHPDN); + /* Get XTALH configuration -------------------------------------------------*/ + CLK_ClkInitStruct->XTALH.State = (uint32_t)(ANA->REG3 & ANA_REG3_XOHPDN); + /* Get HCLK(Divider) configuration -----------------------------------------*/ + CLK_ClkInitStruct->HCLK.Divider = (uint32_t)((MISC2->CLKDIVH & MISC2_CLKDIVH_CLKDIVH) + 1); + /* Get PCLK((Divider) configuration ----------------------------------------*/ + CLK_ClkInitStruct->PCLK.Divider = (uint32_t)((MISC2->CLKDIVP & MISC2_CLKDIVP_CLKDIVP) + 1); +} + +/** + * @brief Gets current external 6.5M crystal status. + * + * @param None + * + * @retval 6.5M crystal status + * 0: 6.5536M crystal is absent. + * 1: 6.5536M crystal is present. + */ +uint8_t CLK_GetXTALHStatus(void) +{ + if (PMU->STS & PMU_STS_EXIST_6M) + return (1); + else + return (0); +} + +/** + * @brief Gets current external 32K crystal status. + * + * @param None + * + * @retval 32K crystal status + * 0: 32K crystal is absent + * 1: 32K crystal is present. + */ +uint8_t CLK_GetXTALLStatus(void) +{ + if (PMU->STS & PMU_STS_EXIST_32K) + return (1); + else + return (0); +} + +/** + * @brief Gets PLL lock status. + * @param PLLStatus: + * CLK_STATUS_LOCKL + * CLK_STATUS_LOCKH + * @retval PLL lock status + * 0 PLL is not locked. + * 1 PLL is locked. + */ +uint8_t CLK_GetPLLLockStatus(uint32_t PLLStatus) +{ + /* Check parameters */ + assert_parameters(IS_CLK_PLLLOCK(PLLStatus)); + + if (ANA->CMPOUT & PLLStatus) + return 1; + else + return 0; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_cmp.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_cmp.c new file mode 100644 index 0000000000..3621936444 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_cmp.c @@ -0,0 +1,583 @@ +/** + ****************************************************************************** + * @file lib_cmp.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief CMP library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_cmp.h" + +/* CMP1 reset values */ +#define CMP1_REG2_Msk (0x13UL) +#define CMP1_REG3_Msk (0x02UL) +#define CMP1_REG5_Msk (0x03UL) +#define CMP1_REGF_Msk (0x01UL) +#define CMP1_CTRL_Msk (0x300003UL) +#define CMP1_INTSTS_Msk (0x04UL) +#define CMP1_INTEN_Msk (0x04UL) +#define CMP1_THR_Msk (0xFFFFUL) +#define CMP1_CTL_Msk (0x300FFUL) +/* CMP2 reset values */ +#define CMP2_REG2_Msk (0x2CUL) +#define CMP2_REG3_Msk (0x04UL) +#define CMP2_REG5_Msk (0x0CUL) +#define CMP2_REGF_Msk (0x02UL) +#define CMP2_CTRL_Msk (0xC0000CUL) +#define CMP2_INTSTS_Msk (0x08UL) +#define CMP2_INTEN_Msk (0x08UL) +#define CMP2_THR_Msk (0xFFFF0000UL) +#define CMP2_CTL_Msk (0x30FF00UL) + +/** + * @brief Initializes the Comparator peripheral registers to their default reset values. + * @param CMPx: + CMP_1 + CMP_2 + * @retval None + */ +void CMP_DeInit(uint32_t CMPx) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + ANA->REG2 &= ~CMP1_REG2_Msk; + ANA->REG3 &= ~CMP1_REG3_Msk; + ANA->REG5 &= ~CMP1_REG5_Msk; + ANA->REGF &= ~CMP1_REGF_Msk; + ANA->CTRL &= ~CMP1_CTRL_Msk; + ANA->INTSTS = CMP1_INTSTS_Msk; + ANA->INTEN &= ~CMP1_INTEN_Msk; + ANA->CMPTHR &= ~CMP1_THR_Msk; + ANA->CMPCTL &= ~CMP1_CTL_Msk; + ANA->CMPCNT1 = 0; + } + else + { + ANA->REG2 &= ~CMP2_REG2_Msk; + ANA->REG3 &= ~CMP2_REG3_Msk; + ANA->REG5 &= ~CMP2_REG5_Msk; + ANA->REGF &= ~CMP2_REGF_Msk; + ANA->CTRL &= ~CMP2_CTRL_Msk; + ANA->INTSTS = CMP2_INTSTS_Msk; + ANA->INTEN &= ~CMP2_INTEN_Msk; + ANA->CMPTHR &= ~CMP2_THR_Msk; + ANA->CMPCTL &= ~CMP2_CTL_Msk; + ANA->CMPCNT2 = 0; + } +} + +/** + * @brief Initializes comparator. + * @param CMPx: + CMP_1 + CMP_2 + InitStruct: Comparator configuration + DebSel: + CMP_DEB_NONE + CMP_DEB_RTCCLK_2 + CMP_DEB_RTCCLK_3 + CMP_DEB_RTCCLK_4 + SignalSourceSel: + CMP_SIGNALSRC_PPIN_TO_VREF + CMP_SIGNALSRC_PPIN_TO_BGPREF + CMP_SIGNALSRC_PBAT_TO_VREF + CMP_SIGNALSRC_PBAT_TO_BGPREF + CMP_SIGNALSRC_NPIN_TO_VREF + CMP_SIGNALSRC_NPIN_TO_BGPREF + CMP_SIGNALSRC_PPIN_TO_NPIN + CMP_SIGNALSRC_PBAT_TO_NPIN + BiasSel: + CMP_BIAS_20nA + CMP_BIAS_100nA + CMP_BIAS_500nA + * @retval None + */ +void CMP_Init(uint32_t CMPx, CMP_TypeDef *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + assert_parameters(IS_CMP_DEB(InitStruct->DebSel)); + assert_parameters(IS_CMP_SIGNALSRC(InitStruct->SignalSourceSel)); + assert_parameters(IS_CMP_BIAS(InitStruct->BiasSel)); + + /* CMP1 Configure */ + if (CMPx == CMP_1) + { + tmp = ANA->CTRL; + tmp &= ~ANA_CTRL_CMP1DEB; + tmp |= (InitStruct->DebSel << ANA_CTRL_CMP1DEB_Pos); + ANA->CTRL = tmp; + + tmp = ANA->REG5; + tmp &= ~ANA_REG5_CMP1IT; + tmp |= (InitStruct->BiasSel << ANA_REG5_CMP1IT_Pos); + ANA->REG5 = tmp; + + ANA->REG2 &= ~(ANA_REG2_CMP1SEL|ANA_REG2_CMP1REFSEL); + ANA->REGF &= ~ANA_REGF_BAT1DETEN; + switch(InitStruct->SignalSourceSel) + { + case CMP_SIGNALSRC_PPIN_TO_VREF: + break; + case CMP_SIGNALSRC_PPIN_TO_BGPREF: + ANA->REG2 |= ANA_REG2_CMP1REFSEL; + break; + case CMP_SIGNALSRC_PBAT_TO_VREF: + ANA->REGF |= ANA_REGF_BAT1DETEN; + break; + case CMP_SIGNALSRC_PBAT_TO_BGPREF: + ANA->REG2 |= ANA_REG2_CMP1REFSEL; + ANA->REGF |= ANA_REGF_BAT1DETEN; + break; + case CMP_SIGNALSRC_NPIN_TO_VREF: + ANA->REG2 |= ANA_REG2_CMP1SEL_1; + break; + case CMP_SIGNALSRC_NPIN_TO_BGPREF: + ANA->REG2 |= (ANA_REG2_CMP1SEL_1|ANA_REG2_CMP1REFSEL); + break; + case CMP_SIGNALSRC_PPIN_TO_NPIN: + ANA->REG2 |= ANA_REG2_CMP1SEL_3; + break; + case CMP_SIGNALSRC_PBAT_TO_NPIN: + ANA->REG2 |= ANA_REG2_CMP1SEL_3; + ANA->REGF |= ANA_REGF_BAT1DETEN; + break; + default: + break; + } + } + /* CMP2 Configure */ + else + { + tmp = ANA->CTRL; + tmp &= ~ANA_CTRL_CMP2DEB; + tmp |= (InitStruct->DebSel << ANA_CTRL_CMP2DEB_Pos); + ANA->CTRL = tmp; + + tmp = ANA->REG5; + tmp &= ~ANA_REG5_CMP2IT; + tmp |= (InitStruct->BiasSel << ANA_REG5_CMP2IT_Pos); + ANA->REG5 = tmp; + + ANA->REG2 &= ~(ANA_REG2_CMP2SEL|ANA_REG2_CMP2REFSEL); + ANA->REGF &= ~ANA_REGF_BATRTCDETEN; + switch(InitStruct->SignalSourceSel) + { + case CMP_SIGNALSRC_PPIN_TO_VREF: + break; + case CMP_SIGNALSRC_PPIN_TO_BGPREF: + ANA->REG2 |= ANA_REG2_CMP2REFSEL; + break; + case CMP_SIGNALSRC_PBAT_TO_VREF: + ANA->REGF |= ANA_REGF_BATRTCDETEN; + break; + case CMP_SIGNALSRC_PBAT_TO_BGPREF: + ANA->REG2 |= ANA_REG2_CMP2REFSEL; + ANA->REGF |= ANA_REGF_BATRTCDETEN; + break; + case CMP_SIGNALSRC_NPIN_TO_VREF: + ANA->REG2 |= ANA_REG2_CMP2SEL_1; + break; + case CMP_SIGNALSRC_NPIN_TO_BGPREF: + ANA->REG2 |= (ANA_REG2_CMP2SEL_1|ANA_REG2_CMP2REFSEL); + break; + case CMP_SIGNALSRC_PPIN_TO_NPIN: + ANA->REG2 |= ANA_REG2_CMP2SEL_3; + break; + case CMP_SIGNALSRC_PBAT_TO_NPIN: + ANA->REG2 |= ANA_REG2_CMP2SEL_3; + ANA->REGF |= ANA_REGF_BATRTCDETEN; + break; + default: + break; + } + } +} + +/** + * @brief Fills each CMP_TypeDef member with its default value. + * @param InitStruct: pointer to an CMP_TypeDef structure which will be initialized. + * @retval None + */ +void CMP_StructInit(CMP_TypeDef *InitStruct) +{ + InitStruct->DebSel = CMP_DEB_NONE; + InitStruct->SignalSourceSel = CMP_SIGNALSRC_PPIN_TO_VREF; + InitStruct->BiasSel = CMP_BIAS_20nA; +} + +/** + * @brief Initializes comparator Count. + * @param CMPx: + CMP_1 + CMP_2 + InitStruct: Comparator configuration + ModeSel: + CMP_MODE_OFF + CMP_MODE_RISING + CMP_MODE_FALLING + CMP_MODE_BOTH + CheckPeriod: + CMP_PERIOD_30US + CMP_PERIOD_7_8125MS + CMP_PERIOD_125MS + CMP_PERIOD_250MS + CMP_PERIOD_500MS + CheckNum: + CMP_CHKNUM_1~CMP_CHKNUM_16 + * @retval None + */ +void CMP_CountInit(uint32_t CMPx, CMP_CountTypeDef *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + assert_parameters(IS_CMP_MODE(InitStruct->ModeSel)); + assert_parameters(IS_CMP_CHECKPERIOD(InitStruct->CheckPeriod)); + assert_parameters(IS_CMP_CHKNUM(InitStruct->CheckNum)); + + /* CMP1 Configure */ + if (CMPx == CMP_1) + { + /* Configure ModeSel */ + tmp = ANA->CTRL; + tmp &= ~ANA_CTRL_CMP1SEL; + tmp |= (InitStruct->ModeSel << ANA_CTRL_CMP1SEL_Pos); + ANA->CTRL = tmp; + + /* Configure CheckPeriod/CheckNum */ + tmp = ANA->CMPCTL; + tmp &= ~(ANA_CMPCTL_CMP1_CHK_FRQ|ANA_CMPCTL_CMP1_CHK_NUM); + tmp |= ((InitStruct->CheckPeriod << ANA_CMPCTL_CMP1_CHK_FRQ_Pos) | \ + (InitStruct->CheckNum << ANA_CMPCTL_CMP1_CHK_NUM_Pos)); + ANA->CMPCTL = tmp; + } + /* CMP2 Configure */ + else + { + /* Configure ModeSel */ + tmp = ANA->CTRL; + tmp &= ~ANA_CTRL_CMP2SEL; + tmp |= (InitStruct->ModeSel << ANA_CTRL_CMP2SEL_Pos); + ANA->CTRL = tmp; + + /* Configure CheckPeriod/CheckNum */ + tmp = ANA->CMPCTL; + tmp &= ~(ANA_CMPCTL_CMP2_CHK_FRQ|ANA_CMPCTL_CMP2_CHK_NUM); + tmp |= ((InitStruct->CheckPeriod << ANA_CMPCTL_CMP2_CHK_FRQ_Pos) | \ + (InitStruct->CheckNum << ANA_CMPCTL_CMP2_CHK_NUM_Pos)); + ANA->CMPCTL = tmp; + } +} + +/** + * @brief Fill each CMP_CountTypeDef member with its default value. + * @param InitStruct: pointer to an CMP_CountTypeDef structure which will be initialized. + * @retval None + */ +void CMP_CountStructInit(CMP_CountTypeDef *InitStruct) +{ + InitStruct->ModeSel = CMP_MODE_OFF; + InitStruct->CheckPeriod = CMP_PERIOD_30US; + InitStruct->CheckNum = CMP_CHKNUM_1; +} + +/** + * @brief Initializes Comparator interrupt. + * @param CMPx: + CMP_1 + CMP_2 + InitStruct: Comparator configuration + INTNumSel: + CMP_INTNUM_EVERY + CMP_INTNUM_1 + SubSel: + CMP_COUNT_NOSUB + CMP_COUNT_SUB + THRNum:0~65535 + * @retval None + */ +void CMP_INTInit(uint32_t CMPx, CMP_INTTypeDef *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + assert_parameters(IS_CMP_INTNUM(InitStruct->INTNumSel)); + assert_parameters(IS_CMP_COUNT(InitStruct->SubSel)); + assert_parameters(IS_CMP_THRNUM(InitStruct->THRNum)); + + /* CMP1 Configure */ + if (CMPx == CMP_1) + { + /* Configure INTNumSel/SubSel */ + tmp = ANA->CMPCTL; + tmp &= ~(ANA_CMPCTL_CMP1_THR_EN|ANA_CMPCTL_CMP1_INT_MASK_EN); + tmp |= ((InitStruct->SubSel << ANA_CMPCTL_CMP1_THR_EN_Pos) | \ + (InitStruct->INTNumSel << ANA_CMPCTL_CMP1_INT_MASK_EN_Pos)); + ANA->CMPCTL = tmp; + + /* Configure THRNum */ + tmp = ANA->CMPTHR; + tmp &= ~ANA_CMPTHR_CMP1_THR; + tmp |= (InitStruct->THRNum << ANA_CMPTHR_CMP1_THR_Pos); + ANA->CMPTHR = tmp; + } + /* CMP2 Configure */ + else + { + /* Configure INTNumSel/SubSel */ + tmp = ANA->CMPCTL; + tmp &= ~(ANA_CMPCTL_CMP2_THR_EN|ANA_CMPCTL_CMP2_INT_MASK_EN); + tmp |= ((InitStruct->SubSel << ANA_CMPCTL_CMP2_THR_EN_Pos) | \ + (InitStruct->INTNumSel << ANA_CMPCTL_CMP2_INT_MASK_EN_Pos)); + ANA->CMPCTL = tmp; + + /* Configure THRNum */ + tmp = ANA->CMPTHR; + tmp &= ~ANA_CMPTHR_CMP2_THR; + tmp |= (InitStruct->THRNum << ANA_CMPTHR_CMP2_THR_Pos); + ANA->CMPTHR = tmp; + } +} + +/** + * @brief Fills each CMP_INTTypeDef member with its default value. + * @param InitStruct: pointer to an CMP_INTTypeDef structure which will be initialized. + * @retval None + */ +void CMP_INTStructInit(CMP_INTTypeDef *InitStruct) +{ + InitStruct->INTNumSel = CMP_INTNUM_EVERY; + InitStruct->SubSel = CMP_COUNT_NOSUB; + InitStruct->THRNum = 0; +} + +/** + * @brief Initializes Comparator Output IO. + * @param CMPx: + CMP_1 + CMP_2 + InitStruct: Comparator configuration + DebSel: + CMP_OUTPUT_DEB + CMP_OUTPUT_NODEB + OutputSel: + ENABLE + DISABLE + * @retval None + */ +void CMP_OutputInit(uint32_t CMPx, CMP_OutputTypeDef *InitStruct) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + assert_parameters(IS_CMP_OUTPUTDEB(InitStruct->DebSel)); + assert_parameters(IS_FUNCTIONAL_STATE(InitStruct->OutputSel)); + + /* CMP1 Configure */ + if (CMPx == CMP_1) + { + ANA->CMPCTL &= ~ANA_CMPCTL_CMP1_IO_NODEB; + ANA->CMPCTL |= (InitStruct->DebSel << ANA_CMPCTL_CMP1_IO_NODEB_Pos); + + GPIOAF->IOE_SEL &= ~GPIOAF_IOE_SEL_SEL7; + GPIOAF->IOE_SEL |= (InitStruct->OutputSel << GPIOAF_IOE_SEL_SEL7_Pos); + } + /* CMP2 Configure */ + else + { + ANA->CMPCTL &= ~ANA_CMPCTL_CMP2_IO_NODEB; + ANA->CMPCTL |= (InitStruct->DebSel << ANA_CMPCTL_CMP2_IO_NODEB_Pos); + + GPIOA->SEL &= ~GPIOA_SEL_SEL6; + GPIOA->SEL |= (InitStruct->OutputSel << GPIOA_SEL_SEL6_Pos); + } +} + +/** + * @brief Fills each CMP_OutputTypeDef member with its default value. + * @param InitStruct: pointer to an CMP_OutputTypeDef structure which will be initialized. + * @retval None + */ +void CMP_OutputStructInit(CMP_OutputTypeDef *InitStruct) +{ + InitStruct->DebSel = CMP_OUTPUT_DEB; + InitStruct->OutputSel = DISABLE; +} + +/** + * @brief Gets comparator count value. + * @param CMPx: + CMP_1 + CMP_2 + * @retval Comparator count value. + */ +uint32_t CMP_GetCNTValue(uint32_t CMPx) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + return ANA->CMPCNT1; + } + else + { + return ANA->CMPCNT2; + } +} + +/** + * @brief Clears comparator counter value. + * @param CMPx: + CMP_1 + CMP_2 + * @retval None + */ +void CMP_ClearCNTValue(uint32_t CMPx) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + ANA->CMPCNT1 = 0; + } + else + { + ANA->CMPCNT2 = 0; + } +} + +/** + * @brief Enables or disables Comparator. + * @param CMPx: + CMP_1 + CMP_2 + NewState: + ENABLE + DISABLE + * @retval None + */ +void CMP_Cmd(uint32_t CMPx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (CMPx == CMP_1) + { + ANA->REG3 &= ~ANA_REG3_CMP1PDN; + ANA->REG3 |= (NewState << ANA_REG3_CMP1PDN_Pos); + } + else + { + ANA->REG3 &= ~ANA_REG3_CMP2PDN; + ANA->REG3 |= (NewState << ANA_REG3_CMP2PDN_Pos); + } +} + +/** + * @brief Gets comparator output level + * @param None + * @retval Output of comparator + */ +uint8_t CMP_GetOutputValue(uint32_t CMPx) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + return ((ANA->CMPOUT & ANA_CMPOUT_CMP1) >> ANA_CMPOUT_CMP1_Pos); + } + else + { + return ((ANA->CMPOUT & ANA_CMPOUT_CMP2) >> ANA_CMPOUT_CMP2_Pos); + } +} + +/** + * @brief Enables or disables Comparator interrupt. + * @param CMPx: + * CMP_1 + * CMP_2 + * NewState: + * ENABLE + * DISABLE + * @retval None + */ +void CMP_INTConfig(uint32_t CMPx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + ANA->INTEN &= ~ANA_INTEN_INTEN2; + ANA->INTEN |= (NewState<INTEN &= ~ANA_INTEN_INTEN3; + ANA->INTEN |= (NewState<INTSTS & ANA_INTSTS_INTSTS2) >> ANA_INTSTS_INTSTS2_Pos); + } + else + { + return ((ANA->INTSTS & ANA_INTSTS_INTSTS3) >> ANA_INTSTS_INTSTS3_Pos); + } +} + +/** + * @brief Clears comparator interrupt flag. + * @param CMPx: + * CMP_1 + * CMP_2 + * @retval None + */ +void CMP_ClearINTStatus(uint32_t CMPx) +{ + /* Check parameters */ + assert_parameters(IS_CMP(CMPx)); + + if (CMPx == CMP_1) + { + ANA->INTSTS = ANA_INTSTS_INTSTS2; + } + else + { + ANA->INTSTS = ANA_INTSTS_INTSTS3; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_crypt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_crypt.c new file mode 100644 index 0000000000..9c253482ae --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_crypt.c @@ -0,0 +1,226 @@ +/** + ****************************************************************************** + * @file lib_crypt.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief CRYPT library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_crypt.h" + +/** + * @brief Configures PTRA register, data in this address will be read out to do + * the CRYPT calculation + * @param AddrA: the SRAM address(Bit 15:0) + * @retval None + */ +void CRYPT_AddressAConfig(uint16_t AddrA) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_ADDR(AddrA)); + + CRYPT->PTRA = AddrA & CRYPT_PTRA_PTRA; +} + +/** + * @brief Configures PTRB register, data in this address will be read out to do + * the CRYPT calculation + * @param AddrB: the SRAM address(Bit 15:0) + * @retval None + */ +void CRYPT_AddressBConfig(uint16_t AddrB) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_ADDR(AddrB)); + + CRYPT->PTRB = AddrB & CRYPT_PTRB_PTRB; +} + +/** + * @brief Configures PTRO register, The CRYPT engine will write calculation + * result into this address + * @param AddrO: the SRAM address(Bit 15:0) + * @retval None + */ +void CRYPT_AddressOConfig(uint16_t AddrO) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_ADDR(AddrO)); + + CRYPT->PTRO = AddrO & CRYPT_PTRO_PTRO; +} + +/** + * @brief Gets carry/borrow bit of add/sub operation. + * @param None + * @retval carry/borrow bit value + */ +uint8_t CRYPT_GetCarryBorrowBit(void) +{ + if (CRYPT->CARRY & CRYPT_CARRY_CARRY) + return (1); + else + return (0); +} + +/** + * @brief Starts addition operation. + * @param Length: + * CRYPT_LENGTH_32 + * CRYPT_LENGTH_64 + * CRYPT_LENGTH_96 + * CRYPT_LENGTH_128 + * CRYPT_LENGTH_160 + * CRYPT_LENGTH_192 + * CRYPT_LENGTH_224 + * CRYPT_LENGTH_256 + * CRYPT_LENGTH_288 + * CRYPT_LENGTH_320 + * CRYPT_LENGTH_352 + * CRYPT_LENGTH_384 + * CRYPT_LENGTH_416 + * CRYPT_LENGTH_448 + * CRYPT_LENGTH_480 + * CRYPT_LENGTH_512 + * Nostop: + * CRYPT_STOPCPU + * CRYPT_NOSTOPCPU + * @retval None + */ +void CRYPT_StartAdd(uint32_t Length, uint32_t Nostop) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_LENGTH(Length)); + assert_parameters(IS_CRYPT_NOSTOP(Nostop)); + + CRYPT->CTRL = (Nostop \ + |Length \ + |CRYPT_CTRL_MODE_ADD \ + |CRYPT_CTRL_ACT); +} + +/** + * @brief Starts multiplication operation. + * @param Length: + * CRYPT_LENGTH_32 + * CRYPT_LENGTH_64 + * CRYPT_LENGTH_96 + * CRYPT_LENGTH_128 + * CRYPT_LENGTH_160 + * CRYPT_LENGTH_192 + * CRYPT_LENGTH_224 + * CRYPT_LENGTH_256 + * CRYPT_LENGTH_288 + * CRYPT_LENGTH_320 + * CRYPT_LENGTH_352 + * CRYPT_LENGTH_384 + * CRYPT_LENGTH_416 + * CRYPT_LENGTH_448 + * CRYPT_LENGTH_480 + * CRYPT_LENGTH_512 + * Nostop: + * CRYPT_STOPCPU + * CRYPT_NOSTOPCPU + * @retval None + */ +void CRYPT_StartMultiply(uint32_t Length, uint32_t Nostop) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_LENGTH(Length)); + assert_parameters(IS_CRYPT_NOSTOP(Nostop)); + + CRYPT->CTRL = (Nostop \ + |Length \ + |CRYPT_CTRL_MODE_MULTIPLY \ + |CRYPT_CTRL_ACT); +} + +/** + * @brief Starts subtraction operation. + * @param Length: + * CRYPT_LENGTH_32 + * CRYPT_LENGTH_64 + * CRYPT_LENGTH_96 + * CRYPT_LENGTH_128 + * CRYPT_LENGTH_160 + * CRYPT_LENGTH_192 + * CRYPT_LENGTH_224 + * CRYPT_LENGTH_256 + * CRYPT_LENGTH_288 + * CRYPT_LENGTH_320 + * CRYPT_LENGTH_352 + * CRYPT_LENGTH_384 + * CRYPT_LENGTH_416 + * CRYPT_LENGTH_448 + * CRYPT_LENGTH_480 + * CRYPT_LENGTH_512 + * Nostop: + * CRYPT_STOPCPU + * CRYPT_NOSTOPCPU + * @retval None + */ +void CRYPT_StartSub(uint32_t Length, uint32_t Nostop) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_LENGTH(Length)); + assert_parameters(IS_CRYPT_NOSTOP(Nostop)); + + CRYPT->CTRL = (Nostop \ + |Length \ + |CRYPT_CTRL_MODE_SUB \ + |CRYPT_CTRL_ACT); +} + +/** + * @brief Starts rigth shift 1-bit operation. + * @param Length: + * CRYPT_LENGTH_32 + * CRYPT_LENGTH_64 + * CRYPT_LENGTH_96 + * CRYPT_LENGTH_128 + * CRYPT_LENGTH_160 + * CRYPT_LENGTH_192 + * CRYPT_LENGTH_224 + * CRYPT_LENGTH_256 + * CRYPT_LENGTH_288 + * CRYPT_LENGTH_320 + * CRYPT_LENGTH_352 + * CRYPT_LENGTH_384 + * CRYPT_LENGTH_416 + * CRYPT_LENGTH_448 + * CRYPT_LENGTH_480 + * CRYPT_LENGTH_512 + * Nostop: + * CRYPT_STOPCPU + * CRYPT_NOSTOPCPU + * @retval None + */ +void CRYPT_StartRShift1(uint32_t Length, uint32_t Nostop) +{ + /* Check parameters */ + assert_parameters(IS_CRYPT_LENGTH(Length)); + assert_parameters(IS_CRYPT_NOSTOP(Nostop)); + + CRYPT->CTRL = (Nostop \ + |Length \ + |CRYPT_CTRL_MODE_RSHIFT1 \ + |CRYPT_CTRL_ACT); +} + +/** + * @brief Waits until last operation to complete. + * @param None + * @retval None + */ +void CRYPT_WaitForLastOperation(void) +{ + while (CRYPT->CTRL & CRYPT_CTRL_ACT) + { + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_dma.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_dma.c new file mode 100644 index 0000000000..5f8bcee7fb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_dma.c @@ -0,0 +1,473 @@ +/** + ****************************************************************************** + * @file lib_dma.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief DMA library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_dma.h" + +//registers default reset values +#define DMA_CxCTL_RSTValue (0UL) +#define DMA_CxSRC_RSTValue (0UL) +#define DMA_CxDST_RSTValue (0UL) +#define DMA_AESCTL_RSTValue (0UL) +#define DMA_AESKEY_RSTValue (0UL) + +/** + * @brief Initializes the DMA channel peripheral registers to their default reset values. + * @param Channel: DMA_CHANNEL_0~DMA_CHANNEL_3 + * @retval None + */ +void DMA_DeInit(uint32_t Channel) +{ + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + + /* channel x disable, clear stop */ + addr = &DMA->C0CTL + Channel*4; + *addr &= ~(DMA_CCTL_EN | DMA_CCTL_STOP); + + /* interrupt disable */ + DMA->IE &= ~((1<<(Channel))\ + |(1<<(Channel+4))\ + |(1<<(Channel+8))); + + /* interrupt state clear */ + DMA->STS = (1<<(Channel+4))\ + |(1<<(Channel+8))\ + |(1<<(Channel+12)); + + /* DMA_CxCTL */ + addr = &DMA->C0CTL + Channel*4; + *addr = DMA_CxCTL_RSTValue; + + /* DMA_CxSRC */ + addr = &DMA->C0SRC + Channel*4; + *addr = DMA_CxSRC_RSTValue; + + /* DMA_CxDST */ + addr = &DMA->C0DST + Channel*4; + *addr = DMA_CxDST_RSTValue; +} +/** + * @brief Fills each DMA_InitType member with its default value. + * @param InitStruct: pointer to an DMA_InitType structure which will be initialized. + * @retval None + */ +void DMA_StructInit(DMA_InitType *InitStruct) +{ + /*-------------- Reset DMA init structure parameters values ---------------*/ + /* Initialize the DestAddr member */ + InitStruct->DestAddr = 0; + /* Initialize the SrcAddr member */ + InitStruct->SrcAddr = 0; + /* Initialize the FrameLen member */ + InitStruct->FrameLen = 0; + /* Initialize the PackLen member */ + InitStruct->PackLen = 0; + /* Initialize the ContMode member */ + InitStruct->ContMode = DMA_CONTMODE_DISABLE; + /* Initialize the TransMode member */ + InitStruct->TransMode = DMA_TRANSMODE_SINGLE; + /* Initialize the ReqSrc member */ + InitStruct->ReqSrc = DMA_REQSRC_SOFT; + /* Initialize the DestAddrMode member */ + InitStruct->DestAddrMode = DMA_DESTADDRMODE_FIX; + /* Initialize the SrcAddrMode member */ + InitStruct->SrcAddrMode = DMA_SRCADDRMODE_FIX; + /* Initialize the TransSize member */ + InitStruct->TransSize = DMA_TRANSSIZE_BYTE; +} +/** + * @brief Initializes DMA channel. + * @param InitStruct: DMA configuration. + DestAddr : destination address + SrcAddr : source address + FrameLen : Frame length (Ranges 0~255, actual length FrameLen+1) + PackLen : Package length (Ranges 0~255, actual length PackLen+1) + ContMode: + DMA_CONTMODE_ENABLE + DMA_CONTMODE_DISABLE + TransMode: + DMA_TRANSMODE_SINGLE + DMA_TRANSMODE_PACK + ReqSrc: + DMA_REQSRC_SOFT + DMA_REQSRC_ADC + DMA_REQSRC_UART0TX + DMA_REQSRC_UART0RX + DMA_REQSRC_UART1TX + DMA_REQSRC_UART1RX + DMA_REQSRC_UART2TX + DMA_REQSRC_UART2RX + DMA_REQSRC_UART3TX + DMA_REQSRC_UART3RX + DMA_REQSRC_UART4TX + DMA_REQSRC_UART4RX + DMA_REQSRC_UART5TX + DMA_REQSRC_UART5RX + DMA_REQSRC_ISO78160TX + DMA_REQSRC_ISO78160RX + DMA_REQSRC_ISO78161TX + DMA_REQSRC_ISO78161RX + DMA_REQSRC_TIMER0 + DMA_REQSRC_TIMER1 + DMA_REQSRC_TIMER2 + DMA_REQSRC_TIMER3 + DMA_REQSRC_SPI1TX + DMA_REQSRC_SPI1RX + DMA_REQSRC_U32K0 + DMA_REQSRC_U32K1 + DMA_REQSRC_CMP1 + DMA_REQSRC_CMP2 + DMA_REQSRC_SPI2TX + DMA_REQSRC_SPI2RX + DMA_REQSRC_SPI3TX + DMA_REQSRC_SPI3RX + DestAddrMode: + DMA_DESTADDRMODE_FIX + DMA_DESTADDRMODE_PEND + DMA_DESTADDRMODE_FEND + SrcAddrMode: + DMA_SRCADDRMODE_FIX + DMA_SRCADDRMODE_PEND + DMA_SRCADDRMODE_FEND + TransSize: + DMA_TRANSSIZE_BYTE + DMA_TRANSSIZE_HWORD + DMA_TRANSSIZE_WORD + Channel: + DMA_CHANNEL_0 + DMA_CHANNEL_1 + DMA_CHANNEL_2 + DMA_CHANNEL_3 + * @retval None + */ +void DMA_Init(DMA_InitType *InitStruct, uint32_t Channel) +{ + uint32_t tmp; + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + assert_parameters(IS_DMA_CONTMOD(InitStruct->ContMode)); + assert_parameters(IS_DMA_TRANSMOD(InitStruct->TransMode)); + assert_parameters(IS_DMA_REQSRC(InitStruct->ReqSrc)); + assert_parameters(IS_DMA_DESTADDRMOD(InitStruct->DestAddrMode)); + assert_parameters(IS_DMA_SRCADDRMOD(InitStruct->SrcAddrMode)); + assert_parameters(IS_DMA_TRANSSIZE(InitStruct->TransSize)); + + if (InitStruct->TransSize == DMA_TRANSSIZE_HWORD) + { + assert_parameters(IS_DMA_ALIGNEDADDR_HWORD(InitStruct->SrcAddr)); + assert_parameters(IS_DMA_ALIGNEDADDR_HWORD(InitStruct->DestAddr)); + } + if (InitStruct->TransSize == DMA_TRANSSIZE_WORD) + { + assert_parameters(IS_DMA_ALIGNEDADDR_WORD(InitStruct->SrcAddr)); + assert_parameters(IS_DMA_ALIGNEDADDR_WORD(InitStruct->DestAddr)); + } + + addr = &DMA->C0DST + Channel*4; + *addr = InitStruct->DestAddr; + + addr = &DMA->C0SRC + Channel*4; + *addr = InitStruct->SrcAddr; + + addr = &DMA->C0CTL + Channel*4; + + tmp = *addr; + tmp &= ~(DMA_CCTL_FLEN\ + |DMA_CCTL_PLEN\ + |DMA_CCTL_CONT\ + |DMA_CCTL_TMODE\ + |DMA_CCTL_DMASEL\ + |DMA_CCTL_DMODE\ + |DMA_CCTL_SMODE\ + |DMA_CCTL_SIZE); + tmp |= ((InitStruct->FrameLen<PackLen<ContMode)\ + |(InitStruct->TransMode)\ + |(InitStruct->ReqSrc)\ + |(InitStruct->DestAddrMode)\ + |(InitStruct->SrcAddrMode)\ + |(InitStruct->TransSize)); + *addr = tmp; +} + +/** + * @brief Initializes the DMA AES channel3 registers to their default reset values. + * @param None + * @retval None + */ +void DMA_AESDeInit(void) +{ + DMA->AESCTL = DMA_AESCTL_RSTValue; + DMA->AESKEY[0] = DMA_AESKEY_RSTValue; + DMA->AESKEY[1] = DMA_AESKEY_RSTValue; + DMA->AESKEY[2] = DMA_AESKEY_RSTValue; + DMA->AESKEY[3] = DMA_AESKEY_RSTValue; + DMA->AESKEY[4] = DMA_AESKEY_RSTValue; + DMA->AESKEY[5] = DMA_AESKEY_RSTValue; + DMA->AESKEY[6] = DMA_AESKEY_RSTValue; + DMA->AESKEY[7] = DMA_AESKEY_RSTValue; +} + +/** + * @brief Initializes AES. + * @param InitStruct: AES configuration. + Mode: + DMA_AESMODE_128 + DMA_AESMODE_192 + DMA_AESMODE_256 + Direction: + DMA_AESDIRECTION_ENCODE + DMA_AESDIRECTION_DECODE + KeyStr: the pointer to DMA_AESKEYx register + * @retval None + */ +void DMA_AESInit(DMA_AESInitType *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_DMA_AESMOD(InitStruct->Mode)); + assert_parameters(IS_DMA_AESDIR(InitStruct->Direction)); + + tmp = DMA->AESCTL; + tmp &= ~(DMA_AESCTL_MODE\ + |DMA_AESCTL_ENC); + tmp |= (InitStruct->Mode\ + |InitStruct->Direction); + DMA->AESCTL = tmp; + DMA->AESKEY[0] = InitStruct->KeyStr[0]; + DMA->AESKEY[1] = InitStruct->KeyStr[1]; + DMA->AESKEY[2] = InitStruct->KeyStr[2]; + DMA->AESKEY[3] = InitStruct->KeyStr[3]; + + if ((InitStruct->Mode == DMA_AESMODE_192) ||\ + (InitStruct->Mode == DMA_AESMODE_256)) + { + DMA->AESKEY[4] = InitStruct->KeyStr[4]; + DMA->AESKEY[5] = InitStruct->KeyStr[5]; + } + if (InitStruct->Mode == DMA_AESMODE_256) + { + DMA->AESKEY[6] = InitStruct->KeyStr[6]; + DMA->AESKEY[7] = InitStruct->KeyStr[7]; + } +} + +/** + * @brief Enables or disables DMA interrupt. + * @param INTMask: can use the '|' operator + DMA_INT_C3DA + DMA_INT_C2DA + DMA_INT_C1DA + DMA_INT_C0DA + DMA_INT_C3FE + DMA_INT_C2FE + DMA_INT_C1FE + DMA_INT_C0FE + DMA_INT_C3PE + DMA_INT_C2PE + DMA_INT_C1PE + DMA_INT_C0PE + NewState: + ENABLE + DISABLE + * @retval None + */ +void DMA_INTConfig(uint32_t INTMask, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_DMA_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + DMA->IE |= INTMask; + else + DMA->IE &= ~INTMask; +} + +/** + * @brief Gets DMA interrupt status. + * @param INTMask: + DMA_INTSTS_C3DA + DMA_INTSTS_C2DA + DMA_INTSTS_C1DA + DMA_INTSTS_C0DA + DMA_INTSTS_C3FE + DMA_INTSTS_C2FE + DMA_INTSTS_C1FE + DMA_INTSTS_C0FE + DMA_INTSTS_C3PE + DMA_INTSTS_C2PE + DMA_INTSTS_C1PE + DMA_INTSTS_C0PE + DMA_INTSTS_C3BUSY + DMA_INTSTS_C2BUSY + DMA_INTSTS_C1BUSY + DMA_INTSTS_C0BUSY + * @retval interrupt status. + */ +uint8_t DMA_GetINTStatus(uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_DMA_INTFLAGR(INTMask)); + + if (DMA->STS&INTMask) + return 1; + else + return 0; +} + +/** + * @brief Clears DMA interrupt status. + * @param INTMask: can use the '|' operator + DMA_INTSTS_C3DA + DMA_INTSTS_C2DA + DMA_INTSTS_C1DA + DMA_INTSTS_C0DA + DMA_INTSTS_C3FE + DMA_INTSTS_C2FE + DMA_INTSTS_C1FE + DMA_INTSTS_C0FE + DMA_INTSTS_C3PE + DMA_INTSTS_C2PE + DMA_INTSTS_C1PE + DMA_INTSTS_C0PE + * @retval None + */ +void DMA_ClearINTStatus(uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_DMA_INTFLAGC(INTMask)); + + DMA->STS = INTMask; +} + +/** + * @brief Enables or disables DMA channel. + * @param Channel: + DMA_CHANNEL_0 + DMA_CHANNEL_1 + DMA_CHANNEL_2 + DMA_CHANNEL_3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void DMA_Cmd(uint32_t Channel, uint32_t NewState) +{ + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + addr = &DMA->C0CTL + Channel*4; + + if (NewState == ENABLE) + *addr |= DMA_CCTL_EN; + else + *addr &= ~DMA_CCTL_EN; +} + +/** + * @brief Enables or disables AES encrypt/decrypt function of DMA channel3. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void DMA_AESCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + DMA->C3CTL |= DMA_CCTL_AESEN; + else + DMA->C3CTL &= ~DMA_CCTL_AESEN; +} + +/** + * @brief Stops DMA transmit. + * @param Channel: + DMA_CHANNEL_0 + DMA_CHANNEL_1 + DMA_CHANNEL_2 + DMA_CHANNEL_3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void DMA_StopTransmit(uint32_t Channel, uint32_t NewState) +{ + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + addr = &DMA->C0CTL + Channel*4; + + if (NewState == ENABLE) + *addr |= DMA_CCTL_STOP; + else + *addr &= ~DMA_CCTL_STOP; +} + +/** + * @brief Gets current frame transferred length. + * @param Channel: + DMA_CHANNEL_0 + DMA_CHANNEL_1 + DMA_CHANNEL_2 + DMA_CHANNEL_3 + * @retval Current frame transferred length. + */ +uint8_t DMA_GetFrameLenTransferred(uint32_t Channel) +{ + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + + addr = &DMA->C0LEN + Channel*4; + return ((*addr&0xFF00)>>8); +} + +/** + * @brief Gets current package transferred length. + * @param Channel: + DMA_CHANNEL_0 + DMA_CHANNEL_1 + DMA_CHANNEL_2 + DMA_CHANNEL_3 + * @retval Current package transferred length. + */ +uint8_t DMA_GetPackLenTransferred(uint32_t Channel) +{ + __IO uint32_t *addr; + + /* Check parameters */ + assert_parameters(IS_DMA_CHANNEL(Channel)); + + addr = &DMA->C0LEN + Channel*4; + return (*addr&0xFF); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_flash.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_flash.c new file mode 100644 index 0000000000..fd6c74ba29 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_flash.c @@ -0,0 +1,441 @@ +/** + ****************************************************************************** + * @file lib_flash.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief FLASH library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_flash.h" +#include "lib_clk.h" + +/* FLASH Keys */ +#define FLASH_PASS_KEY 0x55AAAA55 +#define FLASH_SERASE_KEY 0xAA5555AA +#define FLASH_CERASE_KEY 0xAA5555AA +#define FLASH_DSTB_KEY 0xAA5555AA +#define FLASH_ICE_KEY 0xAA5555AA + +#define FLASH_MODE_MASK 0x1F3 + +/** + * @brief Initializes FLASH mode. + * @param CSMode: + FLASH_CSMODE_DISABLE + FLASH_CSMODE_ALWAYSON + FLASH_CSMODE_TMR2OV + FLASH_CSMODE_RTC + * @retval None + */ +void FLASH_Init(uint32_t CSMode) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_FLASH_CSMODE(CSMode)); + + tmp = FLASH->CTRL; + tmp &= ~FLASH_MODE_MASK; + tmp |= CSMode; + FLASH->CTRL = tmp; +} + +/** + * @brief Enables or disables FLASH interrupt. + * @param IntMask: + FLASH_INT_CS + NewState: + ENABLE + DISABLE + * @retval None + */ +void FLASH_INTConfig(uint32_t IntMask, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_FLASH_INT(IntMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = FLASH->CTRL; + tmp &= ~IntMask; + if (NewState == ENABLE) + { + tmp |= IntMask; + } + FLASH->CTRL = tmp; +} + +/** + * @brief Initializes FLASH 1USCYCLE. + * @param None + * @retval None + */ +void FLASH_CycleInit(void) +{ + uint32_t hclk; + + hclk = CLK_GetHCLKFreq(); + + if (hclk > 1000000) + MISC2->FLASHWC = (hclk/1000000)<FLASHWC = 0; +} + +/** + * @brief Erases a specified FLASH sector. + * @param Addr: The address of flash to be erased. The entire sector corresponding to the address will be erased. + * @retval None + */ +void FLASH_SectorErase(uint32_t Addr) +{ + /* Check parameters */ + assert_parameters(IS_FLASH_ADDRESS(Addr)); + + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + FLASH->PGADDR = Addr; + FLASH->SERASE = FLASH_SERASE_KEY; + while (FLASH->SERASE != 0); + + /* Lock flash */ + FLASH->PASS = 0; +} + +/** + * @brief Erases chip. + * @param None. + * @retval None + */ +void FLASH_ChipErase(void) +{ + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + FLASH->PGADDR = 0; + FLASH->CERASE = FLASH_CERASE_KEY; + while (FLASH->CERASE != 0); + + /* Lock flash */ + FLASH->PASS = 0; +} + +/** + * @brief Programs n word at a specified start address. + * @param Addr: program start address + WordBuffer: The pointer of WordBuffer to be programmed + Length: The length of WordBuffer to be programmed + * @retval None + */ +void FLASH_ProgramWord(uint32_t Addr, uint32_t *WordBuffer, uint32_t Length) +{ + uint32_t i; + + /* Check parameters */ + assert_parameters(IS_FLASH_ADRRW(Addr)); + + FLASH->PGADDR = Addr; + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + for (i=0; iPGDATA = *(WordBuffer++); + while (FLASH->STS != 1); + } + + /* Lock flash */ + FLASH->PASS = 0; +} + +/** + * @brief Programs n half-word at a specified start address. + * @param Addr: program start address + HWordBuffer: The pointer of HWordBuffer to be programmed + Length: The length of HWordBuffer to be programmed + * @retval None + */ +void FLASH_ProgramHWord(uint32_t Addr, uint16_t *HWordBuffer, uint32_t Length) +{ + uint32_t i; + + /* Check parameters */ + assert_parameters(IS_FLASH_ADRRHW(Addr)); + + FLASH->PGADDR = Addr; + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + for (i=0; iPGDATA)) = *(HWordBuffer++); + else + *((__IO uint16_t*)(&FLASH->PGDATA ) + 1) = *(HWordBuffer++); + while (FLASH->STS != 1); + } + + /* Lock flash */ + FLASH->PASS = 0; +} + +/** + * @brief Programs n byte at a specified start address. + * @param Addr: program start address + ByteBuffer: The pointer of ByteBuffer to be programmed + Length: The length of ByteBuffer to be programmed + * @retval None + */ +void FLASH_ProgramByte(uint32_t Addr, uint8_t *ByteBuffer, uint32_t Length) +{ + uint32_t i; + + /* Check parameters */ + assert_parameters(IS_FLASH_ADDRESS(Addr)); + + FLASH->PGADDR = Addr; + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + for (i=0; iPGDATA)) = *(ByteBuffer++); + else if (((Addr + i)&0x3) == 1) + *((__IO uint8_t*)(&FLASH->PGDATA) + 1) = *(ByteBuffer++); + else if (((Addr + i)&0x3) == 2) + *((__IO uint8_t*)(&FLASH->PGDATA) + 2) = *(ByteBuffer++); + else + *((__IO uint8_t*)(&FLASH->PGDATA) + 3) = *(ByteBuffer++); + while (FLASH->STS != 1); + } + + /* Lock flash */ + FLASH->PASS = 0; +} + +/** + * @brief Enables FLASH read protection. + * @param Block: can use the '|' operator. + FLASH_BLOCK_0 ~ FLASH_BLOCK_31 or FLASH_BLOCK_ALL + * @retval None + */ +void FLASH_SetReadProtection(uint32_t Block) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_FLASH_RWBLOCK(Block)); + + tmp = *(volatile unsigned int *)(0x0007FC00); + tmp &= ~Block; + + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + FLASH->PGADDR = 0x7FC00; + FLASH->PGDATA = tmp; + while (FLASH->STS != 1); + /* Lock flash */ + FLASH->PASS = 0; + + tmp = *(volatile unsigned int *)(0x0007FC00); +} + +/** + * @brief Enables or disables FLASH write protection. + * @param Block: can use the '|' operator. + FLASH_BLOCK_0 ~ FLASH_BLOCK_31 or FLASH_BLOCK_ALL + NewState: + ENABLE + DISABLE + * @retval None + */ +void FLASH_WriteProtection(uint32_t Block, uint32_t NewState) +{ + uint32_t wrprot; + + /* Check parameters */ + assert_parameters(IS_FLASH_RWBLOCK(Block)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + wrprot = FLASH->WRPROT; + + if (NewState == ENABLE) + { + wrprot |= Block; + } + else + { + wrprot &= ~Block; + } + FLASH->WRPROT = wrprot; +} + +/** + * @brief Enables or disables ICE protection. + * @param NewState: + ENABLE(ICE protection is successful when 0x7FC08 is 0x0A ) + DISABLE + * @retval None. + */ +void FLASH_ICEProtection(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + /* Unlock flash */ + FLASH->PASS = FLASH_PASS_KEY; + + FLASH->PGADDR = 0x7FC08; + FLASH->PGDATA = 0x0A; + while (FLASH->STS != 1); + /* Lock flash */ + FLASH->PASS = 0; + } + else + { + FLASH_SectorErase(0x7FFFF); + CORTEX_NVIC_SystemReset(); + } +} + +/** + * @brief Gets read/write/erase protection status. + * @param Block: + FLASH_BLOCK_0 ~ FLASH_BLOCK_31 + Operation: + FLASH_READ + FLASH_WRITE + * @retval + When Operation is FLASH_READ: + 1: Read protection enabled. + 0: Read protection disabled. + When Operation is FLASH_WRITE: + 1: Write/erase protection enabled. + 0: Write/erase protection disabled. + */ +uint8_t FLASH_GetProtectionStatus(uint32_t Block, uint32_t Operation) +{ + /* Check parameters */ + assert_parameters(IS_FLASH_BLOCK(Block)); + assert_parameters(IS_FLASH_OPERATION(Operation)); + + if (Operation == FLASH_READ) + { + if (FLASH->RDPROT & Block) + return 1; + else + return 0; + } + else + { + if (FLASH->WRPROT & Block) + return 1; + else + return 0; + } +} + +/** + * @brief Gets read/write/erase protection status. + * @param Operation: + FLASH_READ + FLASH_WRITE + * @retval Read or write/erase protection status. + */ +uint32_t FLASH_GetAllProtectionStatus(uint32_t Operation) +{ + if (Operation == FLASH_READ) + { + return FLASH->RDPROT; + } + else + { + return FLASH->WRPROT; + } +} + +/** + * @brief Sets checksum range. + * @param AddrStart: checksum start address + AddrEnd: checksum end address + * @retval None + */ +void FLASH_SetCheckSumRange(uint32_t AddrStart, uint32_t AddrEnd) +{ + /* Check parameters */ + assert_parameters(IS_FLASH_CHECKSUMADDR(AddrStart,AddrEnd)); + + FLASH->CSSADDR = AddrStart; + FLASH->CSEADDR = AddrEnd; +} + +/** + * @brief Sets checksum compare value. + * @param Checksum: checksum compare value + * @retval None + */ +void FLASH_SetCheckSumCompValue(uint32_t Checksum) +{ + FLASH->CSCVALUE = Checksum; +} + +/** + * @brief Gets FLASH checksum value. + * @param None + * @retval Checksum + */ +uint32_t FLASH_GetCheckSum(void) +{ + return FLASH->CSVALUE; +} + +/** + * @brief Gets FLASH interrupt status. + * @param IntMask: + FLASH_INT_CS + * @retval 1: interrupt status set + 0: interrupt status reset + */ +uint8_t FLASH_GetINTStatus(uint32_t IntMask) +{ + /* Check parameters */ + assert_parameters(IS_FLASH_INT(IntMask)); + + if (FLASH->INTSTS & FLASH_INTSTS_CSERR) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears FLASH interrupt status. + * @param IntMask: + FLASH_INT_CS + * @retval None + */ +void FLASH_ClearINTStatus(uint32_t IntMask) +{ + /* Check parameters */ + assert_parameters(IS_FLASH_INT(IntMask)); + + if (IntMask == FLASH_INT_CS) + { + FLASH->INTSTS = FLASH_INTSTS_CSERR; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_gpio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_gpio.c new file mode 100644 index 0000000000..cebe65effe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_gpio.c @@ -0,0 +1,437 @@ +/** + ****************************************************************************** + * @file lib_gpio.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief GPIO library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_gpio.h" + + +/** + * @brief Initializes GPIO. + * @param GPIOx: GPIOB~GPIOF + InitStruct:GPIO configuration. + GPIO_Pin: can use the '|' operator + GPIO_Pin_0 ~ GPIO_Pin_15 or GPIO_Pin_All + GPIO_Mode: + GPIO_MODE_INPUT + GPIO_MODE_OUTPUT_CMOS + GPIO_MODE_OUTPUT_OD + GPIO_MODE_INOUT_OD + GPIO_MODE_INOUT_CMOS + GPIO_MODE_FORBIDDEN + * @retval None + */ +void GPIOBToF_Init(GPIO_Type *GPIOx, GPIO_InitType *InitStruct) +{ + uint32_t tmp_reg1, tmp_reg2; + + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PIN(InitStruct->GPIO_Pin)); + assert_parameters(IS_GPIO_MODE(InitStruct->GPIO_Mode)); + + /* Configure ATT */ + if (InitStruct->GPIO_Mode & 0x2U) + { + tmp_reg1 = GPIOx->ATT; + tmp_reg1 &= ~InitStruct->GPIO_Pin; + if (InitStruct->GPIO_Mode & 0x1U) + { + tmp_reg1 |= InitStruct->GPIO_Pin; + } + GPIOx->ATT = tmp_reg1; + } + + /* Configure output/input mode */ + tmp_reg1 = GPIOx->OEN; + tmp_reg1 &= ~InitStruct->GPIO_Pin; + tmp_reg2 = GPIOx->IE; + tmp_reg2 &= ~InitStruct->GPIO_Pin; + if (InitStruct->GPIO_Mode & 0x8U) + { + tmp_reg2 |= InitStruct->GPIO_Pin; + } + if (InitStruct->GPIO_Mode & 0x4U) + { + tmp_reg1 |= InitStruct->GPIO_Pin; + } + GPIOx->OEN = tmp_reg1; + GPIOx->IE = tmp_reg2; +} + +/** + * @brief Initializes GPIOA. + * @param GPIOx: GPIOA + InitStruct:GPIO configuration. + GPIO_Pin: can use the '|' operator + GPIO_Pin_0 ~ GPIO_Pin_15 or GPIO_Pin_All + GPIO_Mode: + GPIO_MODE_INPUT + GPIO_MODE_OUTPUT_CMOS + GPIO_MODE_OUTPUT_OD + GPIO_MODE_INOUT_OD + GPIO_MODE_INOUT_CMOS + GPIO_MODE_FORBIDDEN + * @retval None + */ +void GPIOA_Init(GPIOA_Type *GPIOx, GPIO_InitType *InitStruct) +{ + uint32_t tmp_reg1, tmp_reg2; + + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PIN(InitStruct->GPIO_Pin)); + assert_parameters(IS_GPIO_MODE(InitStruct->GPIO_Mode)); + + /* Configure ATT */ + if (InitStruct->GPIO_Mode & 0x2U) + { + tmp_reg1 = GPIOx->ATT; + tmp_reg1 &= ~InitStruct->GPIO_Pin; + if (InitStruct->GPIO_Mode & 0x1U) + { + tmp_reg1 |= InitStruct->GPIO_Pin; + } + GPIOx->ATT = tmp_reg1; + } + + /* Configure output/input mode */ + tmp_reg1 = GPIOx->OEN; + tmp_reg1 &= ~InitStruct->GPIO_Pin; + tmp_reg2 = GPIOx->IE; + tmp_reg2 &= ~InitStruct->GPIO_Pin; + if (InitStruct->GPIO_Mode & 0x8U) + { + tmp_reg2 |= InitStruct->GPIO_Pin; + } + if (InitStruct->GPIO_Mode & 0x4U) + { + tmp_reg1 |= InitStruct->GPIO_Pin; + } + GPIOx->OEN = tmp_reg1; + GPIOx->IE = tmp_reg2; +} + +/** + * @brief Reads input data register bit. + * @param GPIOx: GPIOB~GPIOF + GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15. + * @retval input pin value. + */ +uint8_t GPIOBToF_ReadInputDataBit(GPIO_Type *GPIOx, uint16_t GPIO_Pin) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PINR(GPIO_Pin)); + + if (GPIOx->STS & GPIO_Pin) + return 1; + else + return 0; +} + +/** + * @brief Reads input data register bit. + * @param GPIOx: GPIOA + GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15. + * @retval input pin value. + */ +uint8_t GPIOA_ReadInputDataBit(GPIOA_Type *GPIOx, uint16_t GPIO_Pin) +{ + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PINR(GPIO_Pin)); + + if (GPIOx->STS & GPIO_Pin) + return 1; + else + return 0; +} + +/** + * @brief Reads input data register. + * @param GPIOx: GPIOB~GPIOF + * @retval input port value. + */ +uint16_t GPIOBToF_ReadInputData(GPIO_Type* GPIOx) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + + return GPIOx->STS; +} + +/** + * @brief Reads input data register. + * @param GPIOx: GPIOA + * @retval input port value. + */ +uint16_t GPIOA_ReadInputData(GPIOA_Type* GPIOx) +{ + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + + return GPIOx->STS; +} + +/** + * @brief Reads output data register bit. + * @param GPIOx: GPIOB~GPIOF + GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15 + * @retval output pin value. + */ +uint8_t GPIOBToF_ReadOutputDataBit(GPIO_Type* GPIOx, uint16_t GPIO_Pin) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PINR(GPIO_Pin)); + + if (GPIOx->DAT & GPIO_Pin) + return 1; + else + return 0; +} + +/** + * @brief Reads output data register bit. + * @param GPIOx: GPIOA + GPIO_Pin:GPIO_Pin_0~GPIO_Pin_15 + * @retval output pin value. + */ +uint8_t GPIOA_ReadOutputDataBit(GPIOA_Type* GPIOx, uint16_t GPIO_Pin) +{ + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_PINR(GPIO_Pin)); + + if (GPIOx->DAT & GPIO_Pin) + return 1; + else + return 0; +} + +/** + * @brief Reads output data register. + * @param GPIOx: GPIOB~GPIOF + * @retval Output port value. + */ +uint16_t GPIOBToF_ReadOutputData(GPIO_Type* GPIOx) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + + return GPIOx->DAT; +} + +/** + * @brief Reads output data register. + * @param GPIOx: GPIOA + * @retval Output port value. + */ +uint16_t GPIOA_ReadOutputData(GPIOA_Type* GPIOx) +{ + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + + return GPIOx->DAT; +} + +/** + * @brief Writes output data register bit. + * @param DATx: GPIO_A~GPIO_F + PinNum: 0~15 + val:value write to register bit. + * @retval None. + */ +void GPIO_WriteBit(GPIO_DATInitType* DATx, uint8_t PinNum, uint8_t val) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_DAT(DATx)); + assert_parameters(IS_GPIO_PINNUM(PinNum)); + assert_parameters(IS_GPIO_BITVAL(val)); + + DATx->DATBitBand[PinNum] = val; +} + +/** + * @brief Writes output data register. + * @param GPIOx: GPIOB~GPIOF + val:value write to register. + * @retval None. + */ +void GPIOBToF_Write(GPIO_Type* GPIOx, uint16_t val) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_ALL_INSTANCE(GPIOx)); + + GPIOx->DAT = val; +} + +/** + * @brief Writes output data register. + * @param GPIOx: GPIOA + val:value write to register. + * @retval None. + */ +void GPIOA_Write(GPIOA_Type* GPIOx, uint16_t val) +{ + /* Check parameters */ + assert_parameters(IS_PMUIO_ALL_INSTANCE(GPIOx)); + + GPIOx->DAT = val; +} + +/** + * @brief Enables or disables GPIO AF functiuon. + * @param GPIOx:GPIOB GPIOE + GPIO_AFx: + GPIOB_AF_PLLHDIV + GPIOB_AF_PLLLOUT + GPIOB_AF_OSC + GPIOE_AF_CMP1O + NewState: + ENABLE + DISABLE + * @retval None. + */ +void GPIOBToF_AFConfig(GPIO_Type* GPIOx, uint32_t GPIO_AFx, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_GPIOAF_ALL_INSTANCE(GPIOx)); + assert_parameters(IS_GPIO_GPIOAF(GPIO_AFx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (GPIOx == GPIOB) + { + if (NewState == ENABLE) + { + GPIOAF->IOB_SEL |= GPIO_AFx; + } + else + { + GPIOAF->IOB_SEL &= ~GPIO_AFx; + } + } + if (GPIOx == GPIOE) + { + if (NewState == ENABLE) + { + GPIOAF->IOE_SEL |= GPIO_AFx; + } + else + { + GPIOAF->IOE_SEL &= ~GPIO_AFx; + } + } +} + +/** + * @brief Enables or disables GPIOA AF function. + * @param PMUIO_AFx:can use the '|' operator + PMUIO7_AF_PLLDIV + PMUIO6_AF_CMP2O + PMUIO3_AF_PLLDIV + NewState: + ENABLE + DISABLE + * @retval None. + */ +void GPIOA_AFConfig(uint32_t PMUIO_AFx, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PMUIOAF(PMUIO_AFx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + GPIOA->SEL |= PMUIO_AFx; + } + else + { + GPIOA->SEL &= ~PMUIO_AFx; + } +} + +/** + * @brief Enables or disables GPIO pin remap function. + * @param GPIO_Remap: + GPIO_REMAP_I2C + NewState: + ENABLE + DISABLE + * @retval None. + */ +void GPIO_PinRemapConfig(uint32_t GPIO_Remap, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_REMAP(GPIO_Remap)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + GPIOAF->IO_MISC |= GPIO_Remap; + } + else + { + GPIOAF->IO_MISC &= ~GPIO_Remap; + } +} + +/** + * @brief Configures GPIO PLLDIV function. + * @param Divider: + GPIO_PLLDIV_1 + GPIO_PLLDIV_2 + GPIO_PLLDIV_4 + GPIO_PLLDIV_8 + GPIO_PLLDIV_16 + * @retval None. + */ +void GPIO_PLLDIVConfig(uint32_t Divider) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_GPIO_PLLDIV(Divider)); + + tmp = GPIOAF->IO_MISC; + tmp &= ~GPIOAF_IO_MISC_PLLHDIV; + tmp |= Divider; + GPIOAF->IO_MISC = tmp; +} + +/** + * @brief Enables or disables GPIOA de-glitch circuit. + * @param GPIO_Pin: can use the '|' operator + GPIO_Pin_0~GPIO_Pin_15 or GPIO_Pin_All + NewState: + ENABLE + DISABLE + * @retval None. + */ +void GPIOA_DeGlitchCmd(uint16_t GPIO_Pin, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PIN(GPIO_Pin)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + /*IOA wake-up signal will go through de-glitch circuit.*/ + if (NewState == ENABLE) + { + GPIOA->IOANODEG &= ~GPIO_Pin; + } + /*IOA wake-up signal will not go through de-glitch circuit.*/ + else + { + GPIOA->IOANODEG |= GPIO_Pin; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_i2c.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_i2c.c new file mode 100644 index 0000000000..b4aa2f515b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_i2c.c @@ -0,0 +1,694 @@ +/** + ****************************************************************************** + * @file lib_i2c.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief IIC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_i2c.h" + +//registers default reset values +#define I2C_ADDR_RSTValue 0 +#define I2C_CTRL_RSTValue 0 +#define I2C_CTRL2_RSTValue 0 + +/* Private Functions -------------------------------------------------------- */ +static uint16_t I2C_CheckState(uint8_t State); +static void I2C_SendStart(void); +static void I2C_SendRestart(void); +static void I2C_SendByte(uint8_t dat); +static void I2C_SendStop(void); +static uint8_t I2C_ReceiveByte(void); +static void I2C_ClearBus(uint32_t remap); +static void I2C_WaitForCrossPage(uint8_t sla); + +/** + * @brief Checks required state. + * @param State: + Required state. + * @retval 0: state OK + !0: state Error, [15:8]Required status code, [7:0] real status code. + */ +static uint16_t I2C_CheckState(uint8_t State) +{ + uint16_t ret; + if (I2C_GetStatusCode() != State) + { + ret = (State<<8)|(I2C_GetStatusCode()); + return ret; + } + else + { + return 0; + } +} + +/** + * @brief Sends start signal. + * @param None + * @retval None + */ +static void I2C_SendStart(void) +{ + I2C_GenerateSTART(ENABLE); + while (I2C_GetINTStatus() == 0); + I2C_GenerateSTART(DISABLE); +} + +/** + * @brief Sends restart signal. + * @param None + * @retval None + */ +static void I2C_SendRestart(void) +{ + I2C_GenerateSTART(ENABLE); + I2C_ClearINTStatus(); + while (I2C_GetINTStatus() == 0); + I2C_GenerateSTART(DISABLE); +} + +/** + * @brief Sends stop signal. + * @param None + * @retval None + */ +static void I2C_SendStop(void) +{ + I2C_GenerateSTOP(ENABLE); + I2C_ClearINTStatus(); + I2C_GenerateSTOP(DISABLE); +} + +/** + * @brief Sends data. + * @param dat:data to send. + * @retval None + */ +static void I2C_SendByte(uint8_t dat) +{ + I2C_SendData(dat); + I2C_ClearINTStatus(); + while (I2C_GetINTStatus() == 0); +} + +/** + * @brief Receives byte. + * @param None + * @retval Byte received + */ +static uint8_t I2C_ReceiveByte(void) +{ + I2C_ClearINTStatus(); + while (I2C_GetINTStatus() == 0); + return I2C_ReceiveData(); +} + +/** + * @brief Waits until cross page operation done. + * @param None + * @retval None + */ +static void I2C_WaitForCrossPage(uint8_t sla) +{ + do + { + I2C_SendRestart(); + I2C_SendByte(sla); //device address + }while (I2C_GetStatusCode() !=0x18); + I2C_SendStop(); //stop +} + +/** + * @brief Clears bus. + * @param None + * @retval None + */ +static void I2C_ClearBus(uint32_t remap) +{ + __IO uint8_t i, j; + + if (remap) // I2C remap enable, SCL IOC4 + { + GPIOC->DAT &= ~BIT4; + GPIOC->ATT |= BIT4; + GPIOC->OEN &= ~BIT4; + for (i=0; i<9; i++) + { + GPIOC->DAT |= BIT4; + for (j=0; j<100; j++) + __NOP(); + GPIOC->DAT &= ~BIT4; + for (j=0; j<100; j++) + __NOP(); + } + GPIOC->DAT |= BIT4; + GPIOC->OEN |= BIT4; + GPIOC->IE &= ~BIT4; + } + else // I2C remap disable, SCL IOB13 + { + GPIOB->DAT &= ~BIT13; + GPIOB->ATT |= BIT13; + GPIOB->OEN &= ~BIT13; + for (i=0; i<9; i++) + { + GPIOB->DAT |= BIT13; + for (j=0; j<100; j++) + __NOP(); + GPIOB->DAT &= ~BIT13; + for (j=0; j<100; j++) + __NOP(); + } + GPIOB->DAT |= BIT13; + GPIOB->OEN |= BIT13; + GPIOB->IE &= ~BIT13; + } +} + +/* Exported Functions ------------------------------------------------------- */ + +/** + * @brief Initializes the I2C peripheral registers to their default reset values. + * @param remap: I2C_REMAP_ENABLE or I2C_REMAP_DISABLE + * @retval None + */ +void I2C_DeInit(uint32_t remap) +{ + I2C->CTRL &= ~I2C_CTRL_EN; + + I2C->ADDR = I2C_ADDR_RSTValue; + I2C->CTRL = I2C_CTRL_RSTValue; + I2C->CTRL2 = I2C_CTRL2_RSTValue; + + I2C_ClearBus(remap); +} + +/** + * @brief Fills each InitStruct member with its default value. + * @param InitStruct: pointer to an I2C_InitType structure which will be initialized. + * @retval None + */ +void I2C_StructInit(I2C_InitType *InitStruct) +{ + /*--------------- Reset I2C init structure parameters values ---------------*/ + /* Initialize the AssertAcknowledge member */ + InitStruct->AssertAcknowledge = I2C_ASSERTACKNOWLEDGE_DISABLE; + /* Initialize the ClockSource member */ + InitStruct->ClockSource = I2C_CLOCKSOURCE_APBD256; + /* Initialize the GeneralCallAck member */ + InitStruct->GeneralCallAck = I2C_GENERALCALLACK_DISABLE; + /* Initialize the SlaveAddr member */ + InitStruct->SlaveAddr = 0; +} + +/** + * @brief Initializes I2C. + * @param InitStruct: I2C configuration. + SlaveAddr: Own I2C slave address (7 bit) + GeneralCallAck: + I2C_GENERALCALLACK_ENABLE + I2C_GENERALCALLACK_DISABLE + AssertAcknowledge: + I2C_ASSERTACKNOWLEDGE_ENABLE + I2C_ASSERTACKNOWLEDGE_DISABLE + ClockSource: + I2C_CLOCKSOURCE_APBD256 + I2C_CLOCKSOURCE_APBD224 + I2C_CLOCKSOURCE_APBD192 + I2C_CLOCKSOURCE_APBD160 + I2C_CLOCKSOURCE_APBD960 + I2C_CLOCKSOURCE_APBD120 + I2C_CLOCKSOURCE_APBD60 + I2C_CLOCKSOURCE_TIM3OFD8 + * @retval None. + */ +void I2C_Init(I2C_InitType *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_I2C_GC(InitStruct->GeneralCallAck)); + assert_parameters(IS_I2C_AA(InitStruct->AssertAcknowledge)); + assert_parameters(IS_I2C_CLKSRC(InitStruct->ClockSource)); + + I2C->ADDR = InitStruct->SlaveAddr\ + |InitStruct->GeneralCallAck; + tmp = I2C->CTRL; + tmp &= ~(I2C_CTRL_CR\ + |I2C_CTRL_AA); + tmp |= (InitStruct->ClockSource\ + |InitStruct->AssertAcknowledge); + I2C->CTRL = tmp; +} + +/** + * @brief Enables or disables I2C interrupt. + * @param NewState: + ENABLE + DISABLE + * @retval None. + */ +void I2C_INTConfig(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + I2C->CTRL2 |= I2C_CTRL2_INTEN; + else + I2C->CTRL2 &= ~I2C_CTRL2_INTEN; +} + +/** + * @brief Gets I2C interrupt status. + * @param None + * @retval Interrupt status. + */ +uint8_t I2C_GetINTStatus(void) +{ + if (I2C->CTRL&I2C_CTRL_SI) + return 1; + else + return 0; +} + +/** + * @brief Clears I2C interrupt status. + * @param None + * @retval None. + */ +void I2C_ClearINTStatus(void) +{ + I2C->CTRL &= ~I2C_CTRL_SI; +} + +/** + * @brief Reads a packge of data from slave device. + * @param InitStruct: I2C_WRType + SlaveAddr : Slave device address + SubAddress : start of slave device sub-address + PageRange : maximum range of page to Read operation + pBuffer : Read data pointer + Length : sum of Read datas + SubAddrType: + I2C_SUBADDR_1BYTE (Slave device sub-address type: 1 byte) + I2C_SUBADDR_2BYTE (Slave device sub-address type: 2 bytes) + I2C_SUBADDR_OTHER (Slave device sub-address type: othres) + * @retval 0: true + £¡0: status code + bit15~8 status code(true) + bit7~0 status code(false) + */ +uint16_t I2C_MasterReadBytes(I2C_WRType *InitStruct) +{ + uint32_t i; + uint16_t ret_val; + + /* Check parameters */ + assert_parameters(I2C_SUBADDR_TYPE(InitStruct->SubAddrType)); + + I2C_AssertAcknowledgeConfig(ENABLE); //Enable AA + /*-------------------------------- START -----------------------------------*/ + I2C_SendStart(); + ret_val = I2C_CheckState(0x08); + if (ret_val) return ret_val; + + /*------------------------------ Send SLA+W --------------------------------*/ + /* Slave device sub-address type: 1 byte */ + if (InitStruct->SubAddrType == I2C_SUBADDR_1BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* Slave device sub-address type: 2 bytes */ + if (InitStruct->SubAddrType == I2C_SUBADDR_2BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress>>8)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* Slave device sub-address type: othres */ + if (InitStruct->SubAddrType == I2C_SUBADDR_OTHER) + { + if (InitStruct->PageRange < 256) // 8 + x + { + I2C_SendByte(InitStruct->SlaveAddr|((InitStruct->SubAddress>>7)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + else // 16 + x + { + I2C_SendByte(InitStruct->SlaveAddr|((InitStruct->SubAddress>>15)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress>>8)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + } + + /*------------------------------- Restart ----------------------------------*/ + I2C_SendRestart(); //restart + ret_val = I2C_CheckState(0x10); + if (ret_val) return ret_val; + + /*----------------------------- Send SLA+R ---------------------------------*/ + /* Slave device sub-address type: othres */ + if (InitStruct->SubAddrType == I2C_SUBADDR_OTHER) + { + if (InitStruct->PageRange < 256) // 8 + x + I2C_SendByte(InitStruct->SlaveAddr|0x01|((InitStruct->SubAddress>>7)&0xE)); + else // 16 + x + I2C_SendByte(InitStruct->SlaveAddr|0x01|((InitStruct->SubAddress>>15)&0xE)); + } + else + I2C_SendByte(InitStruct->SlaveAddr|0x01); + + ret_val = I2C_CheckState(0x40); + if (ret_val) return ret_val; + + /*----------------------------- Read datas ---------------------------------*/ + for (i=0; i<(InitStruct->Length-1); i++) + { + *InitStruct->pBuffer = I2C_ReceiveByte(); + InitStruct->pBuffer++; + ret_val = I2C_CheckState(0x50); + if (ret_val) return ret_val; + } + /*-------------------- Read the last data, disable AA ----------------------*/ + I2C_AssertAcknowledgeConfig(DISABLE); + *InitStruct->pBuffer = I2C_ReceiveByte(); + ret_val = I2C_CheckState(0x58); + if (ret_val) return ret_val; + /*--------------------------------- Stop -----------------------------------*/ + I2C_SendStop(); //stop + return 0; +} + +/** + * @brief Writes a packge of data to slave device. + * @param InitStruct: I2C_WRType + SlaveAddr : Slave device address + SubAddress : start of slave device sub-address + PageRange : maximum range of page to write operation + pBuffer : write data pointer + Length : sum of write datas + SubAddrType: + I2C_SUBADDR_1BYTE (Slave device sub-address type: 1 byte) + I2C_SUBADDR_2BYTE (Slave device sub-address type: 2 bytes) + I2C_SUBADDR_OTHER (Slave device sub-address type: othres) + * @retval 0: true + £¡0: status code + bit15~8 status code(true) + bit7~0 status code(false) + */ +uint16_t I2C_MasterWriteBytes(I2C_WRType *InitStruct) +{ + uint16_t ret_val; + uint32_t i; + + /* Check parameters */ + assert_parameters(I2C_SUBADDR_TYPE(InitStruct->SubAddrType)); + + I2C_AssertAcknowledgeConfig(ENABLE); //Enable AA + /*-------------------------------- START -----------------------------------*/ + I2C_SendStart(); + ret_val = I2C_CheckState(0x08); + if (ret_val) return ret_val; + + /*------------------------------ Send SLA+W --------------------------------*/ + /* Slave device sub-address type: 1 byte */ + if (InitStruct->SubAddrType == I2C_SUBADDR_1BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* Slave device sub-address type: 2 bytes */ + else if (InitStruct->SubAddrType == I2C_SUBADDR_2BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); //device address + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress>>8)&0xFF); //first word address + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); //second word address + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* Slave device sub-address type: othres */ + else + { + if (InitStruct->PageRange < 256) // 8 + x + { + I2C_SendByte(InitStruct->SlaveAddr|((InitStruct->SubAddress>>7)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + else // 16 + x + { + I2C_SendByte(InitStruct->SlaveAddr|((InitStruct->SubAddress>>15)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress>>8)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte(InitStruct->SubAddress&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + } + + /*----------------------------- Write datas --------------------------------*/ + for (i=0; i<(InitStruct->Length); i++) + { + /* Reach the page boundary */ + if ((i > 0) && ((InitStruct->SubAddress+i)%InitStruct->PageRange == 0)) + { + I2C_SendStop(); + I2C_WaitForCrossPage(InitStruct->SlaveAddr); + I2C_SendStart(); //start + ret_val = I2C_CheckState(0x08); + if (ret_val) return ret_val; + /* WriteAddr: 1 byte */ + if (InitStruct->SubAddrType == I2C_SUBADDR_1BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress+i)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* WriteAddr: 2 byte */ + if (InitStruct->SubAddrType == I2C_SUBADDR_2BYTE) + { + I2C_SendByte(InitStruct->SlaveAddr); //device address + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(((InitStruct->SubAddress+i)>>8)&0xFF); //first word address + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress+i)&0xFF); //second word address + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* WriteAddr: (16 or 8)+x*/ + if (InitStruct->SubAddrType == I2C_SUBADDR_OTHER) + { + if (InitStruct->PageRange < 256) // 8 + x + { + I2C_SendByte(InitStruct->SlaveAddr|(((InitStruct->SubAddress+i)>>7)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress+i)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + else // 16 + x + { + I2C_SendByte(InitStruct->SlaveAddr|(((InitStruct->SubAddress+i)>>15)&0xE)); + ret_val = I2C_CheckState(0x18); + if (ret_val) return ret_val; + + I2C_SendByte(((InitStruct->SubAddress+i)>>8)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + + I2C_SendByte((InitStruct->SubAddress+i)&0xFF); + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + } + + I2C_SendByte(*InitStruct->pBuffer); + InitStruct->pBuffer++; + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + /* Not reaching the page boundary */ + else + { + I2C_SendByte(*InitStruct->pBuffer); + InitStruct->pBuffer++; + ret_val = I2C_CheckState(0x28); + if (ret_val) return ret_val; + } + } + + I2C_SendStop(); + I2C_WaitForCrossPage(InitStruct->SlaveAddr); + return 0; +} + +/** + * @brief Enables or disables I2C. + * @param NewState: + ENABLE + DISABLE + * @retval None. + */ +void I2C_Cmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + I2C->CTRL |= I2C_CTRL_EN; + else + I2C->CTRL &= ~I2C_CTRL_EN; +} + +/* I2C Exported Functions Group5: + Others ------------------------------------*/ + +/** + * @brief Configures assert acknowledge. + * @param NewState: + ENABLE + DISABLE + * @retval None. + */ +void I2C_AssertAcknowledgeConfig(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + I2C->CTRL |= I2C_CTRL_AA; + else + I2C->CTRL &= ~I2C_CTRL_AA; +} + +/** + * @brief Receives a byte data. + * @param None. + * @retval Data received. + */ +uint8_t I2C_ReceiveData(void) +{ + return I2C->DATA; +} + +/** + * @brief Sends a byte data. + * @param Dat:data to transmit. + * @retval None + */ +void I2C_SendData(uint8_t Dat) +{ + I2C->DATA = Dat; +} + +/** + * @brief Generates start signal. + * @param NewState: + ENABLE + DISABLE + * @retval None. + */ +void I2C_GenerateSTART(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + I2C->CTRL |= I2C_CTRL_STA; + else + I2C->CTRL &= ~I2C_CTRL_STA; +} + +/** + * @brief Generates stop signal. + * @param NewState: + ENABLE + DISABLE + * @retval None. + */ +void I2C_GenerateSTOP(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + I2C->CTRL |= I2C_CTRL_STO; + else + I2C->CTRL &= ~I2C_CTRL_STO; +} + +/** + * @brief Gets status code. + * @param None + * @retval status code. + */ +uint8_t I2C_GetStatusCode(void) +{ + return (I2C->STS&I2C_STS_STS); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_iso7816.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_iso7816.c new file mode 100644 index 0000000000..83077dc8d6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_iso7816.c @@ -0,0 +1,405 @@ +/** + ****************************************************************************** + * @file lib_iso7816.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief ISO7816 library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_iso7816.h" +#include "lib_clk.h" + +//registers default reset values +#define ISO7816_BAUDDIVL_RSTValue (0UL) +#define ISO7816_BAUDDIVH_RSTValue (0UL) +#define ISO7816_CFG_RSTValue (0x400) +#define ISO7816_CLK_RSTValue (0UL) +#define ISO7816_INFO_RC_MASK (0x3ECUL) + + +/** + * @brief Initializes the ISO7816 peripheral registers to their default reset values. + * @param ISO7816x: ISO78160~ISO78161 + * @retval None + */ +void ISO7816_DeInit(ISO7816_Type *ISO7816x) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + + ISO7816x->CFG &= ~ISO7816_CFG_EN; + + ISO7816x->INFO = ISO7816_INFO_RC_MASK; /* clear interrupt flag */ + ISO7816x->BAUDDIVH = ISO7816_BAUDDIVH_RSTValue; + ISO7816x->BAUDDIVL = ISO7816_BAUDDIVL_RSTValue; + ISO7816x->CFG = ISO7816_CFG_RSTValue; + ISO7816x->CLK = ISO7816_CLK_RSTValue; +} + + +/** + * @brief Fills each InitStruct member with its default value. + * @param InitStruct: pointer to an ISO7816_InitType structure which will be initialized. + * @retval None + */ +void ISO7816_StructInit(ISO7816_InitType *InitStruct) +{ + /*--------------- Reset ISO7816 init structure parameters values ---------------*/ + /* Initialize the FirstBit member */ + InitStruct->FirstBit = ISO7816_FIRSTBIT_MSB; + /* Initialize the Parity member */ + InitStruct->Parity = ISO7816_PARITY_EVEN; + /* Initialize the Baudrate member */ + InitStruct->Baudrate = 9600; + /* Initialize the TXRetry member */ + InitStruct->TXRetry = ISO7816_TXRTY_0; + /* Initialize the RXACKLength member */ + InitStruct->RXACKLength = ISO7816_RXACKLEN_2; + /* Initialize the TXNACKLength member */ + InitStruct->TXNACKLength = ISO7816_TXNACKLEN_0; +} + +/** + * @brief Initializes ISO7816. + * @param ISO7816x: ISO78160~ISO78161 + Init_Struct:iso7816 configuration. + FirstBit: + ISO7816_FIRSTBIT_MSB + ISO7816_FIRSTBIT_LSB + Parity: + ISO7816_PARITY_EVEN + ISO7816_PARITY_ODD + Baudrate: baudrate value to configure, 200UL ~ 2625000UL + TXRetry: + ISO7816_TXRTY_0 ~ ISO7816_TXRTY_15 + RXACKLength: + ISO7816_RXACKLEN_2 + ISO7816_RXACKLEN_1 + TXNACKLength: + ISO7816_TXNACKLEN_0 + ISO7816_TXNACKLEN_1 + ISO7816_TXNACKLEN_2 + * @retval None + */ +void ISO7816_Init(ISO7816_Type *ISO7816x, ISO7816_InitType *Init_Struct) +{ + uint32_t tmp; + uint16_t div; + uint32_t pclk; + + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_FIRSTBIT(Init_Struct->FirstBit)); + assert_parameters(IS_ISO7816_PARITY(Init_Struct->Parity)); + assert_parameters(IS_ISO7816_BAUDRATE(Init_Struct->Baudrate)); + assert_parameters(IS_ISO7816_TXRTY(Init_Struct->TXRetry)); + assert_parameters(IS_ISO7816_RXACKLEN(Init_Struct->RXACKLength)); + assert_parameters(IS_ISO7816_TXNACKLEN(Init_Struct->TXNACKLength)); + + tmp = ISO7816x->CFG; + tmp &= ~(ISO7816_CFG_ACKLEN\ + |ISO7816_CFG_AUTORXACK\ + |ISO7816_CFG_LSB\ + |ISO7816_CFG_CHKP\ + |ISO7816_CFG_RXACKSET\ + |ISO7816_CFG_TXRTYCNT); + tmp |= (Init_Struct->FirstBit\ + |Init_Struct->Parity\ + |Init_Struct->TXRetry\ + |Init_Struct->RXACKLength\ + |Init_Struct->TXNACKLength); + ISO7816x->CFG = tmp; + + pclk = CLK_GetPCLKFreq(); + div = 0x10000 - (pclk/Init_Struct->Baudrate); + ISO7816x->BAUDDIVH = (div>>8) & ISO7816_BAUDDIVH_BAUDDIVH; + ISO7816x->BAUDDIVL = div & ISO7816_BAUDDIVL_BAUDDIVL; +} + +/** + * @brief Enables or disables ISO7816. + * @param ISO7816x: ISO78160~ISO78161 + NewState: + ENABLE + DISABLE + * @retval None. + */ +void ISO7816_Cmd(ISO7816_Type *ISO7816x, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + ISO7816x->CFG |= ISO7816_CFG_EN; + } + else + { + ISO7816x->CFG &= ~ISO7816_CFG_EN; + } +} + +/** + * @brief Configures ISO7816 baudrate. + * @param ISO7816x: ISO78160~ISO78161 + BaudRate:Baud rate value + * @retval None + */ +void ISO7816_BaudrateConfig(ISO7816_Type *ISO7816x, uint32_t BaudRate) +{ + uint32_t pclk; + uint16_t div; + + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_BAUDRATE(BaudRate)); + + pclk = CLK_GetPCLKFreq(); + div = 0x10000 - (pclk/BaudRate); + ISO7816x->BAUDDIVH = (div>>8) & ISO7816_BAUDDIVH_BAUDDIVH; + ISO7816x->BAUDDIVL = div & ISO7816_BAUDDIVL_BAUDDIVL; +} + +/** + * @brief Configures ISO7816 clock divider. + * @param ISO7816x: ISO78160~ISO78161 + Prescaler:1~128 + * @retval None + */ +void ISO7816_CLKDIVConfig(ISO7816_Type *ISO7816x, uint32_t Prescaler) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_PRESCALER(Prescaler)); + + tmp = ISO7816x->CLK; + tmp &= ~ISO7816_CLK_CLKDIV; + tmp |= ((Prescaler - 1)&ISO7816_CLK_CLKDIV); + ISO7816x->CLK = tmp; +} + +/** + * @brief Enables or disables ISO7816 clock output function. + * @param ISO7816x: ISO78160~ISO78161 + NewState: + ENABLE + DISABLE + * @retval None + */ +void ISO7816_CLKOutputCmd(ISO7816_Type *ISO7816x, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState != DISABLE) + { + ISO7816x->CLK |= ISO7816_CLK_CLKEN; + } + else + { + ISO7816x->CLK &= ~ISO7816_CLK_CLKEN; + } +} + +/** + * @brief Reads ISO7816 data. + * @param ISO7816: ISO78160~ISO78161 + * @retval The received data. + */ +uint8_t ISO7816_ReceiveData(ISO7816_Type *ISO7816x) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + + return ISO7816x->DATA; +} + +/** + * @brief Writes ISO7816 data. + * @param ISO7816x: ISO78160~ISO78161 + * ch: data to send + * @retval None + */ +void ISO7816_SendData(ISO7816_Type *ISO7816x, uint8_t ch) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + + ISO7816x->DATA = ch; +} + +/** + * @brief ENables or disables ISO7816 interrupt. + * @param ISO7816x: ISO78160~ISO78161 + INTMask: + This parameter can be any combination of the following values + ISO7816_INT_TXRTYERR + ISO7816_INT_RXOV + ISO7816_INT_RX + ISO7816_INT_TXDONE + ISO7816_INT_RXERR + NewState: + ENABLE + DISABLE + * @retval None + */ +void ISO7816_INTConfig(ISO7816_Type *ISO7816x, uint32_t INTMask, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + ISO7816x->CFG |= INTMask; + } + else + { + ISO7816x->CFG &= ~INTMask; + } +} + +/** + * @brief Gets ISO7816 interrupt state. + * @param ISO7816x: ISO78160~ISO78161 + INTMask: + ISO7816_INTSTS_TXRTYERR + ISO7816_INTSTS_TXDONE + ISO7816_INTSTS_RXOV + ISO7816_INTSTS_RX + ISO7816_INTSTS_RXERR + * @retval 1: state set + 0: state reset + */ +uint8_t ISO7816_GetINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_INTFLAGR(INTMask)); + + if (ISO7816x->INFO & INTMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears ISO7816 interrupt state. + * @param ISO7816x: ISO78160~ISO78161 + INTMask: + This parameter can be any combination of the following values + ISO7816_INTSTS_TXRTYERR + ISO7816_INTSTS_TXDONE + ISO7816_INTSTS_RXOV + ISO7816_INTSTS_RX + ISO7816_INTSTS_RXERR + * @retval None + */ +void ISO7816_ClearINTStatus(ISO7816_Type *ISO7816x, uint32_t INTMask) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_INTFLAGC(INTMask)); + + tmp = ISO7816x->INFO; + tmp &= ~ISO7816_INFO_RC_MASK; + tmp |= INTMask; + ISO7816x->INFO = tmp; +} + +/** + * @brief Gets ISO7816 peripheral flag. + * @param ISO7816x: ISO78160~ISO78161 + FlagMask: + ISO7816_FLAG_DMATXDONE + * @retval 1: state set + 0: state reset + */ +uint8_t ISO7816_GetFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_FLAGR(FlagMask)); + + if (ISO7816x->INFO & FlagMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears ISO7816 peripheral flag. + * @param ISO7816x: ISO78160~ISO78161 + FlagMask: + ISO7816_FLAG_DMATXDONE + * @retval None + */ +void ISO7816_ClearFlag(ISO7816_Type *ISO7816x, uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + assert_parameters(IS_ISO7816_FLAGC(FlagMask)); + + ISO7816x->INFO |= FlagMask; +} + +/** + * @brief Gets last transmited ACK. + * @param ISO7816: ISO78160~ISO78161 + * @retval ACK value + */ +uint8_t ISO7816_GetLastTransmitACK(ISO7816_Type *ISO7816x) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + + if (ISO7816x->INFO&ISO7816_INFO_RXACK) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Gets last received check sum bit. + * @param ISO7816: ISO78160~ISO78161 + * @retval CHKSUM bit value + */ +uint8_t ISO7816_GetLastReceiveCHKSUM(ISO7816_Type *ISO7816x) +{ + /* Check parameters */ + assert_parameters(IS_ISO7816_ALL_INSTANCE(ISO7816x)); + + if (ISO7816x->INFO&ISO7816_INFO_CHKSUM) + { + return 1; + } + else + { + return 0; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_lcd.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_lcd.c new file mode 100644 index 0000000000..ad16d7ce7e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_lcd.c @@ -0,0 +1,255 @@ +/** + ****************************************************************************** + * @file lib_lcd.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief LCD library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_lcd.h" +#include "lib_LoadNVR.h" + +//registers default reset values +#define LCD_CTRL_RSTValue 0 +#define LCD_CTRL2_RSTValue 0 +#define LCD_SEGCTRL0_RSTValue 0 +#define LCD_SEGCTRL1_RSTValue 0 +#define LCD_SEGCTRL2_RSTValue 0 + +/* COMx IO */ +const LCD_COMIO lcd_comio[] = +{ + {&GPIOD->OEN, GPIO_Pin_0}, + {&GPIOD->OEN, GPIO_Pin_1}, + {&GPIOD->OEN, GPIO_Pin_2}, + {&GPIOD->OEN, GPIO_Pin_3}, + {&GPIOD->OEN, GPIO_Pin_4}, + {&GPIOD->OEN, GPIO_Pin_5}, + {&GPIOD->OEN, GPIO_Pin_6}, + {&GPIOD->OEN, GPIO_Pin_7}, +}; + +/** + * @brief Initializes LCD. + * @param InitStruct: LCD configuration. + Type: + LCD_TYPE_4COM + LCD_TYPE_6COM + LCD_TYPE_8COM + Drv: + LCD_DRV_300 + LCD_DRV_600 + LCD_DRV_150 + LCD_DRV_200 + FRQ: + LCD_FRQ_64H + LCD_FRQ_128H + LCD_FRQ_256H + LCD_FRQ_512H + SWPR: Frame buffer switch period(0.5 sec * (SWPR + 1)). + FBMODE: + LCD_FBMODE_BUFA + LCD_FBMODE_BUFAB + LCD_FBMODE_BUFABLANK + BKFILL: + LCD_BKFILL_1 + LCD_BKFILL_0 + * @retval None + */ +void LCD_Init(LCD_InitType *InitStruct) +{ + uint32_t tmp_reg1, tmp_reg2; + + /* Check parameters */ + assert_parameters(IS_LCD_TYPE(InitStruct->Type)); + assert_parameters(IS_LCD_DRV(InitStruct->Drv)); + assert_parameters(IS_LCD_FRQ(InitStruct->FRQ)); + assert_parameters(IS_LCD_SWPR(InitStruct->SWPR)); + assert_parameters(IS_LCD_FBMODE(InitStruct->FBMODE)); + assert_parameters(IS_LCD_BKFILL(InitStruct->BKFILL)); + + tmp_reg1 = LCD->CTRL; + tmp_reg2 = LCD->CTRL2; + tmp_reg1 &= ~(LCD_CTRL_TYPE\ + |LCD_CTRL_DRV\ + |LCD_CTRL_FRQ); + tmp_reg1 |= (InitStruct->Type\ + |InitStruct->Drv\ + |InitStruct->FRQ); + tmp_reg2 &= ~(LCD_CTRL2_SWPR\ + |LCD_CTRL2_FBMODE\ + |LCD_CTRL2_BKFILL); + tmp_reg2 |= ((InitStruct->SWPR << 8)\ + |InitStruct->FBMODE\ + |InitStruct->BKFILL); + LCD->CTRL = tmp_reg1; + LCD->CTRL2 = tmp_reg2; +} + +/** + * @brief Fills each LCD_InitStruct member with its default value. + * @param LCD_InitStruct: pointer to an LCD_InitType structure which will be initialized. + * @retval None + */ +void LCD_StructInit(LCD_InitType *LCD_InitStruct) +{ + /*--------------- Reset LCD init structure parameters values ---------------*/ + /* Initialize the BKFILL member */ + LCD_InitStruct->BKFILL = LCD_BKFILL_0; + /* Initialize the Drv member */ + LCD_InitStruct->Drv = LCD_DRV_300; + /* Initialize the FBMODE member */ + LCD_InitStruct->FBMODE = LCD_FBMODE_BUFA; + /* Initialize the FRQ member */ + LCD_InitStruct->FRQ = LCD_FRQ_64H; + /* Initialize the SWPR member */ + LCD_InitStruct->SWPR = 0; + /* Initialize the Type member */ + LCD_InitStruct->Type = LCD_TYPE_4COM; +} + +/** + * @brief Initializes the LCD registers to their default reset values. + * @param None + * @retval None + */ +void LCD_DeInit(void) +{ + LCD->CTRL &= ~LCD_CTRL_EN; + + LCD->CTRL = LCD_CTRL_RSTValue; + LCD->CTRL2 = LCD_CTRL2_RSTValue; + LCD->SEGCTRL0 = LCD_SEGCTRL0_RSTValue; + LCD->SEGCTRL1 = LCD_SEGCTRL1_RSTValue; + LCD->SEGCTRL2 = LCD_SEGCTRL2_RSTValue; +} + +/** + * @brief Enables or disables LCD controller. + * @param IOInitType: LCD SEG and COM configuration. + SegCtrl0: + SegCtrl1: + 0~0xFFFFFFFF + SegCtrl2: + 0~0xFFFF + COMMode: + LCD_TYPE_4COM + LCD_TYPE_6COM + LCD_TYPE_8COM + NewState: + ENABLE + DISABLE + * @retval None + */ +void LCD_Cmd(LCD_IOInitType *IOInitType, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + assert_parameters(IS_LCD_TYPE(IOInitType->COMMode)); + + LCD->CTRL &= ~LCD_CTRL_TYPE; + LCD->CTRL |= IOInitType->COMMode; + + if (NewState == ENABLE) + { + /* Rising edge of LCD_CTRL_EN */ + LCD->CTRL &= ~LCD_CTRL_EN; + LCD->SEGCTRL0 = IOInitType->SegCtrl0; + LCD->SEGCTRL1 = IOInitType->SegCtrl1; + LCD->SEGCTRL2 = IOInitType->SegCtrl2; + + /* COMs' IO configuration : forbidden */ + *lcd_comio[0].GPIO |= lcd_comio[0].Pin; + *(lcd_comio[0].GPIO+1) &= ~lcd_comio[0].Pin; + *lcd_comio[1].GPIO |= lcd_comio[1].Pin; + *(lcd_comio[1].GPIO+1) &= ~lcd_comio[1].Pin; + *lcd_comio[2].GPIO |= lcd_comio[2].Pin; + *(lcd_comio[2].GPIO+1) &= ~lcd_comio[2].Pin; + *lcd_comio[3].GPIO |= lcd_comio[3].Pin; + *(lcd_comio[3].GPIO+1) &= ~lcd_comio[3].Pin; + if (IOInitType->COMMode == LCD_TYPE_6COM) + { + *lcd_comio[4].GPIO |= lcd_comio[4].Pin; + *(lcd_comio[4].GPIO+1) &= ~lcd_comio[4].Pin; + *lcd_comio[5].GPIO |= lcd_comio[5].Pin; + *(lcd_comio[5].GPIO+1) &= ~lcd_comio[5].Pin; + } + else if (IOInitType->COMMode == LCD_TYPE_8COM) + { + *lcd_comio[4].GPIO |= lcd_comio[4].Pin; + *(lcd_comio[4].GPIO+1) &= ~lcd_comio[4].Pin; + *lcd_comio[5].GPIO |= lcd_comio[5].Pin; + *(lcd_comio[5].GPIO+1) &= ~lcd_comio[5].Pin; + *lcd_comio[6].GPIO |= lcd_comio[6].Pin; + *(lcd_comio[6].GPIO+1) &= ~lcd_comio[6].Pin; + *lcd_comio[7].GPIO |= lcd_comio[7].Pin; + *(lcd_comio[7].GPIO+1) &= ~lcd_comio[7].Pin; + } + else + { + } + + /* Enable LCD */ + LCD->CTRL |= LCD_CTRL_EN; + } + else + { + /* Falling edge of LCD_CTRL_EN */ + LCD->CTRL |= LCD_CTRL_EN; + /* Disable LCD */ + LCD->CTRL &= ~LCD_CTRL_EN; + + LCD->SEGCTRL0 = IOInitType->SegCtrl0; + LCD->SEGCTRL1 = IOInitType->SegCtrl1; + LCD->SEGCTRL2 = IOInitType->SegCtrl2; + + /* COMs' IO configuration : ouput low */ + *(lcd_comio[0].GPIO+2) &= ~lcd_comio[0].Pin; + *lcd_comio[0].GPIO &= ~lcd_comio[0].Pin; + *(lcd_comio[1].GPIO+2) &= ~lcd_comio[1].Pin; + *lcd_comio[1].GPIO &= ~lcd_comio[1].Pin; + *(lcd_comio[2].GPIO+2) &= ~lcd_comio[2].Pin; + *lcd_comio[2].GPIO &= ~lcd_comio[2].Pin; + *(lcd_comio[3].GPIO+2) &= ~lcd_comio[3].Pin; + *lcd_comio[3].GPIO &= ~lcd_comio[3].Pin; + if (IOInitType->COMMode & 2UL) + { + *(lcd_comio[4].GPIO+2) &= ~lcd_comio[4].Pin; + *lcd_comio[4].GPIO &= ~lcd_comio[4].Pin; + *(lcd_comio[5].GPIO+2) &= ~lcd_comio[5].Pin; + *lcd_comio[5].GPIO &= ~lcd_comio[5].Pin; + } + if (IOInitType->COMMode & 4UL) + { + *(lcd_comio[6].GPIO+2) &= ~lcd_comio[6].Pin; + *lcd_comio[6].GPIO &= ~lcd_comio[6].Pin; + *(lcd_comio[7].GPIO+2) &= ~lcd_comio[7].Pin; + *lcd_comio[7].GPIO &= ~lcd_comio[7].Pin; + } + } +} + +/** + * @brief Configures LCD BIAS mode. + * @param BiasSelection: + LCD_BMODE_DIV3 + LCD_BMODE_DIV4 + * @retval None + */ +void LCD_BiasModeConfig(uint32_t BiasSelection) +{ + uint32_t tmp; + + assert_parameters(IS_LCD_BMODE(BiasSelection)); + + tmp = ANA->REG6; + tmp &= ~ANA_REG6_LCDBMODE; + tmp |= BiasSelection; + ANA->REG6 = tmp; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_misc.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_misc.c new file mode 100644 index 0000000000..44d29fc26b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_misc.c @@ -0,0 +1,255 @@ +/** + ****************************************************************************** + * @file lib_misc.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief MISC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_misc.h" + +/** + * @brief Gets MISC flag status. + * @param FlagMask: + MISC_FLAG_LOCKUP + MISC_FLAG_PIAC + MISC_FLAG_HIAC + MISC_FLAG_PERR + * @retval Flag status. + */ +uint8_t MISC_GetFlag(uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_MISC_FLAGR(FlagMask)); + + if (MISC1->SRAMINT&FlagMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears MISC flag status. + * @param FlagMask: can use the '|' operator + MISC_FLAG_LOCKUP + MISC_FLAG_PIAC + MISC_FLAG_HIAC + MISC_FLAG_PERR + * @retval None + */ +void MISC_ClearFlag(uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_MISC_FLAGC(FlagMask)); + + MISC1->SRAMINT = FlagMask; +} + +/** + * @brief Enables or disables MISC interrupt. + * @param INTMask: can use the '|' operator + MISC_INT_LOCK + MISC_INT_PIAC + MISC_INT_HIAC + MISC_INT_PERR + NewState: + ENABLE + DISABLE + * @retval None + */ +void MISC_INTConfig(uint32_t INTMask, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_MISC_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = MISC1->SRAMINIT; + if (NewState == ENABLE) + { + tmp |= INTMask; + } + else + { + tmp &= ~INTMask; + } + MISC1->SRAMINIT = tmp; +} + +/** + * @brief Enables or disables SRAM parity. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void MISC_SRAMParityCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + MISC1->SRAMINIT |= MISC1_SRAMINIT_PEN; + } + else + { + MISC1->SRAMINIT &= ~MISC1_SRAMINIT_PEN; + } +} + +/** + * @brief Gets SRAM parity error address. + * @param None + * @retval parity error address. + */ +uint32_t MISC_GetSRAMPEAddr(void) +{ + uint32_t tmp; + + tmp = MISC1->PARERR; + tmp = tmp*4 + 0x20000000; + return tmp; +} + +/** + * @brief Gets APB error address. + * @param None + * @retval APB error address. + */ +uint32_t MISC_GetAPBErrAddr(void) +{ + uint32_t tmp; + + tmp = MISC1->PIADDR; + tmp = tmp + 0x40000000; + return tmp; +} + +/** + * @brief Gets AHB error address. + * @param None + * @retval AHB error address. + */ +uint32_t MISC_GetAHBErrAddr(void) +{ + return (MISC1->HIADDR); +} + +/** + * @brief Enables or disables UART transmit IR function. + * @param IRx: + MISC_IREN_TX0 + MISC_IREN_TX1 + MISC_IREN_TX2 + MISC_IREN_TX3 + MISC_IREN_TX4 + MISC_IREN_TX5 + NewState: + ENABLE + DISABLE + * @retval None + */ +void MISC_IRCmd(uint32_t IRx, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + assert_parameters(IS_MISC_IREN(IRx)); + + tmp = MISC1->IREN; + if (NewState == ENABLE) + { + tmp |= IRx; + } + else + { + tmp &= ~IRx; + } + MISC1->IREN = tmp; +} + +/** + * @brief Configures SUART transmit IR duty. + * @param DutyHigh + The high pulse width will be (DUTYH + 1)*APBCLK period. + DutyLow + The low pulse width will be (DUTYL + 1)*APBCLK period. + * @retval None + */ +void MISC_IRDutyConfig(uint16_t DutyHigh, uint16_t DutyLow) +{ + MISC1->DUTYH = DutyHigh; + MISC1->DUTYL = DutyLow; +} + +/** + * @brief Enables or disables Hardfault generation. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void MISC_HardFaultCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + MISC1->IRQLAT &= ~MISC1_IRQLAT_NOHARDFAULT; + } + else + { + MISC1->IRQLAT |= MISC1_IRQLAT_NOHARDFAULT; + } +} + +/** + * @brief Enables or disables a system reset when the CM0 lockup happened. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void MISC_LockResetCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + MISC1->IRQLAT |= MISC1_IRQLAT_LOCKRESET; + } + else + { + MISC1->IRQLAT &= ~MISC1_IRQLAT_LOCKRESET; + } +} + +/** + * @brief Configures IRQ latency. + * @param Latency:0~255 + * @retval None + */ +void MISC_IRQLATConfig(uint8_t Latency) +{ + uint32_t tmp; + + tmp = MISC1->IRQLAT; + tmp &= ~MISC1_IRQLAT_IRQLAT; + tmp |= Latency; + MISC1->IRQLAT = tmp; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pmu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pmu.c new file mode 100644 index 0000000000..0f766a41c5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pmu.c @@ -0,0 +1,1214 @@ +/** + ****************************************************************************** + * @file lib_pmu.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief PMU library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_pmu.h" +#include "lib_gpio.h" +#include "lib_CodeRAM.h" +#include "lib_clk.h" +#include "lib_cortex.h" + +#define DSLEEPPASS_KEY 0xAA5555AA +#define DSLEEPEN_KEY 0x55AAAA55 + +/** + * @brief Enters deep-sleep mode. + * @param None + * @retval 1: Current mode is debug mode, function failed. + * 2: Enter deep-sleep mode failed. + */ +uint32_t PMU_EnterDSleepMode(void) +{ + uint32_t hclk; + + /* Current MODE is 0, debug mode, return error */ + if (!(PMU->STS & PMU_STS_MODE)) + return 1; + + /* Enter deep sleep when WKU event is cleared */ + while (PMU->DSLEEPEN & PMU_DSLEEPEN_WKU) + { + } + + /* Flash 1USCYCLE configure */ + hclk = CLK_GetHCLKFreq(); + if(hclk > 1000000) + { + MISC2->FLASHWC = (hclk/1000000)<<8; + } + else + { + MISC2->FLASHWC = 0<<8; + } + + PMU->DSLEEPPASS = DSLEEPPASS_KEY; + PMU->DSLEEPEN = DSLEEPEN_KEY; + + return 2; +} + +/** + * @brief Enters idle mode. + * @note Any interrupt generates to CPU will break idle mode. + * @param None + * @retval None + */ +void PMU_EnterIdleMode(void) +{ + /* Clear SLEEPDEEP bit of Cortex-M0 System Control Register */ + SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk); + + __WFI(); +} + +/** + * @brief Enters sleep mode. + * @param None + * @retval 1: Current mode is debug mode, function failed. + * 0: Quit sleep mode succeeded. + */ +uint32_t PMU_EnterSleepMode(void) +{ + uint32_t hclk; + + /* Current MODE is 0, debug mode, return error */ + if (!(PMU->STS & PMU_STS_MODE)) + return 1; + + /* Flash 1USCYCLE configure */ + hclk = CLK_GetHCLKFreq(); + if(hclk > 1000000) + { + MISC2->FLASHWC = (hclk/1000000)<<8; + } + else + { + MISC2->FLASHWC = 0<<8; + } + + /* Set SLEEPDEEP bit of Cortex-M0 System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + __WFI(); + + return 0; +} + +/** + * @brief Enables or disables PMU interrupt. + * @param INTMask: can use the | operator + PMU_INT_IOAEN + PMU_INT_32K + PMU_INT_6M + NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_INTConfig(uint32_t INTMask, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_PMU_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + PMU->CONTROL |= INTMask; + } + else + { + PMU->CONTROL &= ~INTMask; + } +} + +/** + * @brief Gets PMU interrupt status. + * @param INTMask: + PMU_INTSTS_32K + PMU_INTSTS_6M + * @retval 1:status set + 0:status reset + */ +uint8_t PMU_GetINTStatus(uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_PMU_INTFLAGR(INTMask)); + + if (PMU->STS&INTMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears PMU interrupt status. + * @param INTMask:specifies the flag to clear. + This parameter can be any combination of the following values + PMU_INTSTS_32K + PMU_INTSTS_6M + * @retval None + */ +void PMU_ClearINTStatus(uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_PMU_INTFLAGC(INTMask)); + + PMU->STS = INTMask; +} + +/** + * @brief Gets Crystal status. + * @param Mask: + PMU_STS_32K + PMU_STS_6M + * @retval 1:status set + 0:status reset + */ +uint8_t PMU_GetCrystalStatus(uint32_t Mask) +{ + /* Check parameters */ + assert_parameters(IS_PMU_FLAG(Mask)); + + if (PMU->STS&Mask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Gest all IOA interrupt status. + * @param None + * @retval IOA's interrupt status + */ +uint16_t PMU_GetIOAAllINTStatus(void) +{ + return (GPIOA->IOAINTSTS); +} + +/** + * @brief Gest IOA interrupt status. + * @param INTMask: + GPIO_Pin_0 ~ GPIO_Pin_15 + * @retval 1:status set + 0:status reset + */ +uint8_t PMU_GetIOAINTStatus(uint16_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PINR(INTMask)); + + if (GPIOA->IOAINTSTS & INTMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears IOA interrupt status. + * @param INTMask: + This parameter can be any combination of the following values + GPIO_Pin_0 ~ GPIO_Pin_15 + * @retval None + */ +void PMU_ClearIOAINTStatus(uint16_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PIN(INTMask)); + + GPIOA->IOAINTSTS = INTMask; +} + +/** + * @brief Configures Wake-up pin functions. + * @param IOAx: GPIO_Pin_0 ~ GPIO_Pin_15 + Wakeup_Event: + IOA_DISABLE + IOA_RISING + IOA_FALLING + IOA_HIGH + IOA_LOW + IOA_EDGEBOTH + * @retval None + */ +void PMU_WakeUpPinConfig(uint32_t IOAx, uint32_t Wakeup_Event) +{ + uint32_t tmp; + uint32_t position = 0x00U; + uint32_t iocurrent = 0x00U; + + /* Check parameters */ + assert_parameters(IS_GPIO_PINR(IOAx)); + assert_parameters(IS_PMU_WAKEUP(Wakeup_Event)); + + while ((IOAx >> position) != 0U) + { + /* Get current io position */ + iocurrent = IOAx & (0x01U << position); + + if (iocurrent) + { + /* Current IO Input configure*/ + GPIOA->OEN |= iocurrent; + GPIOA->IE |= iocurrent; + + tmp = GPIOA->IOAWKUEN; + tmp &= ~(3U << (2 * position)); + switch (Wakeup_Event) + { + /* Disable wake-up function */ + default: + case IOA_DISABLE: + break; + + /* wake-up function: Rising */ + case IOA_RISING: + GPIOA->DAT &= ~iocurrent; + tmp |= 1 << (2 * position); + break; + + /* wake-up function: falling */ + case IOA_FALLING: + GPIOA->DAT |= iocurrent; + tmp |= 1 << (2 * position); + break; + + /* wake-up function: high level */ + case IOA_HIGH: + GPIOA->DAT &= ~iocurrent; + tmp |= 2 << (2 * position); + break; + + /* wake-up function: low level */ + case IOA_LOW: + GPIOA->DAT |= iocurrent; + tmp |= 2 << (2 * position); + break; + + /* wake-up function: both edge */ + case IOA_EDGEBOTH: + tmp |= 3 << (2 * position); + break; + } + GPIOA->IOAWKUEN = tmp; + } + position++; + } +} + +/** + * @brief Enters deep-sleep mode with low-power configuration. + * + * @param InitStruct : pointer to PMU_LowPWRTypeDef + CMP1Power: + PMU_COMP1PWR_ON + PMU_COMP1PWR_OFF + CMP2Power: + PMU_COMP2PWR_ON + PMU_COMP2PWR_OFF + TADCPower: + PMU_TADCPWR_ON + PMU_TADCPWR_OFF + BGPPower: + PMU_BGPPWR_ON + PMU_BGPPWR_OFF + AVCCPower: + PMU_AVCCPWR_ON + PMU_AVCCPWR_OFF + VDCINDetector: + PMU_VDCINDET_ENABLE + PMU_VDCINDET_DISABLE + VDDDetector: + PMU_VDDDET_ENABLE + PMU_VDDDET_DISABLE + APBPeriphralDisable: + PMU_APB_ALL + PMU_APB_DMA + PMU_APB_I2C + PMU_APB_SPI1 + PMU_APB_UART0 + PMU_APB_UART1 + PMU_APB_UART2 + PMU_APB_UART3 + PMU_APB_UART4 + PMU_APB_UART5 + PMU_APB_ISO78160 + PMU_APB_ISO78161 + PMU_APB_TIMER + PMU_APB_MISC + PMU_APB_U32K0 + PMU_APB_U32K1 + PMU_APB_SPI2 + PMU_APB_SPI3 + AHBPeriphralDisable: + PMU_AHB_ALL + PMU_AHB_DMA + PMU_AHB_GPIO + PMU_AHB_LCD + PMU_AHB_CRYPT + + * @note This function performs the following: + Comparator 1 power control ON or OFF(optional) + Comparator 2 power control ON or OFF(optional) + Tiny ADC power control ON or OFF(optional) + Bandgap power control ON or OFF(optional) + AVCC power control ON or OFF(optional) + VDCIN detector control Disable or Enable(optional) + VDD detector control Disable or Enable(optional) + Disable AHB/APB periphral clock Modules(optional) + Disable AVCC output + Disable ADC + Disable resistance division for ADC input signal + Enable LCD + + If 5V power supply, AVCCPower should be ON, if 3.3V power supply, AVCCPower should be OFF. + + * @retval 1: Current MODE is debug mode, enter deep-sleep mode failed. + 2: VDCIN is not drop before enter deep-sleep mode or Failure to enter deep sleep mode. + + */ +uint8_t PMU_EnterDSleep_LowPower(PMU_LowPWRTypeDef *InitStruct) +{ + uint32_t tmp; + uint32_t hclk; + + /* Check parameters */ + assert_parameters(IS_PMU_COMP1PWR(InitStruct->CMP1Power)); + assert_parameters(IS_PMU_COMP2PWR(InitStruct->CMP2Power)); + assert_parameters(IS_PMU_TADCPWR(InitStruct->TADCPower)); + assert_parameters(IS_PMU_BGPPWR(InitStruct->BGPPower)); + assert_parameters(IS_PMU_AVCCPWR(InitStruct->AVCCPower)); + assert_parameters(IS_PMU_VDCINDET(InitStruct->VDCINDetector)); + assert_parameters(IS_PMU_VDDDET(InitStruct->VDDDetector)); + + /* Current MODE is 0, debug mode, return error */ + if (!(PMU->STS & PMU_STS_MODE)) + return 1; + + /* Disable AVCC output */ + ANA->REGF &= ~ANA_REGF_AVCCOEN; + + /* Disable ADC */ + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + + /* Disable resistor division for ADC input signal */ + ANA->ADCCTRL1 &= ~ANA_ADCCTRL1_RESDIV_CHx; + + /******** Comparator 1 power control ********/ + ANA->REG3 &= ~ANA_REG3_CMP1PDN; + ANA->REG3 |= InitStruct->CMP1Power; + + /******** Comparator 2 power control ********/ + ANA->REG3 &= ~ANA_REG3_CMP2PDN; + ANA->REG3 |= InitStruct->CMP2Power; + + /******** Tiny ADC power control ********/ + tmp = ANA->REGF; + tmp &= ~ANA_REGF_ADTPDN; + tmp |= InitStruct->TADCPower; + ANA->REGF = tmp; + + /******** BGP power control ********/ + ANA->REG3 &= ~ANA_REG3_BGPPD; + ANA->REG3 |= InitStruct->BGPPower; + + /******** AVCC power control ********/ + tmp = ANA->REG8; + tmp &= ~ANA_REG8_AVCCLDOPD; + tmp |= InitStruct->AVCCPower; + ANA->REG8 = tmp; + + /******** LCD controller power control ********/ + /* LCD should be ENABLE */ + tmp = LCD->CTRL; + tmp |= LCD_CTRL_EN; + LCD->CTRL = tmp; + + tmp = ANA->REG7; + tmp |= BIT7; + ANA->REG7 = tmp; + + /******** VDCIN detector control ********/ + tmp = ANA->REGA; + tmp &= ~ANA_REGA_VDCINDETPD; + tmp |= InitStruct->VDCINDetector; + ANA->REGA = tmp; + + /******** VDD detector control *********/ + tmp = ANA->REG9; + tmp &= ~ANA_REG9_VDDDETPD; + tmp |= InitStruct->VDDDetector; + ANA->REG9 = tmp; + + /******** AHB Periphral clock disable selection ********/ + tmp = MISC2->HCLKEN; + tmp &= ~((InitStruct->AHBPeriphralDisable) & PMU_AHB_ALL); + MISC2->HCLKEN = tmp; + + /******** APB Periphral clock disable selection ********/ + tmp = MISC2->PCLKEN; + tmp &= ~((InitStruct->APBPeriphralDisable) & PMU_APB_ALL); + MISC2->PCLKEN = tmp; + + if ((InitStruct->VDCINDetector) != PMU_VDCINDET_DISABLE) + { + if (!(ANA->CMPOUT & ANA_CMPOUT_VDCINDROP)) + { + return 2; + } + } + // make sure WKU is 0 before entering deep-sleep mode + while (PMU->DSLEEPEN & PMU_DSLEEPEN_WKU); + + /* Flash 1USCYCLE configure */ + hclk = CLK_GetHCLKFreq(); + if(hclk > 1000000) + { + MISC2->FLASHWC = (hclk/1000000)<<8; + } + else + { + MISC2->FLASHWC = 0<<8; + } + + /* Enter deep-sleep mode */ + PMU->DSLEEPPASS = DSLEEPPASS_KEY; + PMU->DSLEEPEN = DSLEEPEN_KEY; + + return 2; +} + +/** + * @brief Enters sleep mode with low-power configuration. + * + * @param InitStruct : pointer to PMU_LowPWRTypeDef + CMP1Power: + PMU_COMP1PWR_ON + PMU_COMP1PWR_OFF + CMP2Power: + PMU_COMP2PWR_ON + PMU_COMP2PWR_OFF + TADCPower: + PMU_TADCPWR_ON + PMU_TADCPWR_OFF + BGPPower: + PMU_BGPPWR_ON + PMU_BGPPWR_OFF + AVCCPower: + PMU_AVCCPWR_ON + PMU_AVCCPWR_OFF + VDCINDetector: + PMU_VDCINDET_ENABLE + PMU_VDCINDET_DISABLE + VDDDetector: + PMU_VDDDET_ENABLE + PMU_VDDDET_DISABLE + APBPeriphralDisable: + PMU_APB_ALL + PMU_APB_DMA + PMU_APB_I2C + PMU_APB_SPI1 + PMU_APB_SPI2 + PMU_APB_UART0 + PMU_APB_UART1 + PMU_APB_UART2 + PMU_APB_UART3 + PMU_APB_UART4 + PMU_APB_UART5 + PMU_APB_ISO78160 + PMU_APB_ISO78161 + PMU_APB_TIMER + PMU_APB_MISC + PMU_APB_U32K0 + PMU_APB_U32K1 + PMU_APB_SPI3 + AHBPeriphralDisable: + PMU_AHB_ALL + PMU_AHB_DMA + PMU_AHB_GPIO + PMU_AHB_LCD + PMU_AHB_CRYPT + + * @note This function performs the following: + Comparator 1 power control ON or OFF(optional) + Comparator 2 power control ON or OFF(optional) + Tiny ADC power control ON or OFF(optional) + Bandgap power control ON or OFF(optional) + AVCC power control ON or OFF(optional) + VDCIN detector control Disable or Enable(optional) + VDD detector control Disable or Enable(optional) + Disable AHB/APB periphral clock Modules(optional) + Disable AVCC output + Disable ADC + Disable resistance division for ADC input signal + Enable LCD + + If 5V power supply, AVCCPower should be ON, if 3.3V power supply, AVCCPower should be OFF. + + * @retval 2: VDCIN is not drop before enter sleep mode(failed). + 1: Current mode is debug mode, enter sleep mode failed. + 0: Quit from sleep mode success. +*/ +uint8_t PMU_EnterSleep_LowPower(PMU_LowPWRTypeDef *InitStruct) +{ + uint32_t tmp; + uint32_t hclk; + + /* Check parameters */ + assert_parameters(IS_PMU_COMP1PWR(InitStruct->CMP1Power)); + assert_parameters(IS_PMU_COMP2PWR(InitStruct->CMP2Power)); + assert_parameters(IS_PMU_TADCPWR(InitStruct->TADCPower)); + assert_parameters(IS_PMU_BGPPWR(InitStruct->BGPPower)); + assert_parameters(IS_PMU_AVCCPWR(InitStruct->AVCCPower)); + assert_parameters(IS_PMU_VDCINDET(InitStruct->VDCINDetector)); + assert_parameters(IS_PMU_VDDDET(InitStruct->VDDDetector)); + + /* Current MODE is 0, debug mode, return error */ + if (!(PMU->STS & PMU_STS_MODE)) + return 1; + + /* Disable AVCC output */ + ANA->REGF &= ~ANA_REGF_AVCCOEN; + + /* Disable ADC */ + ANA->ADCCTRL2 &= ~ANA_ADCCTRL2_ADC_EN; + + /* Disable resistor division for ADC input signal */ + ANA->ADCCTRL1 &= ~ANA_ADCCTRL1_RESDIV_CHx ; + + /******** Comparator 1 power control ********/ + ANA->REG3 &= ~ANA_REG3_CMP1PDN; + ANA->REG3 |= InitStruct->CMP1Power; + + /******** Comparator 2 power control ********/ + ANA->REG3 &= ~ANA_REG3_CMP2PDN; + ANA->REG3 |= InitStruct->CMP2Power; + + /******** Tiny ADC power control ********/ + tmp = ANA->REGF; + tmp &= ~ANA_REGF_ADTPDN; + tmp |= InitStruct->TADCPower; + ANA->REGF = tmp; + + /******** BGP power control ********/ + ANA->REG3 &= ~ANA_REG3_BGPPD; + ANA->REG3 |= InitStruct->BGPPower; + + /******** AVCC power control ********/ + tmp = ANA->REG8; + tmp &= ~ANA_REG8_AVCCLDOPD; + tmp |= InitStruct->AVCCPower; + ANA->REG8 = tmp; + + /******** LCD controller power control ********/ + /* LCD should be ENABLE */ + tmp = LCD->CTRL; + tmp |= LCD_CTRL_EN; + LCD->CTRL = tmp; + + tmp = ANA->REG7; + tmp |= BIT7; + ANA->REG7 = tmp; + + /******** VDCIN detector control ********/ + tmp = ANA->REGA; + tmp &= ~ANA_REGA_VDCINDETPD; + tmp |= InitStruct->VDCINDetector; + ANA->REGA = tmp; + + /******** VDD detector control *********/ + tmp = ANA->REG9; + tmp &= ~ANA_REG9_VDDDETPD; + tmp |= InitStruct->VDDDetector; + ANA->REG9 = tmp; + + /******** AHB Periphral clock disable selection ********/ + tmp = MISC2->HCLKEN; + tmp &= ~((InitStruct->AHBPeriphralDisable) & PMU_AHB_ALL); + MISC2->HCLKEN = tmp; + + /******** APB Periphral clock disable selection ********/ + tmp = MISC2->PCLKEN; + tmp &= ~((InitStruct->APBPeriphralDisable) & PMU_APB_ALL); + MISC2->PCLKEN = tmp; + + if ((InitStruct->VDCINDetector) != PMU_VDCINDET_DISABLE) + { + if (!(ANA->CMPOUT & ANA_CMPOUT_VDCINDROP)) + { + return 2; + } + } + + /* Flash 1USCYCLE configure */ + hclk = CLK_GetHCLKFreq(); + if(hclk > 1000000) + { + MISC2->FLASHWC = (hclk/1000000)<<8; + } + else + { + MISC2->FLASHWC = 0<<8; + } + + /* Set SLEEPDEEP bit of Cortex-M0 System Control Register */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + __WFI(); + + return 0; +} + + +/** + * @brief Enter idle mode with flash deep standby. + * @param None + * @retval None + */ +#ifndef __GNUC__ +void PMU_EnterIdle_LowPower(void) +{ + uint32_t hclk; + + /* Flash 1USCYCLE configure */ + hclk = CLK_GetHCLKFreq(); + if(hclk > 1000000) + { + MISC2->FLASHWC = (hclk/1000000)<<8; + } + else + { + MISC2->FLASHWC = 0<<8; + } + + PMU_EnterIdle_FlashDSTB(); +} +#endif + +/** + * @brief Configures IOA wake-up source about sleep mode. + * @param IOAx: GPIO_Pin_0 ~ GPIO_Pin_15 + Wakeup_Event: + IOA_DISABLE + IOA_RISING + IOA_FALLING + IOA_HIGH + IOA_LOW + IOA_EDGEBOTH + Priority: The preemption priority for the IRQn channel. + This parameter can be a value between 0 and 3. + * @retval + */ +void PMU_SleepWKUSRCConfig_IOA(uint16_t IOAx, uint32_t Wakeup_Event, uint32_t Priority) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PINR(IOAx)); + assert_parameters(IS_PMU_WAKEUP(Wakeup_Event)); + + /* Disable PMU interrupt in NVIC */ + NVIC_DisableIRQ(PMU_IRQn); + /* Wake-up pins configuration */ + PMU_WakeUpPinConfig(IOAx, Wakeup_Event); + /* Clear interrupt flag */ + GPIOA->IOAINTSTS = IOAx; + /* Enable PMU interrupt */ + PMU->CONTROL |= PMU_CONTROL_INT_IOA_EN; + CORTEX_SetPriority_ClearPending_EnableIRQ(PMU_IRQn, Priority); +} + +/** + * @brief Configures RTC wake-up source about sleep mode. + * @param Wakeup_Event: + This parameter can be any combination of the following values + PMU_RTCEVT_ALARM + PMU_RTCEVT_WKUCNT + PMU_RTCEVT_MIDNIGHT + PMU_RTCEVT_WKUHOUR + PMU_RTCEVT_WKUMIN + PMU_RTCEVT_WKUSEC + PMU_RTCEVT_TIMEILLE + PMU_RTCEVT_ITVSITV + Priority: The preemption priority for the IRQn channel. + This parameter can be a value between 0 and 3. + * @retval + */ +void PMU_SleepWKUSRCConfig_RTC(uint32_t Wakeup_Event, uint32_t Priority) +{ + /* Check parameters */ + assert_parameters(IS_PMU_RTCEVT(Wakeup_Event)); + + /* Disable RTC interrupt in NVIC */ + NVIC_DisableIRQ(RTC_IRQn); + /* Clear interrupt flag */ + RTC->INTSTS = Wakeup_Event; + /* Enable RTC interrupt */ + RTC->INTEN |= Wakeup_Event; + CORTEX_SetPriority_ClearPending_EnableIRQ(RTC_IRQn, Priority); +} +/** + * @brief Configures IOA wake-up source about deep-sleep mode. + * @param IOAx: GPIO_Pin_0 ~ GPIO_Pin_15 + Wakeup_Event: + IOA_DISABLE + IOA_RISING + IOA_FALLING + IOA_HIGH + IOA_LOW + IOA_EDGEBOTH + * @retval + */ +void PMU_DeepSleepWKUSRCConfig_IOA(uint16_t IOAx, uint32_t Wakeup_Event) +{ + /* Check parameters */ + assert_parameters(IS_GPIO_PINR(IOAx)); + assert_parameters(IS_PMU_WAKEUP(Wakeup_Event)); + + /* Wake-up pins configuration */ + PMU_WakeUpPinConfig(IOAx, Wakeup_Event); + /* Clear interrupt flag */ + GPIOA->IOAINTSTS = IOAx; +} + +/** + * @brief Configures RTC wake-up source about deep-sleep mode. + * @param Wakeup_Event: + This parameter can be any combination of the following values + PMU_RTCEVT_ALARM + PMU_RTCEVT_WKUCNT + PMU_RTCEVT_MIDNIGHT + PMU_RTCEVT_WKUHOUR + PMU_RTCEVT_WKUMIN + PMU_RTCEVT_WKUSEC + PMU_RTCEVT_TIMEILLE + PMU_RTCEVT_ITVSITV + * @retval + */ +void PMU_DeepSleepWKUSRCConfig_RTC(uint32_t Wakeup_Event) +{ + /* Check parameters */ + assert_parameters(IS_PMU_RTCEVT(Wakeup_Event)); + + /* Clear interrupt flag */ + RTC->INTSTS = Wakeup_Event; + /* Enable RTC interrupt */ + RTC->INTEN |= Wakeup_Event; +} + +/** + * @brief Configures the deep sleep behavior when VDD/VDCIN is not drop. + * @param VDCIN_PDNS: + PMU_VDCINPDNS_0 , can't enter deep-sleep mode when VDCIN is not drop + can wake-up mcu from deep-sleep, when VDCIN is not drop. + PMU_VDCINPDNS_1 , The condition for entering deep sleep mode is independent of VDCIN. + VDD_PDNS: + PMU_VDDPDNS_0 , can't enter deep-sleep mode when VDD is not drop(>Threshold) + can wake-up mcu from deep-sleep, when VDD is not drop. + PMU_VDDPDNS_1 , The condition for entering deep sleep mode is independent of VDD. + * @retval None + */ +void PMU_PDNDSleepConfig(uint32_t VDCIN_PDNS, uint32_t VDD_PDNS) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PMU_VDCINPDNS(VDCIN_PDNS)); + assert_parameters(IS_PMU_VDDPDNS(VDD_PDNS)); + + tmp = ANA->CTRL; + tmp &= ~(ANA_CTRL_PDNS | ANA_CTRL_PDNS2); + tmp |= (VDCIN_PDNS | VDD_PDNS); + + ANA->CTRL = tmp; +} + +/** + * @brief Enables or disables BGP power. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_BGPCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + ANA->REG3 &= ~ANA_REG3_BGPPD; + else + ANA->REG3 |= ANA_REG3_BGPPD; +} + +/** + * @brief Configures VDD alarm threshold voltage. + * @param CheckTHR: + PMU_VDDALARM_4_5V + PMU_VDDALARM_4_2V + PMU_VDDALARM_3_9V + PMU_VDDALARM_3_6V + PMU_VDDALARM_3_2V + PMU_VDDALARM_2_9V + PMU_VDDALARM_2_6V + PMU_VDDALARM_2_3V + CheckFrequency: + PMU_VDDALARM_CHKFRE_NOCHECK + PMU_VDDALARM_CHKFRE_30US + * @retval None + */ +void PMU_VDDAlarmConfig(uint32_t CheckTHR,uint32_t CheckFrequency) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PMU_VDDALARM_THR(CheckTHR)); + assert_parameters(IS_PMU_VDDALARM_CHKFRE(CheckFrequency)); + + /* Configure CheckTHR */ + tmp = ANA->REG8; + tmp &= ~ANA_REG8_VDDPVDSEL; + tmp |= CheckTHR; + ANA->REG8 = tmp; + + /* Configure CheckFrequency */ + tmp = ANA->CMPCTL; + tmp &= ~ANA_CMPCTL_VDDALARM_CHK_FRQ_SEL; + tmp |= CheckFrequency; + ANA->CMPCTL = tmp; + + if (CheckFrequency == PMU_VDDALARM_CHKFRE_NOCHECK) + { + ANA->REG9 |= ANA_REG9_VDDDETPD; + } + else + { + ANA->REG9 &= ~ANA_REG9_VDDDETPD; + } +} + +/** + * @brief Gets VDD alarm status. + * @param None + * @retval POWALARM status + 0: Voltage of VDD is higher than threshold. + 1: Voltage of VDD is lower than threshold. + */ +uint8_t PMU_GetVDDAlarmStatus(void) +{ + if (ANA->CMPOUT & ANA_CMPOUT_VDDALARM) + return 1; + else + return 0; +} + +/** + * @brief Gets current MODE pin status. + * @param None + * @retval MODE pin status + * 0: Debug mode. + * 1: Normal mode. + */ +uint8_t PMU_GetModeStatus(void) +{ + if(PMU->STS & PMU_STS_MODE) + return 1; + else + return 0; +} + +/** + * @brief Enables or disables AVCC. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_AVCCCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + ANA->REG8 &= ~ANA_REG8_AVCCLDOPD; + else + ANA->REG8 |= ANA_REG8_AVCCLDOPD; +} + +/** + * @brief Enables or disables VDD33_O pin power. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_AVCCOutputCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == DISABLE) + ANA->REGF &= ~ANA_REGF_AVCCOEN; + else + ANA->REGF |= ANA_REGF_AVCCOEN; +} + +/** + * @brief Enables or disables AVCC Low Voltage detector. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_AVCCLVDetectorCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + ANA->REG5 &= ~ANA_REG5_AVCCLVDETPD; + else + ANA->REG5 |= ANA_REG5_AVCCLVDETPD; +} + +/** + * @brief Gets AVCC low power status. + * @param None + * @retval low power status of AVCC + * 0: status not set, AVCC is higher than 2.5V. + * 1: status set, AVCC is lower than 2.5V. + */ +uint8_t PMU_GetAVCCLVStatus(void) +{ + if (ANA->CMPOUT & ANA_CMPOUT_AVCCLV) + return 1; + else + return 0; +} + +/** + * @brief Enables or disables VDCIN decector. + * @param NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_VDCINDetectorCmd(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + ANA->REGA &= ~ANA_REGA_VDCINDETPD; + else + ANA->REGA |= ANA_REGA_VDCINDETPD; +} + +/** + * @brief Selects VDCIN hysteresis. + * @param HYSSEL: + PMU_VDCINHYSSEL_100MV + PMU_VDCINHYSSEL_200MV + * @retval None + */ +void PMU_VDCINHYSSEL(uint32_t HYSSEL) +{ + uint32_t tmp; + /* Check parameters */ + assert_parameters(IS_PMU_VDCIN_HYSSEL(HYSSEL)); + + tmp = ANA->REG7; + tmp &= ~ANA_REG7_VDCINHYSSEL; + tmp |= HYSSEL; + ANA->REG7 = tmp; + + +} + +/** + * @brief Gets VDCIN drop status. + * @param None + * @retval drop status of VDCIN + 0: status not set, VDCIN is not drop. + 1: status set, VDCIN is drop. + */ +uint8_t PMU_GetVDCINDropStatus(void) +{ + if (ANA->CMPOUT & ANA_CMPOUT_VDCINDROP) + return 1; + else + return 0; +} + +/** + * @brief Configures VDDALARM, VDCIN and AVCCDET de-bounce. + * @param DEBSel: + 0: No de-bounce. + 1: 2 RTCCLK de-bounce. + 2: 3 RTCCLK de-bounce. + 3: 4 RTCCLK de-bounce. + 4: 5 RTCCLK de-bounce. + ... + 255: 256 RTCCLK de-bounce. + * @retval None + */ +void PMU_PWRDEBSel(uint32_t DEBSel) +{ + uint32_t tmp; + /* Check parameters */ + assert_parameters(IS_PMU_PWR_DEBSEL(DEBSel)); + + tmp = ANA->CMPCTL; + tmp &= ~ANA_CMPCTL_PWR_DEB_SEL; + tmp |= (DEBSel << ANA_CMPCTL_PWR_DEB_SEL_Pos); + ANA->CMPCTL = tmp; +} + +/** + * @brief Discharges or not discharges the BAT battery. + * @param BATDisc: + PMU_BAT1 + PMU_BATRTC + NewState: + ENABLE + DISABLE + * @retval None + */ +void PMU_BATDischargeConfig(uint32_t BATDisc, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_PMU_BATRTCDISC(BATDisc)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + ANA->REG6 |= BATDisc; + else + ANA->REG6 &= ~BATDisc; +} + + +/** + * @brief Gets power status. + * @param StatusMask: + PMU_PWRSTS_AVCCLV + PMU_PWRSTS_VDCINDROP + PMU_PWRSTS_VDDALARM + * @retval power status + * 1 status set + * 0 status not set + */ +uint8_t PMU_GetPowerStatus(uint32_t StatusMask) +{ + if (ANA->CMPOUT & StatusMask) + return 1; + else + return 0; +} + +/** + * @brief Gets reset source status. + * @param Mask: + PMU_RSTSRC_EXTRST + PMU_RSTSRC_PORST + PMU_RSTSRC_DPORST + PMU_RSTSRC_WDTRST + PMU_RSTSRC_SFTRST + PMU_RSTSRC_MODERST + * @retval 1: Reset status set + 0: Reset status reset + */ +uint8_t PMU_GetResetSource(uint32_t Mask) +{ + /* Check parameters */ + assert_parameters(PMU_RESETSRC(Mask)); + + if (PMU->STS & Mask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears reset source status. + * @param Mask: can use the '|' operator + PMU_RSTSRC_EXTRST + PMU_RSTSRC_PORST + PMU_RSTSRC_DPORST + PMU_RSTSRC_WDTRST + PMU_RSTSRC_SFTRST + PMU_RSTSRC_MODERST + PMU_RSTSRC_ALL + * @retval None + */ +void PMU_ClearResetSource(uint32_t Mask) +{ + /* Check parameters */ + assert_parameters(PMU_RESETSRC_CLR(Mask)); + + PMU->STS = Mask; +} + +/** + * @brief Gets all reset source status. + * @param None + * @retval All reset source status + */ +uint32_t PMU_GetAllResetSource(void) +{ + return (PMU->STS & PMU_RSTSRC_Msk); +} + +/** + * @brief Gets deep-sleep wakeup source status. + * @param Mask: + PMU_DSLEEPWKUSRC_MODE + PMU_DSLEEPWKUSRC_XTAL + PMU_DSLEEPWKUSRC_U32K + PMU_DSLEEPWKUSRC_ANA + PMU_DSLEEPWKUSRC_RTC + PMU_DSLEEPWKUSRC_IOA + * @retval 1: Wakeup status set + 0: Wakeup status reset + */ +uint8_t PMU_GetDSleepWKUSource(uint32_t Mask) +{ + /* Check parameters */ + assert_parameters(IS_PMU_DSLEEPWKUSRC(Mask)); + + if (PMU->STS & Mask) + return 1; + else + return 0; +} + +/** + * @brief Gest deep-sleep wakeup source status. + * @param None + * @retval All deep-sleep wakeup source status + */ +uint32_t PMU_GetAllDSleepWKUSource(void) +{ + return (PMU->STS & PMU_DSLEEPWKUSRC_Msk); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pwm.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pwm.c new file mode 100644 index 0000000000..23f3f64c7b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_pwm.c @@ -0,0 +1,530 @@ +/** + ****************************************************************************** + * @file lib_pwm.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief PWM library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_pwm.h" + +/** + * @brief Initializes PWM timebase. + * @param PWMx: PWM0~PWM3 + InitStruct:PWM BASE configuration. + ClockDivision: + PWM_CLKDIV_2 + PWM_CLKDIV_4 + PWM_CLKDIV_8 + PWM_CLKDIV_16 + Mode: + PWM_MODE_STOP + PWM_MODE_UPCOUNT + PWM_MODE_CONTINUOUS + PWM_MODE_UPDOWN + ClockSource: + PWM_CLKSRC_APB + PWM_CLKSRC_APBD128 + * @retval None + */ +void PWM_BaseInit(PWM_Type *PWMx, PWM_BaseInitType *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CLKDIV(InitStruct->ClockDivision)); + assert_parameters(IS_PWM_CNTMODE(InitStruct->Mode)); + assert_parameters(IS_PWM_CLKSRC(InitStruct->ClockSource)); + + tmp = PWMx->CTL; + tmp &= ~(PWM_CTL_ID\ + |PWM_CTL_MC\ + |PWM_CTL_TSEL); + tmp |= (InitStruct->ClockDivision\ + |InitStruct->Mode\ + |InitStruct->ClockSource); + PWMx->CTL = tmp; +} + +/** + * @brief Fills each PWM_BaseInitType member with its default value. + * @param InitStruct: pointer to an PWM_BaseInitType structure which will be initialized. + * @retval None + */ +void PWM_BaseStructInit(PWM_BaseInitType *InitStruct) +{ + /*------------ Reset PWM base init structure parameters values ------------*/ + /* Initialize the ClockDivision member */ + InitStruct->ClockDivision = PWM_CLKDIV_2; + /* Initialize the ClockSource member */ + InitStruct->ClockSource = PWM_CLKSRC_APBD128; + /* Initialize the Mode member */ + InitStruct->Mode = PWM_MODE_STOP; +} + +/** + * @brief Fills each PWM_OCInitType member with its default value. + * @param OCInitType: pointer to an PWM_OCInitType structure which will be initialized. + * @retval None + */ +void PWM_OCStructInit(PWM_OCInitType *OCInitType) +{ + /*------- Reset PWM output channel init structure parameters values --------*/ + /* Initialize the Channel member */ + OCInitType->Channel = PWM_CHANNEL_0; + /* Initialize the OutMode member */ + OCInitType->OutMode = PWM_OUTMOD_CONST; + /* Initialize the Period member */ + OCInitType->Period = 0; +} + +/** + * @brief Initializes PWM channel output compare function. + * @param PWMx: PWM0~PWM3 + OCInitType:PWM output compare configuration. + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + OutMode: + PWM_OUTMOD_CONST + PWM_OUTMOD_SET + PWM_OUTMOD_TOGGLE_RESET + PWM_OUTMOD_SET_RESET + PWM_OUTMOD_TOGGLE + PWM_OUTMOD_RESET + PWM_OUTMOD_TOGGLE_SET + PWM_OUTMOD_RESET_SET + Period: 0 ~ 0xFFFF + * @retval None + */ +void PWM_OCInit(PWM_Type *PWMx, PWM_OCInitType *OCInitType) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(OCInitType->Channel)); + assert_parameters(IS_PWM_OUTMODE(OCInitType->OutMode)); + assert_parameters(IS_PWM_CCR(OCInitType->Period)); + + tmp = PWMx->CCTL[OCInitType->Channel]; + tmp &= ~(PWM_CCTL_CAP | PWM_CCTL_OUTMOD | PWM_CCTL_CCIFG | PWM_CCTL_COV); + tmp |= OCInitType->OutMode; + PWMx->CCTL[OCInitType->Channel] = tmp; + PWMx->CCR[OCInitType->Channel] = OCInitType->Period; +} + +/** + * @brief Fills each PWM_ICInitType member with its default value. + * @param ICInitType: pointer to a PWM_OCInitType structure which will be initialized. + * @retval None + */ +void PWM_ICStructInit(PWM_ICInitType *ICInitType) +{ + /*------- Reset PWM output channel init structure parameters values --------*/ + /* Initialize the Channel member */ + ICInitType->Channel = PWM_CHANNEL_0; + /* Initialize the CaptureMode member */ + ICInitType->CaptureMode = PWM_CM_DISABLE; +} + + +/** + * @brief Initializes PWM channel input capture function. + * @param PWMx: PWM0~PWM3 + ICInitType:PWM output compare configuration. + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + CaptureMode: + PWM_CM_DISABLE + PWM_CM_RISING + PWM_CM_FALLING + PWM_CM_BOTH + * @retval None + */ +void PWM_ICInit(PWM_Type *PWMx, PWM_ICInitType *ICInitType) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(ICInitType->Channel)); + assert_parameters(IS_PWM_CAPMODE(ICInitType->CaptureMode)); + + tmp = PWMx->CCTL[ICInitType->Channel]; + tmp &= ~(PWM_CCTL_CM | PWM_CCTL_CAP | PWM_CCTL_CCIFG | PWM_CCTL_COV); + tmp |= (ICInitType->CaptureMode | PWM_CCTL_CAP); + PWMx->CCTL[ICInitType->Channel] = tmp; +} + +/** + * @brief Enables or disables PWM base interrupt. + * @param PWMx: PWM0~PWM3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void PWM_BaseINTConfig(PWM_Type *PWMx, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = PWMx->CTL; + tmp &= ~(PWM_CTL_IE | PWM_CTL_IFG); + if (NewState == ENABLE) + { + tmp |= PWM_CTL_IE; + } + PWMx->CTL = tmp; +} + +/** + * @brief Gets PWM base interrupt status. + * @param PWMx: PWM0~PWM3 + * @retval interrupt status. + */ +uint8_t PWM_GetBaseINTStatus(PWM_Type *PWMx) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + + if (PWMx->CTL&PWM_CTL_IFG) + return 1; + else + return 0; +} + +/** + * @brief Clears PWM base interrupt status. + * @param PWMx: PWM0~PWM3 + * @retval None. + */ +void PWM_ClearBaseINTStatus(PWM_Type *PWMx) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + + PWMx->CTL |= PWM_CTL_IFG; +} + +/** + * @brief Enables or disables channel interrupt. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + NewState: + ENABLE + DISABLE + * @retval None + */ +void PWM_ChannelINTConfig(PWM_Type *PWMx, uint32_t Channel, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = PWMx->CCTL[Channel]; + tmp &= ~(PWM_CCTL_CCIE | PWM_CCTL_CCIFG | PWM_CCTL_COV); + if (NewState == ENABLE) + { + tmp |= PWM_CCTL_CCIE; + } + PWMx->CCTL[Channel] = tmp; +} + +/** + * @brief Gets channel interrupt status. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + IntMask: + PWM_INT_CCIFG + PWM_INT_COV + * @retval interrupt status + */ +uint8_t PWM_GetChannelINTStatus(PWM_Type *PWMx, uint32_t Channel, uint32_t IntMask) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + assert_parameters(IS_PWM_INTFLAGR(IntMask)); + + if (PWMx->CCTL[Channel] & IntMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears channel interrupt status. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + Int_Mask: + PWM_INT_CCIFG + PWM_INT_COV + * @retval None + */ +void PWM_ClearChannelINTStatus(PWM_Type *PWMx, uint32_t Channel, uint32_t IntMask) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + assert_parameters(IS_PWM_INTFLAGC(IntMask)); + + tmp = PWMx->CCTL[Channel]; + tmp &= ~PWM_INT_Msk; + tmp |= IntMask; + PWMx->CCTL[Channel] = tmp; +} + +/** + * @brief Clears PWM counter. + * @param PWMx: PWM0~PWM3 + * @retval None + */ +void PWM_ClearCounter(PWM_Type *PWMx) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + + PWMx->CTL |= PWM_CTL_CLR; +} + +/** + * @brief Configures PWM channel CCR value. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + Period: 0 ~ 0xFFFF + * @retval None + */ +void PWM_CCRConfig(PWM_Type *PWMx, uint32_t Channel, uint16_t Period) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + + PWMx->CCR[Channel] = Period; +} + +/** + * @brief Configures PWM output line. + * @param OutSelection: + PWM0_OUT0 + PWM0_OUT1 + PWM0_OUT2 + PWM1_OUT0 + PWM1_OUT1 + PWM1_OUT2 + PWM2_OUT0 + PWM2_OUT1 + PWM2_OUT2 + PWM3_OUT0 + PWM3_OUT1 + PWM3_OUT2 + OLine: can use the '|' operator + PWM_OLINE_0 + PWM_OLINE_1 + PWM_OLINE_2 + PWM_OLINE_3 + * @note PWM Single channel's output waveform can be output on multiple output lines. + * Multiple-line configuration can be performed by using the '|' operator. + * ex: PWM_OLineConfig(PWM0_OUT0, PWM_OLINE_0 | PWM_OLINE_2) + * PWM0 channel0 output by PWM0&PWM2's line. + * @retval None + */ +void PWM_OLineConfig(uint32_t OutSelection, uint32_t OLine) +{ + uint32_t tmp; + uint32_t position = 0; + + /* Check parameters */ + assert_parameters(IS_PWM_OUTLINE(OLine)); + assert_parameters(IS_PWM_OUTSEL(OutSelection)); + + tmp = PWM_SEL->O_SEL; + while ((OLine >> position) != 0UL) + { + if ((OLine >> position) & 1UL) + { + tmp &= ~(PWM_SEL_O_SEL_SEL0 << (position * 4)); + tmp |= (OutSelection << (position * 4)); + } + position++; + } + PWM_SEL->O_SEL = tmp; +} + +/** + * @brief Enables disables PWM output function. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + NewState: + ENABLE + DISABLE + * @retval None + */ +void PWM_OutputCmd(PWM_Type *PWMx, uint32_t Channel, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = PWMx->CCTL[Channel]; + tmp &= ~(PWM_CCTL_CCIFG | PWM_CCTL_COV); + if (NewState == ENABLE) + { + tmp |= PWM_CCTL_OUTEN; + } + else + { + tmp &= ~PWM_CCTL_OUTEN; + } + PWMx->CCTL[Channel] = tmp; +} + +/** + * @brief Sets PWM channel output level. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + Level: + PWM_LEVEL_HIGH + PWM_LEVEL_LOW + * @retval None + */ +void PWM_SetOutLevel(PWM_Type *PWMx, uint32_t Channel, uint32_t Level) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + assert_parameters(IS_PWM_OUTLVL(Level)); + + tmp = PWMx->CCTL[Channel]; + tmp &= ~(PWM_CCTL_OUT | PWM_CCTL_CCIFG | PWM_CCTL_COV); + tmp |= Level; + PWMx->CCTL[Channel] = tmp; +} + +/** + * @brief Configures PWM input line. + * @param InSelection: + PWM1_IN2 + PWM1_IN1 + PWM1_IN0 + PWM0_IN2 + PWM0_IN1 + PWM0_IN0 + PWM3_IN2 + PWM3_IN1 + PWM3_IN0 + PWM2_IN2 + PWM2_IN1 + PWM2_IN0 + ILine: + PWM_ILINE_0 + PWM_ILINE_1 + PWM_ILINE_2 + PWM_ILINE_3 + * @retval None + */ +void PWM_ILineConfig(uint32_t InSelection, uint32_t ILine) +{ + __IO uint32_t *addr; + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_PWM_INLINE(ILine)); + assert_parameters(IS_PWM_INSEL(InSelection)); + + addr = &PWM_SEL->I_SEL01 + ((InSelection&0xF00)>>8); + tmp = *addr; + tmp &= ~( 3 << (InSelection&0xFF)); + tmp |= (ILine << (InSelection&0xFF)); + *addr = tmp; +} + +/** + * @brief Gets PWM channel SCCI value. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + * @retval INx¡¯s input value when the TAR is equal to CCRx + */ +uint8_t PWM_GetSCCI(PWM_Type *PWMx, uint32_t Channel) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + + if (PWMx->CCTL[Channel] & PWM_CCTL_SCCI) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Gets PWM channel capture value. + * @param PWMx: PWM0~PWM3 + Channel: + PWM_CHANNEL_0 + PWM_CHANNEL_1 + PWM_CHANNEL_2 + * @retval The value of CCRx. + */ +uint32_t PWM_GetCapture(PWM_Type *PWMx, uint32_t Channel) +{ + /* Check parameters */ + assert_parameters(IS_PWM_ALL_INSTANCE(PWMx)); + assert_parameters(IS_PWM_CHANNEL(Channel)); + + return PWMx->CCR[Channel]; +} + +/******************* (C) COPYRIGHT Vango Technologies, Inc *****END OF FILE****/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_rtc.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_rtc.c new file mode 100644 index 0000000000..3f2b3aec1c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_rtc.c @@ -0,0 +1,793 @@ +/** + ****************************************************************************** + * @file lib_rtc.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief RTC library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_rtc.h" + +#define RTCPWD_KEY 0x5AA55AA5 +#define RTCCE_SETKEY 0xA55AA55B +#define RTCCE_CLRKEY 0xA55AA55A + +/** + * @brief Enables or disables RTC registers write protection. + * @param NewState: + * ENABLE + * DISABLE + * @retval None + */ +void RTC_WriteProtection(uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + /* Enable RTC Write-Protection */ + if (NewState != DISABLE) + { + RTC->PWD = RTCPWD_KEY; + RTC->CE = RTCCE_CLRKEY; + } + /* Disable RTC Write-Protection */ + else + { + RTC->PWD = RTCPWD_KEY; + RTC->CE = RTCCE_SETKEY; + } +} + +/** + * @brief Waits until the RTC registers (be W/R protected) are synchronized + * with RTC APB clock. + * @note The RTC Resynchronization mode is write protected, use the + * RTC_WriteProtection(DISABLE) before calling this function. + * Write-Operation process as follows: + * 1. RTC_WriteProtection(DISABLE); + * 2. RTC Registers write operation(only first write-operation be + * valid on the same register). + * 3. RTC_WriteProtection(ENABLE); + * 4. RTC_WaitForSynchro(); Wait until the RTC registers be + * synchronized by calling this function. + * @retval None + */ +void RTC_WaitForSynchro(void) +{ + while (RTC->CE & RTC_CE_BSY) + { + } +} + +/** + * @brief Writes RTC registers(continuous/be write-protected). + * @param[in] StartAddr the start address of registers be written + * @param[in] wBuffer pointer to write + * @param[in] Len number of registers be written + * @retval None + */ +void RTC_WriteRegisters(uint32_t StartAddr, const uint32_t *wBuffer, uint8_t Len) +{ + uint8_t cnt; + + /* Parameter check */ + assert_parameters(IS_RTC_REGOP_STARTADDR(StartAddr)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write registers */ + for (cnt=0; cntLOAD */ + tmp = RTC->LOAD; + tmp += 1; + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + /* Read registers */ + for (cnt=0; cntYear)); + assert_parameters(IS_RTC_TIME_MONTH(sTime->Month)); + assert_parameters(IS_RTC_TIME_DATE(sTime->Date)); + assert_parameters(IS_RTC_TIME_WEEKDAY(sTime->WeekDay)); + assert_parameters(IS_RTC_TIME_HOURS(sTime->Hours)); + assert_parameters(IS_RTC_TIME_MINS(sTime->Minutes)); + assert_parameters(IS_RTC_TIME_SECS(sTime->Seconds)); + if (AccurateSel == RTC_ACCURATE) + assert_parameters(IS_RTC_TIME_SubSECS(sTime->SubSeconds)); + assert_parameters(IS_RTC_ACCURATESEL(AccurateSel)); + + subsec = sTime->SubSeconds; + subsec = subsec -(subsec>>8)*156 -((subsec&0xFF)>>4)*6; + sec = sTime->Seconds; + sec = sec - (sec>>4)*6; + subsec = sec * 32768 + subsec * 32768 / 1000; + + alarmctl = RTC->ALARMCTL; + if (AccurateSel == RTC_ACCURATE) + alarmctl |= RTC_ALARMCTL_TIME_CNT_EN; + else + alarmctl &= ~RTC_ALARMCTL_TIME_CNT_EN; + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write RTC time registers */ + RTC->TIME = subsec; + RTC->SEC = sTime->Seconds; + RTC->MIN = sTime->Minutes; + RTC->HOUR = sTime->Hours; + RTC->DAY = sTime->Date; + RTC->WEEK = sTime->WeekDay; + RTC->MON = sTime->Month; + RTC->YEAR = sTime->Year; + RTC->ALARMCTL = alarmctl; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Gets RTC current time. + * @param[out] gTime: Pointer to Time structure + * @param[in] AccurateSel: + * RTC_ACCURATE + * RTC_INACCURATE + * @retval None +*/ +void RTC_GetTime(RTC_TimeTypeDef *gTime, uint32_t AccurateSel) +{ + __IO uint32_t dummy_data = 0; + uint32_t subsec,sec; + + /* Parameter check */ + assert_parameters(IS_RTC_ACCURATESEL(AccurateSel)); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + /* Dummy read-operation to RTC->LOAD register */ + dummy_data = RTC->LOAD; + dummy_data += 1; + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + /* Read RTC time registers */ + gTime->Seconds = RTC->SEC; + gTime->Minutes = RTC->MIN; + gTime->Hours = RTC->HOUR; + gTime->Date = RTC->DAY; + gTime->WeekDay = RTC->WEEK; + gTime->Month = RTC->MON; + gTime->Year = RTC->YEAR; + subsec = RTC->TIME; + + if (AccurateSel == RTC_ACCURATE) + { + sec = subsec/32768; + sec = sec + (sec/10)*6; + gTime->Seconds = sec; + subsec = (subsec%32768)*1000/32768; + subsec = subsec + ((subsec%100)/10)*6 + (subsec/100)*156; + gTime->SubSeconds = subsec; + } + else + { + gTime->SubSeconds = 0; + } +} + +/** + * @brief Enables or disables the RTC Sub Seconds. + * @param NewState: + * ENABLE + * DISABLE + * @retval None + */ +void RTC_SubSecondCmd(uint32_t NewState) +{ + uint32_t tmp; + + /* Parameter check */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = RTC->ALARMCTL; + if (NewState == ENABLE) + { + tmp |= RTC_ALARMCTL_TIME_CNT_EN; + } + else + { + tmp &= ~RTC_ALARMCTL_TIME_CNT_EN; + } + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->ALARMCTL = tmp; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Sets the RTC Alarm. + * @param RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that + * contains the alarm configuration parameters. + * AccurateSel: + * RTC_ACCURATE + * RTC_INACCURATE + * @retval None + */ +void RTC_SetAlarm(RTC_AlarmTypeDef *RTC_AlarmStruct, uint32_t AccurateSel) +{ + uint32_t subsec,sec,alarmctl; + /* Parameter check */ + assert_parameters(IS_RTC_TIME_HOURS(RTC_AlarmStruct->AlarmHours)); + assert_parameters(IS_RTC_TIME_MINS(RTC_AlarmStruct->AlarmMinutes)); + assert_parameters(IS_RTC_TIME_SECS(RTC_AlarmStruct->AlarmSeconds)); + if (AccurateSel == RTC_ACCURATE) + assert_parameters(IS_RTC_TIME_SubSECS(RTC_AlarmStruct->AlarmSubSeconds)); + assert_parameters(IS_RTC_ACCURATESEL(AccurateSel)); + + subsec = RTC_AlarmStruct->AlarmSubSeconds; + subsec = subsec -(subsec>>8)*156 -((subsec&0xFF)>>4)*6; + sec = RTC_AlarmStruct->AlarmSeconds; + sec = sec - (sec>>4)*6; + subsec = sec * 32768 + subsec * 32768 / 1000; + + alarmctl = RTC->ALARMCTL; + if (AccurateSel == RTC_ACCURATE) + alarmctl &= ~RTC_ALARMCTL_ALARM_INACCURATE; + else + alarmctl |= RTC_ALARMCTL_ALARM_INACCURATE; + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->ALARMHOUR = RTC_AlarmStruct->AlarmHours; + RTC->ALARMMIN = RTC_AlarmStruct->AlarmMinutes; + RTC->ALARMSEC = RTC_AlarmStruct->AlarmSeconds; + RTC->ALARMTIME = subsec; + RTC->ALARMCTL = alarmctl; + /* Write RTC time registers */ + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Gets the RTC Alarm. + * @param[out] RTC_AlarmStruct: pointer to a RTC_AlarmTypeDef structure that will + * contains the output alarm configuration values. + * @param[in] AccurateSel: + * RTC_ACCURATE + * RTC_INACCURATE + * @retval None + */ +void RTC_GetAlarm(RTC_AlarmTypeDef *RTC_AlarmStruct, uint32_t AccurateSel) +{ + uint32_t sec,subsec; + + /* Parameter check */ + assert_parameters(IS_RTC_ACCURATESEL(AccurateSel)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + + /* Read RTC time registers */ + RTC_AlarmStruct->AlarmHours = RTC->ALARMHOUR; + RTC_AlarmStruct->AlarmMinutes = RTC->ALARMMIN; + RTC_AlarmStruct->AlarmSeconds = RTC->ALARMSEC; + subsec = RTC->ALARMTIME; + + if (AccurateSel == RTC_ACCURATE) + { + sec = subsec/32768; + sec = sec + (sec/10)*6; + RTC_AlarmStruct->AlarmSeconds = sec; + subsec = (subsec%32768)*1000/32768; + subsec = subsec + ((subsec%100)/10)*6 + (subsec/100)*156; + RTC_AlarmStruct->AlarmSubSeconds = subsec; + } + else + { + RTC_AlarmStruct->AlarmSubSeconds = 0; + } +} + +/** + * @brief Enables or disables the RTC Alarm. + * @param NewState: + * ENABLE + * DISABLE + * @retval None + */ +void RTC_AlarmCmd(uint32_t NewState) +{ + uint32_t tmp; + /* Parameter check */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = RTC->ALARMCTL; + if (NewState == ENABLE) + { + tmp |= (RTC_ALARMCTL_ALARM_EN); + } + else + { + tmp &= ~(RTC_ALARMCTL_ALARM_EN); + } + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->ALARMCTL = tmp; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Enables or disables the RTC alarm accurate. + * @param NewState: + * ENABLE + * DISABLE + * @retval None + */ +void RTC_AlarmAccurateCmd(uint32_t NewState) +{ + uint32_t tmp = 0; + /* Parameter check */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = RTC->ALARMCTL; + if (NewState == ENABLE) + { + tmp &= ~RTC_ALARMCTL_ALARM_INACCURATE; + } + else + { + tmp |= RTC_ALARMCTL_ALARM_INACCURATE; + } + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->ALARMCTL = tmp; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Enables or disables RTC interrupt. + * @param INTMask: can use the '|' operator + RTC_INT_ALARM + RTC_INT_CEILLE + RTC_INT_ACDONE + RTC_INT_WKUCNT + RTC_INT_MIDNIGHT + RTC_INT_WKUHOUR + RTC_INT_WKUMIN + RTC_INT_WKUSEC + RTC_INT_TIMEILLE + RTC_INT_ITVSITV + NewState: + ENABLE + DISABLE + * @retval None + */ +void RTC_INTConfig(uint32_t INTMask, uint32_t NewState) +{ + /* Parameter check */ + assert_parameters(IS_RTC_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + RTC->INTEN |= INTMask; + else + RTC->INTEN &= ~INTMask; +} + +/** + * @brief Gets RTC interrupt status. + * @param INTMask: + RTC_INTSTS_ALARM + RTC_INTSTS_CEILLE + RTC_INTSTS_WKUCNT + RTC_INTSTS_MIDNIGHT + RTC_INTSTS_WKUHOUR + RTC_INTSTS_WKUMIN + RTC_INTSTS_WKUSEC + RTC_INTSTS_TIMEILLE + RTC_INTSTS_ITVSITV + * @retval 1: status set + 0: status reset. + */ +uint8_t RTC_GetINTStatus(uint32_t FlagMask) +{ + /* Parameter check */ + assert_parameters(IS_RTC_INTFLAGR(FlagMask)); + + if (RTC->INTSTS&FlagMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears RTC interrupt status. + * @param INTMask: can use the '|' operator + RTC_INTSTS_ALARM + RTC_INTSTS_CEILLE + RTC_INTSTS_WKUCNT + RTC_INTSTS_MIDNIGHT + RTC_INTSTS_WKUHOUR + RTC_INTSTS_WKUMIN + RTC_INTSTS_WKUSEC + RTC_INTSTS_TIMEILLE + RTC_INTSTS_ITVSITV + * @retval None + */ +void RTC_ClearINTStatus(uint32_t FlagMask) +{ + /* Parameter check */ + assert_parameters(IS_RTC_INTFLAGC(FlagMask)); + + RTC->INTSTS = FlagMask; +} + +/* + * @brief Configures Multi-second wake up function. + * @param nPeriod: N seconds interval. + * @note For the first interrupt generated by calling this function, it may + * have < 1 sec error if the new WKUSEC number(parameter) is not equal + * to current WKUSEC number. If the new WKUSEC is equal to current WKUSEC, + * the first interrupt time may have 0~(WKUSEC +1) variation. + * To avoid this problem, set an alternative parameter (like 1) by calling + * this function, then set the correct parameter to it. + * @retval None + */ +void RTC_WKUSecondsConfig(uint8_t nPeriod) +{ + /* Parameter check */ + assert_parameters(IS_RTC_WKUSEC_PERIOD(nPeriod)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write registers */ + RTC->WKUSEC = nPeriod - 1; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/* + * @brief Configures Multi-minute wake up function. + * @param nPeriod: N minute interval. + * @note For the first interrupt generated by calling this function, it may + * have < 1 min error if the new WKUMIN number(parameter) is not equal + * to current WKUMIN number. If the new WKUMIN is equal to current WKUMIN, + * the first interrupt time may have 0~(WKUMIN +1) variation. + * To avoid this problem, set an alternative parameter (like 1) by calling + * this function, then set the correct parameter to it. + * @retval None + */ +void RTC_WKUMinutesConfig(uint8_t nPeriod) +{ + /* Parameter check */ + assert_parameters(IS_RTC_WKUMIN_PERIOD(nPeriod)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write registers */ + RTC->WKUMIN = nPeriod - 1; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/* + * @brief Configures Multi-hour wake up function. + * @param nPeriod: N hour interval. + * @note For the first interrupt generated by calling this function, it may + * have < 1 hour error if the new WKUHOUR number(parameter) is not equal + * to current WKUHOUR number. If the new WKUHOUR is equal to current WKUHOUR, + * the first interrupt time may have 0~(WKUHOUR +1) variation. + * To avoid this problem, set an alternative parameter (like 1) by calling + * this function, then set the correct parameter to it. + * @retval None + */ +void RTC_WKUHoursConfig(uint8_t nPeriod) +{ + /* Parameter check */ + assert_parameters(IS_RTC_WKUHOUR_PERIOD(nPeriod)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write registers */ + RTC->WKUHOUR = nPeriod - 1; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Configures RTC counter wake up function. + * @param nClock: + CNTCLK: + RTC_WKUCNT_RTCCLK + RTC_WKUCNT_2048 + RTC_WKUCNT_512 + RTC_WKUCNT_128 + * @retval None + */ +void RTC_WKUCounterConfig(uint32_t nClock,uint32_t CNTCLK) +{ + /* Parameter check */ + assert_parameters(IS_RTC_WKUCNT_PERIOD(nClock)); + assert_parameters(IS_RTC_WKUCNT_CNTSEL(CNTCLK)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + /* Write registers */ + RTC->WKUCNT = (CNTCLK & RTC_WKUCNT_CNTSEL) | ((nClock & RTC_WKUCNT_WKUCNT) -1 ); + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Configures RTC ITV wake up function. + * @param nType: + RTC_ITV_SEC + RTC_ITV_MIN + RTC_ITV_HOUR + RTC_ITV_DAY + RTC_ITV_500MS + RTC_ITV_250MS + RTC_ITV_125MS + RTC_ITV_62MS + * @retval None + */ +void RTC_WAKE_ITV(uint8_t nType) +{ + /* Parameter check */ + assert_parameters(IS_RTC_ITV(nType)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->SITV = 0; + RTC->ITV = nType; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Configures RTC SITV wake up function. + * @param nPeriod:1~64 + * @retval None + */ +void RTC_WAKE_SITV(uint8_t nPeriod) +{ + /* Parameter check */ + assert_parameters(IS_RTC_SITV(nPeriod)); + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->ITV = RTC_ITV_SITVSEC; + RTC->SITV = RTC_SITV_SITVEN | ((nPeriod - 1)&RTC_SITV_SITV); + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Gets RTC wake-up counter value. + * @retval RTC wake-up counter value + */ +uint32_t RTC_GetWKUCounterValue(void) +{ + return RTC->WKUCNTR; +} + +/** + * @brief Configures RTC clock prescaler. + * @param[in] Prescaler: + * RTC_CLKDIV_1 + * RTC_CLKDIV_4 + * @retval None + */ +void RTC_PrescalerConfig(uint32_t Prescaler) +{ + uint32_t tmp; + + /* Parameter check */ + assert_parameters(IS_RTC_CLKDIV(Prescaler)); + + tmp = RTC->PSCA; + tmp &= ~RTC_PSCA_PSCA; + tmp |= Prescaler; + + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); + /* Disable RTC Registers write-protection */ + RTC_WriteProtection(DISABLE); + + RTC->PSCA = tmp; + + /* Enable RTC Registers write-protection */ + RTC_WriteProtection(ENABLE); + /* Wait until the RTC registers be synchronized */ + RTC_WaitForSynchro(); +} + +/** + * @brief Configures RTC PLLDIV clock-source and frequency. + * @param Source: + RTC_PLLDIVSOURCE_PLLL + RTC_PLLDIVSOURCE_PCLK + nfrequency(HZ): the frequency of RTC PLLDIV output configuration. + * @note Ensure clocks be configured by calling function CLK_ClockConfig(), + * get correct PCLK frequency by calling function CLK_GetPCLKFreq(). + * @retval None + */ +void RTC_PLLDIVConfig(uint32_t DIVSource,uint32_t nfrequency) +{ + /* Parameter check */ + assert_parameters(IS_RTC_PLLDIVSOURCE(DIVSource)); + + if (DIVSource == RTC_PLLDIVSOURCE_PLLL) + { + RTC->CTL |= RTC_CTL_RTCPLLCLKSEL; + if (nfrequency == 0) + { + RTC->DIV = RTC_DIV_RTCDIV; + } + else + { + RTC->DIV = CLK_GetPLLLFreq()/2/nfrequency - 1; + } + } + else + { + RTC->CTL &= ~RTC_CTL_RTCPLLCLKSEL; + if (nfrequency == 0) + { + RTC->DIV = RTC_DIV_RTCDIV; + } + else + { + RTC->DIV = CLK_GetPCLKFreq()/2/nfrequency - 1; + } + } +} + +/** + * @brief Enables or disables RTC PLLDIV output function. + * @param NewState: + * ENABLE + * DISABLE + * @retval None + */ +void RTC_PLLDIVOutputCmd(uint8_t NewState) +{ + /* Parameter check */ + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) RTC->CTL |= RTC_CTL_RTCPLLOE; + else RTC->CTL &= ~RTC_CTL_RTCPLLOE; +} + + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_spi.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_spi.c new file mode 100644 index 0000000000..7f9387948c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_spi.c @@ -0,0 +1,429 @@ +/** + ****************************************************************************** + * @file lib_spi.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief SPI library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_spi.h" + +#define SPI_MISC_RSTValue (0UL) + +/** + * @brief Initializes SPI peripheral registers to their default reset values(Reset SPI FIFO when this function is called). + * @param SPIx:SPI1~SPI3 + * @retval None + */ +void SPI_DeviceInit(SPI_Type *SPIx) +{ + __IO uint32_t dummy_data = 0UL; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + + /* Disable SPI */ + SPIx->CTRL = 0; + /* SPI soft reset */ + SPIx->CTRL |= SPI_CTRL_RST; + SPIx->CTRL &= ~SPI_CTRL_RST; + /* Clear flag */ + dummy_data = SPIx->RXDAT; + dummy_data += 1; + SPIx->TXSTS = SPI_TXSTS_TXIF|SPI_TXSTS_DMATXDONE; + SPIx->RXSTS = SPI_RXSTS_RXIF; + /* write default values */ + SPIx->MISC = SPI_MISC_RSTValue; +} + +/** + * @brief Fills each SPI_InitType member with its default value. + * @param InitStruct: pointer to an SPI_InitType structure which will be initialized. + * @retval None + */ +void SPI_StructInit(SPI_InitType *InitStruct) +{ + /*--------------- Reset SPI init structure parameters values ---------------*/ + /* Initialize the ClockDivision member */ + InitStruct->ClockDivision = SPI_CLKDIV_2; + /* Initialize the CSNSoft member */ + InitStruct->CSNSoft = SPI_CSNSOFT_DISABLE; + /* Initialize the Mode member */ + InitStruct->Mode = SPI_MODE_MASTER; + /* Initialize the SPH member */ + InitStruct->SPH = SPI_SPH_0; + /* Initialize the SPO member */ + InitStruct->SPO = SPI_SPO_0; + /* Initialize the SWAP member */ + InitStruct->SWAP = SPI_SWAP_DISABLE; +} + +/** + * @brief Initializes SPI. + * @param SPIx:SPI1~SPI3 + InitStruct: SPI configuration. + Mode: + SPI_MODE_MASTER + SPI_MODE_SLAVE + SPH: + SPI_SPH_0 + SPI_SPH_1 + SPO: + SPI_SPO_0 + SPI_SPO_1 + ClockDivision: + SPI_CLKDIV_2 + SPI_CLKDIV_4 + SPI_CLKDIV_8 + SPI_CLKDIV_16 + SPI_CLKDIV_32 + SPI_CLKDIV_64 + SPI_CLKDIV_128 + CSNSoft: + SPI_CSNSOFT_ENABLE + SPI_CSNSOFT_DISABLE + SWAP: + SPI_SWAP_ENABLE + SPI_SWAP_DISABLE + * @retval None + */ +void SPI_Init(SPI_Type *SPIx, SPI_InitType *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_MODE(InitStruct->Mode)); + assert_parameters(IS_SPI_SPH(InitStruct->SPH)); + assert_parameters(IS_SPI_SPO(InitStruct->SPO)); + assert_parameters(IS_SPI_CLKDIV(InitStruct->ClockDivision)); + assert_parameters(IS_SPI_CSN(InitStruct->CSNSoft)); + assert_parameters(IS_SPI_SWAP(InitStruct->SWAP)); + + tmp = SPIx->CTRL; + tmp &= ~(SPI_CTRL_MOD\ + |SPI_CTRL_SCKPHA\ + |SPI_CTRL_SCKPOL\ + |SPI_CTRL_CSGPIO\ + |SPI_CTRL_SWAP\ + |SPI_CTRL_SCKSEL); + tmp |= (InitStruct->Mode\ + |InitStruct->SPH\ + |InitStruct->SPO\ + |InitStruct->CSNSoft\ + |InitStruct->SWAP\ + |InitStruct->ClockDivision); + SPIx->CTRL = tmp; +} + +/** + * @brief Enables or disables SPI. + * @param SPIx:SPI1~SPI3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void SPI_Cmd(SPI_Type *SPIx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + SPIx->CTRL |= SPI_CTRL_EN; + else + SPIx->CTRL &= ~SPI_CTRL_EN; +} + +/** + * @brief Enables or disables SPI interrupt. + * @param SPIx:SPI1~SPI3 + INTMask: can use the '|' operator + SPI_INT_TX + SPI_INT_RX + NewState: + ENABLE + DISABLE + * @retval None + */ +void SPI_INTConfig(SPI_Type *SPIx, uint32_t INTMask, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (INTMask & 0x80000000) + { + tmp = SPIx->TXSTS; + tmp &= ~SPI_TXSTS_TXIF; + if (NewState == ENABLE) + { + tmp |= (INTMask&0xFFFF); + SPIx->TXSTS = tmp; + } + else + { + tmp &= ~(INTMask&0xFFFF); + SPIx->TXSTS = tmp; + } + } + if (INTMask & 0x40000000) + { + tmp = SPIx->RXSTS; + tmp &= ~SPI_RXSTS_RXIF; + if (NewState == ENABLE) + { + tmp |= (INTMask&0xFFFF); + SPIx->RXSTS = tmp; + } + else + { + tmp &= ~(INTMask&0xFFFF); + SPIx->RXSTS = tmp; + } + } +} + +/** + * @brief Gets SPI status flag. + * @param SPIx:SPI1~SPI3 + Status: + SPI_STS_TXIF + SPI_STS_TXEMPTY + SPI_STS_TXFUR + SPI_STS_DMATXDONE + SPI_STS_RXIF + SPI_STS_RXFULL + SPI_STS_RXFOV + SPI_STS_BSY + SPI_STS_RFF + SPI_STS_RNE + SPI_STS_TNF + SPI_STS_TFE + * @retval Flag status. + */ +uint8_t SPI_GetStatus(SPI_Type *SPIx, uint32_t Status) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_STSR(Status)); + + if ((Status&0xE0000000) == 0x80000000) + { + if (Status&SPIx->TXSTS) + return 1; + else + return 0; + } + else if ((Status&0xE0000000) == 0x40000000) + { + if (Status&SPIx->RXSTS) + return 1; + else + return 0; + } + else + { + if (Status&SPIx->MISC) + return 1; + else + return 0; + } +} + +/** + * @brief Clears SPI status flag. + * @param SPIx:SPI1~SPI3 + Status: can use the '|' operator + SPI_STS_TXIF + SPI_STS_RXIF + SPI_STS_DMATXDONE + * @retval None + */ +void SPI_ClearStatus(SPI_Type *SPIx, uint32_t Status) +{ + uint32_t tmp = 0UL; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_STSC(Status)); + + if (Status & 0x80000000) + { + tmp = SPIx->TXSTS; + tmp &= ~(SPI_TXSTS_DMATXDONE | SPI_TXSTS_TXIF); + tmp |= (Status&0xFFFF); + SPIx->TXSTS = tmp; + } + if (Status & 0x40000000) + { + SPIx->RXSTS |= (Status&0xFFFF); + } +} + +/** + * @brief Loads send data register. + * @param SPIx:SPI1~SPI3 + ch: data write to send data register + * @retval None + */ +void SPI_SendData(SPI_Type *SPIx, uint8_t ch) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + + SPIx->TXDAT = ch; +} + +/** + * @brief Reads receive data register. + * @param SPIx:SPI1~SPI3 + * @retval receive data value + */ +uint8_t SPI_ReceiveData(SPI_Type *SPIx) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + + return (SPIx->RXDAT); +} + +/** + * @brief Configures transmit fifo level. + * @param SPIx:SPI1~SPI3 + FIFOLevel: + SPI_TXFLEV_0 + SPI_TXFLEV_1 + SPI_TXFLEV_2 + SPI_TXFLEV_3 + SPI_TXFLEV_4 + SPI_TXFLEV_5 + SPI_TXFLEV_6 + SPI_TXFLEV_7 + * @retval None + */ +void SPI_TransmitFIFOLevelConfig(SPI_Type *SPIx, uint32_t FIFOLevel) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_TXFLEV(FIFOLevel)); + + tmp = SPIx->TXSTS; + tmp &= ~(SPI_TXSTS_TXFLEV | SPI_TXSTS_TXIF|SPI_TXSTS_DMATXDONE); + tmp |= FIFOLevel; + SPIx->TXSTS = tmp; +} + +/** + * @brief Configures receive fifo level. + * @param SPIx:SPI1~SPI3 + FIFOLevel: + SPI_RXFLEV_0 + SPI_RXFLEV_1 + SPI_RXFLEV_2 + SPI_RXFLEV_3 + SPI_RXFLEV_4 + SPI_RXFLEV_5 + SPI_RXFLEV_6 + SPI_RXFLEV_7 + * @retval None + */ +void SPI_ReceiveFIFOLevelConfig(SPI_Type *SPIx, uint32_t FIFOLevel) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_SPI_RXFLEV(FIFOLevel)); + + tmp = SPIx->RXSTS; + tmp &= ~(SPI_RXSTS_RXFLEV | SPI_RXSTS_RXIF); + tmp |= FIFOLevel; + SPIx->RXSTS = tmp; +} + +/** + * @brief Gets transmit fifo level. + * @param SPIx:SPI1~SPI3 + * @retval Transmit fifo level. + */ +uint8_t SPI_GetTransmitFIFOLevel(SPI_Type *SPIx) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + + return (SPIx->TXSTS & SPI_TXSTS_TXFFLAG); +} + +/** + * @brief Gets receive fifo level. + * @param SPIx:SPI1~SPI3 + * @retval Receive fifo level. + */ +uint8_t SPI_GetReceiveFIFOLevel(SPI_Type *SPIx) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + + return (SPIx->RXSTS & SPI_RXSTS_RXFFLAG); +} + +/** + * @brief Enables or disables FIFO smart mode. + * @param SPIx:SPI1~SPI3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void SPI_SmartModeCmd(SPI_Type *SPIx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + SPIx->MISC |= SPI_MISC_SMART; + } + else + { + SPIx->MISC &= ~SPI_MISC_SMART; + } +} + +/** + * @brief Enables or disables FIFO over write mode. + * @param SPIx:SPI1~SPI3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void SPI_OverWriteModeCmd(SPI_Type *SPIx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_SPI_ALL_INSTANCE(SPIx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + SPIx->MISC |= SPI_MISC_OVER; + } + else + { + SPIx->MISC &= ~SPI_MISC_OVER; + } +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_tmr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_tmr.c new file mode 100644 index 0000000000..9c1f0e401c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_tmr.c @@ -0,0 +1,178 @@ +/** + ****************************************************************************** + * @file lib_tmr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Timer library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_tmr.h" + +#define TMR_CTRL_RSTValue (0UL) +#define TMR_VALUE_RSTValue (0UL) +#define TMR_RELOAD_RSTValue (0UL) + +/** + * @brief Initializes the timer peripheral registers to their default reset values. + * @param TMRx: + TMR0 ~ TMR3 + * @retval None + */ +void TMR_DeInit(TMR_Type *TMRx) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + + /* Disable timer */ + TMRx->CTRL &= ~TMR_CTRL_EN; + /* clear interrupt status */ + TMRx->INTSTS = TMR_INTSTS_INTSTS; + /* write default reset values */ + TMRx->CTRL = TMR_CTRL_RSTValue; + TMRx->RELOAD = TMR_RELOAD_RSTValue; + TMRx->VALUE = TMR_VALUE_RSTValue; +} + +/** + * @brief Initializes timer. + * @param TMRx: + TMR0 ~ TMR3 + InitStruct: Timer configuration. + ClockSource: + TMR_CLKSRC_INTERNAL + TMR_CLKSRC_EXTERNAL + EXTGT: + TMR_EXTGT_DISABLE + TMR_EXTGT_ENABLE + Period: the auto-reload value + * @retval None + */ +void TMR_Init(TMR_Type *TMRx, TMR_InitType *InitStruct) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + assert_parameters(IS_TMR_CLKSRC(InitStruct->ClockSource)); + assert_parameters(IS_TMR_EXTGT(InitStruct->EXTGT)); + + tmp = TMRx->CTRL; + tmp &= ~(TMR_CTRL_EXTCLK|TMR_CTRL_EXTEN); + tmp |= (InitStruct->ClockSource|InitStruct->EXTGT); + TMRx->CTRL = tmp; + TMRx->VALUE = InitStruct->Period; + TMRx->RELOAD = InitStruct->Period; +} + +/** + * @brief Fills each TMR_InitType member with its default value. + * @param InitStruct: pointer to an TMR_InitType structure which will be initialized. + * @retval None + */ +void TMR_StructInit(TMR_InitType *InitStruct) +{ + /*--------------- Reset TMR init structure parameters values ---------------*/ + /* Initialize the ClockSource member */ + InitStruct->ClockSource = TMR_CLKSRC_INTERNAL; + /* Initialize the EXTGT member */ + InitStruct->EXTGT = TMR_EXTGT_DISABLE; + /* Initialize the Period member */ + InitStruct->Period = 0; +} + +/** + * @brief Enables or disables timer interrupt. + * @param TMRx: + TMR0~TMR3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void TMR_INTConfig(TMR_Type *TMRx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + TMRx->CTRL |= TMR_CTRL_INTEN; + } + else + { + TMRx->CTRL &= ~TMR_CTRL_INTEN; + } +} + +/** + * @brief Gets timer interrupt status. + * @param TMRx: + TMR0~TMR3 + * @retval Interrupt status. + */ +uint8_t TMR_GetINTStatus(TMR_Type *TMRx) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + + if (TMRx->INTSTS & TMR_INTSTS_INTSTS) + return 1; + else + return 0; +} + +/** + * @brief Clears timer interrupt status bit. + * @param TMRx: + TMR0~TMR3 + * @retval None. + */ +void TMR_ClearINTStatus(TMR_Type *TMRx) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + + TMRx->INTSTS = TMR_INTSTS_INTSTS; +} + +/** + * @brief Enables or disables timer. + * @param TMRx: + TMR0~TMR3 + NewState: + ENABLE + DISABLE + * @retval None + */ +void TMR_Cmd(TMR_Type *TMRx, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + TMRx->CTRL |= TMR_CTRL_EN; + else + TMRx->CTRL &= ~TMR_CTRL_EN; +} + +/** + * @brief Gets timer current value. + * @param TMRx: + TMR0~TMR3 + * @retval timer value. + */ +uint32_t TMR_GetCurrentValue(TMR_Type *TMRx) +{ + /* Check parameters */ + assert_parameters(IS_TMR_ALL_INSTANCE(TMRx)); + + return (TMRx->VALUE); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_u32k.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_u32k.c new file mode 100644 index 0000000000..825e144d77 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_u32k.c @@ -0,0 +1,309 @@ +/** + ****************************************************************************** + * @file lib_u32k.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief UART 32K library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_u32k.h" + +#define U32K_STS_Msk (0x7UL) +#define U32K_CTRL0_RSTValue (0UL) +#define U32K_CTRL1_RSTValue (0UL) +#define U32K_PHASE_RSTValue (0x4B00UL) + +/** + * @brief Initializes the U32Kx peripheral registers to their default reset values. + * @param U32Kx: U32K0~U32K1 + * @retval None + */ +void U32K_DeInit(U32K_Type *U32Kx) +{ + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + + /* Disable U32K */ + U32Kx->CTRL0 &= ~U32K_CTRL0_EN; + /* clear interrupt status */ + U32Kx->STS = U32K_STS_Msk; + /* write default reset values */ + U32Kx->CTRL0 = U32K_CTRL0_RSTValue; + U32Kx->CTRL1 = U32K_CTRL1_RSTValue; + U32Kx->BAUDDIV = U32K_PHASE_RSTValue; +} + +/** + * @brief Initializes U32K. + * @param U32Kx: + U32K0~U32K1 + InitStruct: U32K configuration + Debsel: + U32K_DEBSEL_0 + U32K_DEBSEL_1 + U32K_DEBSEL_2 + U32K_DEBSEL_3 + Parity: + U32K_PARITY_EVEN + U32K_PARITY_ODD + U32K_PARITY_0 + U32K_PARITY_1 + U32K_PARITY_NONE + FirstBit: + U32K_FIRSTBIT_LSB + U32K_FIRSTBIT_MSB + AutoCal: + U32K_AUTOCAL_ON + U32K_AUTOCAL_OFF + LineSel: + U32K_LINE_RX0 + U32K_LINE_RX1 + U32K_LINE_RX2 + U32K_LINE_RX3 + Baudrate: Baudrate value, 300UL ~ 14400UL + * @retval None + */ +void U32K_Init(U32K_Type *U32Kx, U32K_InitType *InitStruct) +{ + uint32_t tmp_reg1, tmp_reg2; + + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_DEBSEL(InitStruct->Debsel)); + assert_parameters(IS_U32K_PARITY(InitStruct->Parity)); + assert_parameters(IS_U32K_FIRSTBIT(InitStruct->FirstBit)); + assert_parameters(IS_U32K_AUTOCAL(InitStruct->AutoCal)); + assert_parameters(IS_U32K_LINE(InitStruct->LineSel)); + assert_parameters(IS_U32K_BAUDRATE(InitStruct->Baudrate)); + + tmp_reg1 = U32Kx->CTRL0; + tmp_reg1 &= ~(U32K_CTRL0_DEBSEL\ + |U32K_CTRL0_PMODE\ + |U32K_CTRL0_MSB\ + |U32K_CTRL0_ACOFF); + tmp_reg1 |= (InitStruct->Debsel\ + |InitStruct->Parity\ + |InitStruct->FirstBit\ + |InitStruct->AutoCal); + U32Kx->CTRL0 = tmp_reg1; + if ((RTC->PSCA & RTC_PSCA_PSCA) == RTC_PSCA_PSCA_0) //RTCCLK 32768Hz + U32Kx->BAUDDIV = 65536*InitStruct->Baudrate/32768; + else if ((RTC->PSCA & RTC_PSCA_PSCA) == RTC_PSCA_PSCA_1) //RTCCLK 8192Hz + U32Kx->BAUDDIV = 65536*InitStruct->Baudrate/8192; + else + assert_parameters(0); + + tmp_reg2 = U32Kx->CTRL1; + tmp_reg2 &= ~(U32K_CTRL1_RXSEL); + tmp_reg2 |= (InitStruct->LineSel); + U32Kx->CTRL1 = tmp_reg2; +} + +/** + * @brief Fills each U32K_InitType member with its default value. + * @param InitStruct: pointer to an U32K_InitType structure which will be initialized. + * @retval None + */ +void U32K_StructInit(U32K_InitType *InitStruct) +{ + /*-------------- Reset U32K init structure parameters values ---------------*/ + /* Initialize the AutoCal member */ + InitStruct->AutoCal = U32K_AUTOCAL_ON; + /* Initialize the Baudrate member */ + InitStruct->Baudrate = 9600; + /* Initialize the Debsel member */ + InitStruct->Debsel = U32K_DEBSEL_0; + /* Initialize the FirstBit member */ + InitStruct->FirstBit = U32K_FIRSTBIT_LSB; + /* Initialize the LineSel member */ + InitStruct->LineSel = U32K_LINE_RX0; + /* Initialize the Parity member */ + InitStruct->Parity = U32K_PARITY_NONE; +} + +/** + * @brief Enables or disables U32K interrupt. + * @param U32Kx: + U32K0~U32K1 + INTMask: can use the '|' operator + U32K_INT_RXOV + U32K_INT_RXPE + U32K_INT_RX + NewState: + ENABLE + DISABLE + * @retval None + */ +void U32K_INTConfig(U32K_Type *U32Kx, uint32_t INTMask, uint8_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = U32Kx->CTRL1; + tmp &= ~INTMask; + if (NewState == ENABLE) + { + tmp |= INTMask; + } + U32Kx->CTRL1 = tmp; +} + +/** + * @brief Gets interrupt flag status. + * @param U32Kx: + U32K0~U32K1 + INTMask: + U32K_INTSTS_RXOV + U32K_INTSTS_RXPE + U32K_INTSTS_RX + * @retval Flag status + */ +uint8_t U32K_GetINTStatus(U32K_Type *U32Kx, uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_INTFLAGR(INTMask)); + + if (U32Kx->STS&INTMask) + return 1; + else + return 0; +} + +/** + * @brief Clears flag status. + * @param U32Kx: + U32K0~U32K1 + INTMask: can use the '|' operator + U32K_INTSTS_RXOV + U32K_INTSTS_RXPE + U32K_INTSTS_RX + * @retval None + */ +void U32K_ClearINTStatus(U32K_Type *U32Kx, uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_INTFLAGC(INTMask)); + + U32Kx->STS = INTMask; +} + +/** + * @brief Reads receive data register. + * @param U32Kx: + U32K0~U32K1 + * @retval Receive data value + */ +uint8_t U32K_ReceiveData(U32K_Type *U32Kx) +{ + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + + return (U32Kx->DATA); +} + +/** + * @brief Configures U32K baudrate. + * @param U32Kx: U32K0~U32K1 + BaudRate: Baudrate value + * @retval None + */ +void U32K_BaudrateConfig(U32K_Type *U32Kx, uint32_t BaudRate) +{ + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_BAUDRATE(BaudRate)); + + if ((RTC->PSCA & RTC_PSCA_PSCA) == RTC_PSCA_PSCA_0) //RTCCLK 32768Hz + U32Kx->BAUDDIV = 65536*BaudRate/32768; + else if ((RTC->PSCA & RTC_PSCA_PSCA) == RTC_PSCA_PSCA_1) //RTCCLK 8192Hz + U32Kx->BAUDDIV = 65536*BaudRate/8192; + else + assert_parameters(0); +} + +/** + * @brief Enables or disables U32K controlller. + * @param U32Kx: + U32K0~U32K1 + NewState: + ENABLE + DISABLE + * @retval None + */ +void U32K_Cmd(U32K_Type *U32Kx, uint32_t NewState) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + tmp = U32Kx->CTRL0; + tmp &= ~(U32K_CTRL0_EN); + if (NewState == ENABLE) + { + tmp |= U32K_CTRL0_EN; + } + U32Kx->CTRL0 = tmp; +} + +/** + * @brief Configures U32K receive line. + * @param U32Kx: + U32K0~U32K1 + Line: + U32K_LINE_RX0 + U32K_LINE_RX1 + U32K_LINE_RX2 + U32K_LINE_RX3 + * @retval None + */ +void U32K_LineConfig(U32K_Type *U32Kx, uint32_t Line) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_LINE(Line)); + + tmp = U32Kx->CTRL1; + tmp &= ~U32K_CTRL1_RXSEL_Msk; + tmp |= Line; + + U32Kx->CTRL1 = tmp; +} + +/** + * @brief Configures Wake-up mode. + * @param U32Kx: + U32K0~U32K1 + WKUMode: + U32K_WKUMOD_RX + U32K_WKUMOD_PC + * @retval None + */ +void U32K_WKUModeConfig(U32K_Type *U32Kx, uint32_t WKUMode) +{ + uint32_t tmp; + + /* Check parameters */ + assert_parameters(IS_U32K_ALL_INSTANCE(U32Kx)); + assert_parameters(IS_U32K_WKUMODE(WKUMode)); + + tmp = U32Kx->CTRL0; + tmp &= ~U32K_CTRL0_WKUMODE_Msk; + tmp |= WKUMode; + U32Kx->CTRL0 = tmp; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_uart.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_uart.c new file mode 100644 index 0000000000..3af83facdc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_uart.c @@ -0,0 +1,372 @@ +/** + ****************************************************************************** + * @file lib_uart.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief UART library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_uart.h" +#include "lib_clk.h" + +#define UART_STATE_RCMsk (0xBCUL) +#define UART_INTSTS_RCMsk (0x3FUL) +#define UART_BAUDDIV_RSTValue (0UL) +#define UART_CTRL_RSTValue (0UL) +#define UART_CTRL2_RSTValue (0UL) + +/** + * @brief Iinitializes the UARTx peripheral registers to their default reset + values. + * @param UARTx: UART0~UART5 + * @retval None + */ +void UART_DeInit(UART_Type *UARTx) +{ + __IO uint32_t dummy_data = 0UL; + + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + + /* read data, clear RXFULL flag */ + dummy_data = UARTx->DATA; + dummy_data += 1; + + UARTx->INTSTS = UART_INTSTS_RCMsk; + UARTx->STATE = UART_STATE_RCMsk; + UARTx->BAUDDIV = UART_BAUDDIV_RSTValue; + UARTx->CTRL2 = UART_CTRL2_RSTValue; + UARTx->CTRL = UART_CTRL_RSTValue; +} + +/** + * @brief Iinitializes UART. + * @param UARTx: UART0~UART5 + InitStruct:UART configuration. + Mode: (between UART_MODE_RX and UART_MODE_TX, can use the '|' operator) + UART_MODE_RX + UART_MODE_TX + UART_MODE_OFF + Parity: + UART_PARITY_EVEN + UART_PARITY_ODD + UART_PARITY_0 + UART_PARITY_1 + UART_PARITY_NONE + FirstBit: + UART_FIRSTBIT_LSB + UART_FIRSTBIT_MSB + Baudrate: Baudrate value, 300UL ~ 819200UL + * @retval None + */ +void UART_Init(UART_Type *UARTx, UART_InitType *InitStruct) +{ + uint32_t pclk; + uint32_t div; + uint32_t tmp_reg1, tmp_reg2; + + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_MODE(InitStruct->Mode)); + assert_parameters(IS_UART_PARITY(InitStruct->Parity)); + assert_parameters(IS_UART_FIRSTBIT(InitStruct->FirstBit)); + assert_parameters(IS_UART_BAUDRATE(InitStruct->Baudrate)); + + tmp_reg1 = UARTx->CTRL; + tmp_reg1 &= ~(UART_CTRL_RXEN_Msk\ + |UART_CTRL_TXEN_Msk); + tmp_reg1 |= (InitStruct->Mode); + + tmp_reg2 = UARTx->CTRL2; + tmp_reg2 &= ~(UART_CTRL2_MSB_Msk \ + |UART_CTRL2_PMODE_Msk); + tmp_reg2 |= (InitStruct->Parity\ + |InitStruct->FirstBit); + UARTx->CTRL2 = tmp_reg2; + + pclk = CLK_GetPCLKFreq(); + div = pclk/InitStruct->Baudrate; + + if ((pclk%InitStruct->Baudrate) > (InitStruct->Baudrate/2)) + { + div++; + } + + UARTx->BAUDDIV = div; + UARTx->CTRL = tmp_reg1; +} + +/** + * @brief Fills each UART_InitType member with its default value. + * @param InitStruct: pointer to an UART_InitType structure which will be initialized. + * @retval None + */ +void UART_StructInit(UART_InitType *InitStruct) +{ + /*-------------- Reset UART init structure parameters values ---------------*/ + /* Initialize the Baudrate member */ + InitStruct->Baudrate = 9600; + /* Initialize the FirstBit member */ + InitStruct->FirstBit = UART_FIRSTBIT_LSB; + /* Initialize the Mode member */ + InitStruct->Mode = UART_MODE_OFF; + /* Initialize the Parity member */ + InitStruct->Parity = UART_PARITY_NONE; +} + +/** + * @brief Gets peripheral flag. + * @param UARTx: UART0~UART5 + FlagMask: flag to get. + --UART_FLAG_DMATXDONE + --UART_FLAG_RXPARITY + --UART_FLAG_TXDONE + --UART_FLAG_RXPE + --UART_FLAG_RXOV + --UART_FLAG_TXOV + --UART_FLAG_RXFULL + * @retval 1:flag set + 0:flag reset + */ +uint8_t UART_GetFlag(UART_Type *UARTx, uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_FLAGR(FlagMask)); + + if (UARTx->STATE&FlagMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears peripheral flag. + * @param UARTx: UART0~UART5 + FlagMask: status to clear, can use the '|' operator. + --UART_FLAG_DMATXDONE + --UART_FLAG_TXDONE + --UART_FLAG_RXPE + --UART_FLAG_RXOV + --UART_FLAG_TXOV + * @retval None + */ +void UART_ClearFlag(UART_Type *UARTx, uint32_t FlagMask) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_FLAGC(FlagMask)); + + UARTx->STATE = FlagMask; +} + +/** + * @brief Enables or disables the specified UART interrupts. + * @param UARTx: UART0~UART5 + INTMask: can use the '|' operator. + --UART_INT_TXDONE + --UART_INT_RXPE + --UART_INT_RXOV + --UART_INT_TXOV + --UART_INT_RX + NewState:New status of interrupt mask. + * @retval None + */ +void UART_INTConfig(UART_Type *UARTx, uint32_t INTMask, uint8_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_INT(INTMask)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + UARTx->CTRL |= INTMask; + } + else + { + UARTx->CTRL &= ~INTMask; + } +} + +/** + * @brief Gets interrupt status. + * @param UARTx: UART0~UART5 + INTMask: status to get. + --UART_INTSTS_TXDONE + --UART_INTSTS_RXPE + --UART_INTSTS_RXOV + --UART_INTSTS_TXOV + --UART_INTSTS_RX + * @retval 1:status set + 0:status reset + */ +uint8_t UART_GetINTStatus(UART_Type *UARTx, uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_INTFLAGR(INTMask)); + + if (UARTx->INTSTS&INTMask) + { + return 1; + } + else + { + return 0; + } +} + +/** + * @brief Clears interrupt status. + * @param UARTx: UART0~UART5 + INTMask: status to clear, can use the '|' operator. + --UART_INTSTS_TXDONE + --UART_INTSTS_RXPE + --UART_INTSTS_RXOV + --UART_INTSTS_TXOV + --UART_INTSTS_RX + * @retval None + */ +void UART_ClearINTStatus(UART_Type *UARTx, uint32_t INTMask) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_INTFLAGC(INTMask)); + + UARTx->INTSTS = INTMask; +} + +/** + * @brief Loads send data register. + * @param UARTx: UART0~USART5 + ch: data to send. + * @retval None + */ +void UART_SendData(UART_Type *UARTx, uint8_t ch) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + + UARTx->DATA = ch; +} + +/** + * @brief Reads receive data register. + * @param UARTx: UART0~UART5 + * @retval The received data. + */ +uint8_t UART_ReceiveData(UART_Type *UARTx) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + + return UARTx->DATA; +} + +/** + * @brief Configures UART baudrate. + * @param UARTx: UART0~UART5 + BaudRate: Baudrate value + * @retval None + */ +void UART_BaudrateConfig(UART_Type *UARTx, uint32_t BaudRate) +{ + uint32_t pclk; + uint32_t div; + + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_BAUDRATE(BaudRate)); + + pclk = CLK_GetPCLKFreq(); + div = pclk/BaudRate; + if ((pclk%BaudRate) > (BaudRate/2)) + { + div++; + } + + UARTx->BAUDDIV = div; +} + +/** + * @brief Enables or disables UART Transmitter/Receiver. + * @param UARTx: UART0~UART5 + Mode: + UART_MODE_RX + UART_MODE_TX + NewState: + ENABLE + DISABLE + * @retval None + */ +void UART_Cmd(UART_Type *UARTx, uint32_t Mode, uint32_t NewState) +{ + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + assert_parameters(IS_UART_MODE(Mode)); + assert_parameters(IS_FUNCTIONAL_STATE(NewState)); + + if (NewState == ENABLE) + { + UARTx->CTRL |= Mode; + } + else + { + UARTx->CTRL &= ~Mode; + } +} + +/** + * @brief Gets UART configure information. + * @param[in] UARTx: UART0~UART5 + * @param[out] ConfigInfo: The pointer of UART configuration. + * @retval None + */ +void UART_GetConfigINFO(UART_Type *UARTx, UART_ConfigINFOType *ConfigInfo) +{ + uint32_t tmp1, tmp2, tmp3; + uint32_t pclk; + + /* Check parameters */ + assert_parameters(IS_UART_ALL_INSTANCE(UARTx)); + + tmp1 = UARTx->CTRL; + tmp2 = UARTx->BAUDDIV; + pclk = CLK_GetPCLKFreq(); + tmp3 = UARTx->CTRL2; + + /* Mode_Transmit */ + if (tmp1 & UART_CTRL_TXEN_Msk) + ConfigInfo->Mode_Transmit = 1; + else + ConfigInfo->Mode_Transmit = 0; + + /* Mode_Receive */ + if (tmp1 & UART_CTRL_RXEN_Msk) + ConfigInfo->Mode_Receive = 1; + else + ConfigInfo->Mode_Receive = 0; + + /* Baudrate */ + ConfigInfo->Baudrate = pclk / tmp2; + + /* LSB/MSB */ + if (tmp3 & UART_CTRL2_MSB_Msk) + ConfigInfo->FirstBit = 1; + else + ConfigInfo->FirstBit = 0; + + /* Parity */ + ConfigInfo->Parity = (tmp3 & UART_CTRL2_PMODE) >> UART_CTRL2_PMODE_Pos; +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_version.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_version.c new file mode 100644 index 0000000000..2c723f6262 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_version.c @@ -0,0 +1,25 @@ +/** +******************************************************************************* + * @file lib_version.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Version library. +*******************************************************************************/ +#include "lib_version.h" + +#define Target_DriveVersion DRIVER_VERSION(1, 1) + +/** + * @brief Gets Target driver's current version. + * @param None + * @retval Version value + * Bit[15:8] : Major version + * Bit[7:0] : Minor version + */ +uint16_t Target_GetDriveVersion(void) +{ + return (Target_DriveVersion); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_wdt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_wdt.c new file mode 100644 index 0000000000..00e47707be --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Libraries/Lib_Driver/src/lib_wdt.c @@ -0,0 +1,88 @@ +/** + ****************************************************************************** + * @file lib_wdt.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief WDT library. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ +#include "lib_wdt.h" + +#define WDTPASS_KEY 0xAA5555AA +#define WDTCLR_KEY 0x55AAAA55 + +/** + * @brief Enables WDT timer. + * @param None + * @retval None + */ +void WDT_Enable(void) +{ + PMU->WDTPASS = WDTPASS_KEY; + PMU->WDTEN |= PMU_WDTEN_WDTEN; + + PMU->WDTPASS = WDTPASS_KEY; + PMU->WDTEN |= PMU_WDTEN_WDTEN; +} + +/** + * @brief Disables WDT timer. + * @param None + * @retval None + */ +void WDT_Disable(void) +{ + PMU->WDTPASS = WDTPASS_KEY; + PMU->WDTEN &= ~PMU_WDTEN_WDTEN; + + PMU->WDTPASS = WDTPASS_KEY; + PMU->WDTEN &= ~PMU_WDTEN_WDTEN; +} + +/** + * @brief Clears WDT counter. + * @param None + * @retval None + */ +void WDT_Clear(void) +{ + PMU->WDTCLR = WDTCLR_KEY; +} + +/** + * @brief Configures WDT counting period. + * @param counting period: + WDT_2_SECS + WDT_4_SECS + WDT_8_SECS + WDT_16_SECS + * @retval None + */ +void WDT_SetPeriod(uint32_t period) +{ + uint32_t tmp; + + assert_parameters(IS_WDT_PERIOD(period)); + + tmp = PMU->WDTEN; + tmp &= ~PMU_WDTEN_WDTSEL; + tmp |= period; + PMU->WDTPASS = WDTPASS_KEY; + PMU->WDTEN = tmp; +} + +/** + * @brief Gets WDT counter value. + * @param None + * @retval current counter value. + */ +uint16_t WDT_GetCounterValue(void) +{ + return (PMU->WDTCLR & PMU_WDTCLR_WDTCNT); +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/startup_target.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/startup_target.S new file mode 100644 index 0000000000..b77a821a44 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/startup_target.S @@ -0,0 +1,478 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + .syntax unified + .cpu cortex-m0 + .fpu softvfp + .thumb + +.equ __CHIPINITIAL, 1 + +.global g_pfnVectors +.global Default_Handler + +/* start address for the initialization values of the .data section. +defined in linker script */ +.word _sidata +/* start address for the .data section. defined in linker script */ +.word _sdata +/* end address for the .data section. defined in linker script */ +.word _edata +/* start address for the .bss section. defined in linker script */ +.word _sbss +/* end address for the .bss section. defined in linker script */ +.word _ebss + +/************************************************************************* +* Chip init. +* 1. Load flash configuration +* 2. Load ANA_REG(B/C/D/E) information +* 3. Load ANA_REG10 information + +**************************************************************************/ +.if (__CHIPINITIAL != 0) + .section .chipinit_section.__CHIP_INIT +__CHIP_INIT: +CONFIG1_START: + /*-------------------------------*/ + /* 1. Load flash configuration */ + /* Unlock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + /* Load configure word 0 to 7 + Compare bit[7:0] */ + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1: + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1: + /* Load configure word 8 to 11 + Compare bit 31,24,23:16,8,7:0 */ + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2: + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2: + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2: + /* Lock flash */ + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + /*-------------------------------*/ + /* 2. Load ANA_REG(B/C/D/E) information */ +CONFIG2_START: + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR: + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK: + /* ANA_REGB */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + /* ANA_REGC */ + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + /* ANA_REGD */ + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + /* ANA_REGE */ + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR: + B ANADAT_CHECKSUM2_ERR + /*-------------------------------*/ + /* 3. Load ANA_REG10 information */ +CONFIG3_START: + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR: + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK: + /* ANA_REG10 */ + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR: + B ANADAT10_CHECKSUM2_ERR +.size __CHIP_INIT, .-__CHIP_INIT +.endif + + +.if (__CHIPINITIAL != 0) + .global __CHIP_INIT + .section .chipinit_section.Reset_Handler +.else + .section .text.Reset_Handler +.endif + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + +.if (__CHIPINITIAL != 0) +/* Chip Initiliazation */ + bl __CHIP_INIT +/* System Initiliazation */ + bl SystemInit +.endif + +/* set stack pointer */ + ldr r0, =_estack + mov sp, r0 + +/* Copy the data segment initializers from flash to SRAM */ + movs r1, #0 + b LoopCopyDataInit + +CopyDataInit: + ldr r3, =_sidata + ldr r3, [r3, r1] + str r3, [r0, r1] + adds r1, r1, #4 + +LoopCopyDataInit: + ldr r0, =_sdata + ldr r3, =_edata + adds r2, r0, r1 + cmp r2, r3 + bcc CopyDataInit + ldr r2, =_sbss + b LoopFillZerobss +/* Zero fill the bss segment. */ +FillZerobss: + movs r3, #0 + str r3, [r2] + adds r2, r2, #4 + +LoopFillZerobss: + ldr r3, = _ebss + cmp r2, r3 + bcc FillZerobss + +/* Call static constructors */ + bl __libc_init_array +/* Call the application's entry point.*/ + bl main + +LoopForever: + b LoopForever + +.size Reset_Handler, .-Reset_Handler + +/** + * @brief This is the code that gets called when the processor receives an + * unexpected interrupt. This simply enters an infinite loop, preserving + * the system state for examination by a debugger. + * + * @param None + * @retval : None +*/ + .section .text.Default_Handler,"ax",%progbits +Default_Handler: +Infinite_Loop: + b Infinite_Loop + .size Default_Handler, .-Default_Handler +/****************************************************************************** +* +* The minimal vector table for a Cortex M0. Note that the proper constructs +* must be placed on this to ensure that it ends up at physical address +* 0x0000.0000. +* +******************************************************************************/ + .section .isr_vector,"a",%progbits + .type g_pfnVectors, %object + .size g_pfnVectors, .-g_pfnVectors + + +g_pfnVectors: + .word _estack + .word Reset_Handler + .word NMI_Handler + .word HardFault_Handler + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word 0 + .word SVC_Handler + .word 0 + .word 0 + .word PendSV_Handler + .word SysTick_Handler + + /* External Interrupts */ + .word PMU_IRQHandler /* 0: PMU */ + .word RTC_IRQHandler /* 1: RTC */ + .word U32K0_IRQHandler /* 2: U32K0 */ + .word U32K1_IRQHandler /* 3: U32K1 */ + .word I2C_IRQHandler /* 4: I2C */ + .word SPI1_IRQHandler /* 5: SPI1 */ + .word UART0_IRQHandler /* 6: UART0 */ + .word UART1_IRQHandler /* 7: UART1 */ + .word UART2_IRQHandler /* 8: UART2 */ + .word UART3_IRQHandler /* 9: UART3 */ + .word UART4_IRQHandler /* 10: UART4 */ + .word UART5_IRQHandler /* 11: UART5 */ + .word ISO78160_IRQHandler /* 12: ISO78160 */ + .word ISO78161_IRQHandler /* 13: ISO78161 */ + .word TMR0_IRQHandler /* 14: TMR0 */ + .word TMR1_IRQHandler /* 15: TMR1 */ + .word TMR2_IRQHandler /* 16: TMR2 */ + .word TMR3_IRQHandler /* 17: TMR3 */ + .word PWM0_IRQHandler /* 18: PWM0 */ + .word PWM1_IRQHandler /* 19: PWM1 */ + .word PWM2_IRQHandler /* 20: PWM2 */ + .word PWM3_IRQHandler /* 21: PWM3 */ + .word DMA_IRQHandler /* 22: DMA */ + .word FLASH_IRQHandler /* 23: FLASH */ + .word ANA_IRQHandler /* 24: ANA */ + .word 0 /* 25: Reserved */ + .word 0 /* 26: Reserved */ + .word SPI2_IRQHandler /* 27: SPI2 */ + .word SPI3_IRQHandler /* 28: SPI3 */ + .word 0 /* 29: Reserved */ + .word 0 /* 30: Reserved */ + .word 0 /* 31: Reserved */ + +/******************************************************************************* +* +* Provide weak aliases for each Exception handler to the Default_Handler. +* As they are weak aliases, any function with the same name will override +* this definition. +* +*******************************************************************************/ + + .weak NMI_Handler + .thumb_set NMI_Handler,Default_Handler + + .weak HardFault_Handler + .thumb_set HardFault_Handler,Default_Handler + + .weak SVC_Handler + .thumb_set SVC_Handler,Default_Handler + + .weak PendSV_Handler + .thumb_set PendSV_Handler,Default_Handler + + .weak SysTick_Handler + .thumb_set SysTick_Handler,Default_Handler + + .weak PMU_IRQHandler + .thumb_set PMU_IRQHandler,Default_Handler + + .weak RTC_IRQHandler + .thumb_set RTC_IRQHandler,Default_Handler + + .weak U32K0_IRQHandler + .thumb_set U32K0_IRQHandler,Default_Handler + + .weak U32K1_IRQHandler + .thumb_set U32K1_IRQHandler,Default_Handler + + .weak I2C_IRQHandler + .thumb_set I2C_IRQHandler,Default_Handler + + .weak SPI1_IRQHandler + .thumb_set SPI1_IRQHandler,Default_Handler + + .weak UART0_IRQHandler + .thumb_set UART0_IRQHandler,Default_Handler + + .weak UART1_IRQHandler + .thumb_set UART1_IRQHandler,Default_Handler + + .weak UART2_IRQHandler + .thumb_set UART2_IRQHandler,Default_Handler + + .weak UART3_IRQHandler + .thumb_set UART3_IRQHandler,Default_Handler + + .weak UART4_IRQHandler + .thumb_set UART4_IRQHandler,Default_Handler + + .weak UART5_IRQHandler + .thumb_set UART5_IRQHandler,Default_Handler + + .weak ISO78160_IRQHandler + .thumb_set ISO78160_IRQHandler,Default_Handler + + .weak ISO78161_IRQHandler + .thumb_set ISO78161_IRQHandler,Default_Handler + + .weak TMR0_IRQHandler + .thumb_set TMR0_IRQHandler,Default_Handler + + .weak TMR1_IRQHandler + .thumb_set TMR1_IRQHandler,Default_Handler + + .weak TMR2_IRQHandler + .thumb_set TMR2_IRQHandler,Default_Handler + + .weak TMR3_IRQHandler + .thumb_set TMR3_IRQHandler,Default_Handler + + .weak PWM0_IRQHandler + .thumb_set PWM0_IRQHandler,Default_Handler + + .weak PWM1_IRQHandler + .thumb_set PWM1_IRQHandler,Default_Handler + + .weak PWM2_IRQHandler + .thumb_set PWM2_IRQHandler,Default_Handler + + .weak PWM3_IRQHandler + .thumb_set PWM3_IRQHandler,Default_Handler + + .weak DMA_IRQHandler + .thumb_set DMA_IRQHandler,Default_Handler + + .weak FLASH_IRQHandler + .thumb_set FLASH_IRQHandler,Default_Handler + + .weak ANA_IRQHandler + .thumb_set ANA_IRQHandler,Default_Handler + + .weak SPI2_IRQHandler + .thumb_set SPI2_IRQHandler,Default_Handler + + .weak SPI3_IRQHandler + .thumb_set SPI3_IRQHandler,Default_Handler diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.cproject b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.cproject new file mode 100644 index 0000000000..729d189d6e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.cproject @@ -0,0 +1,226 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.project b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.project new file mode 100644 index 0000000000..15dc954977 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/.project @@ -0,0 +1,183 @@ + + + template + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + Startup_System/startup_target.S + 1 + PARENT-1-PROJECT_LOC/startup_target.S + + + Startup_System/system_target.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/system_target.c + + + User/lib_conf.h + 1 + PARENT-2-PROJECT_LOC/Inc/lib_conf.h + + + User/main.c + 1 + PARENT-2-PROJECT_LOC/Src/main.c + + + User/target_isr.c + 1 + PARENT-2-PROJECT_LOC/Src/target_isr.c + + + User/v_stdio.c + 1 + PARENT-2-PROJECT_LOC/Src/v_stdio.c + + + StdDrivers/Device/lib_CodeRAM.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_CodeRAM.c + + + StdDrivers/Device/lib_LoadNVR.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_LoadNVR.c + + + StdDrivers/Device/lib_cortex.c + 1 + PARENT-5-PROJECT_LOC/Libraries/CMSIS/device/lib_cortex.c + + + StdDrivers/Drivers/lib_adc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc.c + + + StdDrivers/Drivers/lib_adc_tiny.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_adc_tiny.c + + + StdDrivers/Drivers/lib_ana.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_ana.c + + + StdDrivers/Drivers/lib_clk.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_clk.c + + + StdDrivers/Drivers/lib_cmp.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_cmp.c + + + StdDrivers/Drivers/lib_crypt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_crypt.c + + + StdDrivers/Drivers/lib_dma.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_dma.c + + + StdDrivers/Drivers/lib_flash.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_flash.c + + + StdDrivers/Drivers/lib_gpio.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_gpio.c + + + StdDrivers/Drivers/lib_i2c.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_i2c.c + + + StdDrivers/Drivers/lib_iso7816.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_iso7816.c + + + StdDrivers/Drivers/lib_lcd.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_lcd.c + + + StdDrivers/Drivers/lib_misc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_misc.c + + + StdDrivers/Drivers/lib_pmu.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pmu.c + + + StdDrivers/Drivers/lib_pwm.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_pwm.c + + + StdDrivers/Drivers/lib_rtc.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_rtc.c + + + StdDrivers/Drivers/lib_spi.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_spi.c + + + StdDrivers/Drivers/lib_tmr.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_tmr.c + + + StdDrivers/Drivers/lib_u32k.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_u32k.c + + + StdDrivers/Drivers/lib_uart.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_uart.c + + + StdDrivers/Drivers/lib_version.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_version.c + + + StdDrivers/Drivers/lib_wdt.c + 1 + PARENT-5-PROJECT_LOC/Libraries/Lib_Driver/src/lib_wdt.c + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/Target_FLASH.ld b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/Target_FLASH.ld new file mode 100644 index 0000000000..0febb1b7dc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/ECLIPSE/template/Target_FLASH.ld @@ -0,0 +1,183 @@ +/* +***************************************************************************** +** + +** File : Target_FLASH.ld +** +** Abstract : Linker script for Target Device with +** 512Byte FLASH, 64KByte RAM +** +** Set heap size, stack size and stack location according +** to application requirements. +** +** Set memory bank area and size if external memory is used. +** +** Date : 2019-10-28 +** +***************************************************************************** +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +/* Highest address of the user mode stack */ +_estack = 0x20010000; /* end of RAM */ +/* Generate a link error if heap and stack don't fit into RAM */ +_Min_Heap_Size = 0x400; /* required amount of heap */ +_Min_Stack_Size = 0x1000; /* required amount of stack */ + +/* Specify the memory areas */ +MEMORY +{ +RAM (xrw) : ORIGIN = 0x20000000, LENGTH = 64K +FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 512K +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into FLASH */ + .isr_vector : AT(0) + { + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } >FLASH + + .chipinit_section : AT(0xC0) + { + . = ALIGN(4); + *(.chipinit_section) /* .text sections (code) */ + *(.chipinit_section*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* The program code and other data goes into FLASH */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + + KEEP (*(.init)) + KEEP (*(.fini)) + + . = ALIGN(4); + _etext = .; /* define a global symbols at end of code */ + } >FLASH + + /* Constant data goes into FLASH */ + .rodata : + { + . = ALIGN(4); + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + . = ALIGN(4); + } >FLASH + + .ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } >FLASH + .ARM : { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } >FLASH + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } >FLASH + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } >FLASH + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } >FLASH + + /* VMA, Virtual Memory Address*/ + /* LMA, Load Memeory Address, address that the section stores, and TO BE LOAD to VMA before it is executed or accessed */ + + .ram_exec : + { + . = ALIGN(4); + KEEP( *(.ram_exec)) + . = ALIGN(4); + } > RAM AT> FLASH + + /* used by the startup to initialize data */ + _sidata = LOADADDR(.data); + + /* Initialized data sections goes into RAM, load LMA copy after code */ + .data : + { + . = ALIGN(4); + _sdata = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + + . = ALIGN(4); + _edata = .; /* define a global symbol at data end */ + } >RAM AT> FLASH + + + /* Uninitialized data section */ + . = ALIGN(4); + .bss : + { + /* This is used by the startup in order to initialize the .bss secion */ + _sbss = .; /* define a global symbol at bss start */ + __bss_start__ = _sbss; + *(.bss) + *(.bss*) + *(COMMON) + + . = ALIGN(4); + _ebss = .; /* define a global symbol at bss end */ + __bss_end__ = _ebss; + } >RAM + + /* User_heap_stack section, used to check that there is enough RAM left */ + ._user_heap_stack : + { + . = ALIGN(8); + PROVIDE ( end = . ); + PROVIDE ( _end = . ); + . = . + _Min_Heap_Size; + . = . + _Min_Stack_Size; + . = ALIGN(8); + } >RAM + + + + /* Remove information from the standard libraries */ + /DISCARD/ : + { + libc.a ( * ) + libm.a ( * ) + libgcc.a ( * ) + } + + .ARM.attributes 0 : { *(.ARM.attributes) } +} + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/board.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/board.c new file mode 100644 index 0000000000..55d92f951f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/board.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-07-24 Tanek the first version + * 2018-11-12 Ernest Chen modify copyright + */ + +#include +#include +#include + +#define _SCB_BASE (0xE000E010UL) +#define _SYSTICK_CTRL (*(rt_uint32_t *)(_SCB_BASE + 0x0)) +#define _SYSTICK_LOAD (*(rt_uint32_t *)(_SCB_BASE + 0x4)) +#define _SYSTICK_VAL (*(rt_uint32_t *)(_SCB_BASE + 0x8)) +#define _SYSTICK_CALIB (*(rt_uint32_t *)(_SCB_BASE + 0xC)) +#define _SYSTICK_PRI (*(rt_uint8_t *)(0xE000ED23UL)) + +// Updates the variable SystemCoreClock and must be called +// whenever the core clock is changed during program execution. +extern void SystemCoreClockUpdate(void); + +// Holds the system core clock, which is the system clock +// frequency supplied to the SysTick timer and the processor +// core clock. +extern uint32_t SystemCoreClock; + +static uint32_t _SysTick_Config(rt_uint32_t ticks) +{ + if ((ticks - 1) > 0xFFFFFF) + { + return 1; + } + + _SYSTICK_LOAD = ticks - 1; + _SYSTICK_PRI = 0xFF; + _SYSTICK_VAL = 0; + _SYSTICK_CTRL = 0x07; + + return 0; +} + +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) +#define RT_HEAP_SIZE 1024 +static uint32_t rt_heap[RT_HEAP_SIZE]; // heap default size: 4K(1024 * 4) +RT_WEAK void *rt_heap_begin_get(void) +{ + return rt_heap; +} + +RT_WEAK void *rt_heap_end_get(void) +{ + return rt_heap + RT_HEAP_SIZE; +} +#endif + +/** + * This function will initial your board. + */ +void rt_hw_board_init() +{ + /* System Clock Update */ + SystemCoreClockUpdate(); + + /* System Tick Configuration */ + _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + + /* Call components board initial (use INIT_BOARD_EXPORT()) */ +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) + rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); +#endif +} + +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_dirent.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_dirent.h new file mode 100644 index 0000000000..c3a19878ec --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_dirent.h @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef LIBC_DIRENT_H__ +#define LIBC_DIRENT_H__ + +#define DT_UNKNOWN 0x00 +#define DT_REG 0x01 +#define DT_DIR 0x02 + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_errno.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_errno.h new file mode 100644 index 0000000000..0f3bc7635a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_errno.h @@ -0,0 +1,206 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2016-11-12 Bernard The first version + */ + +#ifndef LIBC_ERRNO_H__ +#define LIBC_ERRNO_H__ + +#include + +#if defined(RT_USING_NEWLIB) || defined(_WIN32) +/* use errno.h file in toolchains */ +#include +#endif + +#if defined(__CC_ARM) +/* +defined in armcc/errno.h + +#define EDOM 1 +#define ERANGE 2 +#define EILSEQ 4 +#define ESIGNUM 3 +#define EINVAL 5 +#define ENOMEM 6 +*/ +#define ERROR_BASE_NO 7 + +#elif defined(__IAR_SYSTEMS_ICC__) +/* defined in iar/errno.h +#define EDOM 33 +#define ERANGE 34 +#define EFPOS 35 +#define EILSEQ 36 +*/ +#define ERROR_BASE_NO 36 + +#else + +#define ERROR_BASE_NO 0 +#endif + +#if !defined(RT_USING_NEWLIB) && !defined(_WIN32) + +#define EPERM (ERROR_BASE_NO + 1) +#define ENOENT (ERROR_BASE_NO + 2) +#define ESRCH (ERROR_BASE_NO + 3) +#define EINTR (ERROR_BASE_NO + 4) +#define EIO (ERROR_BASE_NO + 5) +#define ENXIO (ERROR_BASE_NO + 6) +#define E2BIG (ERROR_BASE_NO + 7) +#define ENOEXEC (ERROR_BASE_NO + 8) +#define EBADF (ERROR_BASE_NO + 9) +#define ECHILD (ERROR_BASE_NO + 10) +#define EAGAIN (ERROR_BASE_NO + 11) + +#ifndef ENOMEM +#define ENOMEM (ERROR_BASE_NO + 12) +#endif + +#define EACCES (ERROR_BASE_NO + 13) +#define EFAULT (ERROR_BASE_NO + 14) +#define ENOTBLK (ERROR_BASE_NO + 15) +#define EBUSY (ERROR_BASE_NO + 16) +#define EEXIST (ERROR_BASE_NO + 17) +#define EXDEV (ERROR_BASE_NO + 18) +#define ENODEV (ERROR_BASE_NO + 19) +#define ENOTDIR (ERROR_BASE_NO + 20) +#define EISDIR (ERROR_BASE_NO + 21) + +#ifndef EINVAL +#define EINVAL (ERROR_BASE_NO + 22) +#endif + +#define ENFILE (ERROR_BASE_NO + 23) +#define EMFILE (ERROR_BASE_NO + 24) +#define ENOTTY (ERROR_BASE_NO + 25) +#define ETXTBSY (ERROR_BASE_NO + 26) +#define EFBIG (ERROR_BASE_NO + 27) +#define ENOSPC (ERROR_BASE_NO + 28) +#define ESPIPE (ERROR_BASE_NO + 29) +#define EROFS (ERROR_BASE_NO + 30) +#define EMLINK (ERROR_BASE_NO + 31) +#define EPIPE (ERROR_BASE_NO + 32) + +#ifndef EDOM +#define EDOM (ERROR_BASE_NO + 33) +#endif + +#ifndef ERANGE +#define ERANGE (ERROR_BASE_NO + 34) +#endif + +#define EDEADLK (ERROR_BASE_NO + 35) +#define ENAMETOOLONG (ERROR_BASE_NO + 36) +#define ENOLCK (ERROR_BASE_NO + 37) +#define ENOSYS (ERROR_BASE_NO + 38) +#define ENOTEMPTY (ERROR_BASE_NO + 39) +#define ELOOP (ERROR_BASE_NO + 40) +#define EWOULDBLOCK EAGAIN +#define ENOMSG (ERROR_BASE_NO + 42) +#define EIDRM (ERROR_BASE_NO + 43) +#define ECHRNG (ERROR_BASE_NO + 44) +#define EL2NSYNC (ERROR_BASE_NO + 45) +#define EL3HLT (ERROR_BASE_NO + 46) +#define EL3RST (ERROR_BASE_NO + 47) +#define ELNRNG (ERROR_BASE_NO + 48) +#define EUNATCH (ERROR_BASE_NO + 49) +#define ENOCSI (ERROR_BASE_NO + 50) +#define EL2HLT (ERROR_BASE_NO + 51) +#define EBADE (ERROR_BASE_NO + 52) +#define EBADR (ERROR_BASE_NO + 53) +#define EXFULL (ERROR_BASE_NO + 54) +#define ENOANO (ERROR_BASE_NO + 55) +#define EBADRQC (ERROR_BASE_NO + 56) +#define EBADSLT (ERROR_BASE_NO + 57) +#define EDEADLOCK EDEADLK +#define EBFONT (ERROR_BASE_NO + 59) +#define ENOSTR (ERROR_BASE_NO + 60) +#define ENODATA (ERROR_BASE_NO + 61) +#define ETIME (ERROR_BASE_NO + 62) +#define ENOSR (ERROR_BASE_NO + 63) +#define ENONET (ERROR_BASE_NO + 64) +#define ENOPKG (ERROR_BASE_NO + 65) +#define EREMOTE (ERROR_BASE_NO + 66) +#define ENOLINK (ERROR_BASE_NO + 67) +#define EADV (ERROR_BASE_NO + 68) +#define ESRMNT (ERROR_BASE_NO + 69) +#define ECOMM (ERROR_BASE_NO + 70) +#define EPROTO (ERROR_BASE_NO + 71) +#define EMULTIHOP (ERROR_BASE_NO + 72) +#define EDOTDOT (ERROR_BASE_NO + 73) +#define EBADMSG (ERROR_BASE_NO + 74) +#define EOVERFLOW (ERROR_BASE_NO + 75) +#define ENOTUNIQ (ERROR_BASE_NO + 76) +#define EBADFD (ERROR_BASE_NO + 77) +#define EREMCHG (ERROR_BASE_NO + 78) +#define ELIBACC (ERROR_BASE_NO + 79) +#define ELIBBAD (ERROR_BASE_NO + 80) +#define ELIBSCN (ERROR_BASE_NO + 81) +#define ELIBMAX (ERROR_BASE_NO + 82) +#define ELIBEXEC (ERROR_BASE_NO + 83) + +#ifndef EILSEQ +#define EILSEQ (ERROR_BASE_NO + 84) +#endif + +#define ERESTART (ERROR_BASE_NO + 85) +#define ESTRPIPE (ERROR_BASE_NO + 86) +#define EUSERS (ERROR_BASE_NO + 87) +#define ENOTSOCK (ERROR_BASE_NO + 88) +#define EDESTADDRREQ (ERROR_BASE_NO + 89) +#define EMSGSIZE (ERROR_BASE_NO + 90) +#define EPROTOTYPE (ERROR_BASE_NO + 91) +#define ENOPROTOOPT (ERROR_BASE_NO + 92) +#define EPROTONOSUPPORT (ERROR_BASE_NO + 93) +#define ESOCKTNOSUPPORT (ERROR_BASE_NO + 94) +#define EOPNOTSUPP (ERROR_BASE_NO + 95) +#define ENOTSUP EOPNOTSUPP +#define EPFNOSUPPORT (ERROR_BASE_NO + 96) +#define EAFNOSUPPORT (ERROR_BASE_NO + 97) +#define EADDRINUSE (ERROR_BASE_NO + 98) +#define EADDRNOTAVAIL (ERROR_BASE_NO + 99) +#define ENETDOWN (ERROR_BASE_NO + 100) +#define ENETUNREACH (ERROR_BASE_NO + 101) +#define ENETRESET (ERROR_BASE_NO + 102) +#define ECONNABORTED (ERROR_BASE_NO + 103) +#define ECONNRESET (ERROR_BASE_NO + 104) +#define ENOBUFS (ERROR_BASE_NO + 105) +#define EISCONN (ERROR_BASE_NO + 106) +#define ENOTCONN (ERROR_BASE_NO + 107) +#define ESHUTDOWN (ERROR_BASE_NO + 108) +#define ETOOMANYREFS (ERROR_BASE_NO + 109) +#define ETIMEDOUT (ERROR_BASE_NO + 110) +#define ECONNREFUSED (ERROR_BASE_NO + 111) +#define EHOSTDOWN (ERROR_BASE_NO + 112) +#define EHOSTUNREACH (ERROR_BASE_NO + 113) +#define EALREADY (ERROR_BASE_NO + 114) +#define EINPROGRESS (ERROR_BASE_NO + 115) +#define ESTALE (ERROR_BASE_NO + 116) +#define EUCLEAN (ERROR_BASE_NO + 117) +#define ENOTNAM (ERROR_BASE_NO + 118) +#define ENAVAIL (ERROR_BASE_NO + 119) +#define EISNAM (ERROR_BASE_NO + 120) +#define EREMOTEIO (ERROR_BASE_NO + 121) +#define EDQUOT (ERROR_BASE_NO + 122) +#define ENOMEDIUM (ERROR_BASE_NO + 123) +#define EMEDIUMTYPE (ERROR_BASE_NO + 124) +#define ECANCELED (ERROR_BASE_NO + 125) +#define ENOKEY (ERROR_BASE_NO + 126) +#define EKEYEXPIRED (ERROR_BASE_NO + 127) +#define EKEYREVOKED (ERROR_BASE_NO + 128) +#define EKEYREJECTED (ERROR_BASE_NO + 129) +#define EOWNERDEAD (ERROR_BASE_NO + 130) +#define ENOTRECOVERABLE (ERROR_BASE_NO + 131) +#define ERFKILL (ERROR_BASE_NO + 132) +#define EHWPOISON (ERROR_BASE_NO + 133) + +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fcntl.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fcntl.h new file mode 100644 index 0000000000..1b7c69b1f4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fcntl.h @@ -0,0 +1,102 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * File : libc_fcntl.h + * + * Change Logs: + * Date Author Notes + * 2018-02-07 Bernard Add O_DIRECTORY definition in NEWLIB mode. + * 2018-02-09 Bernard Add O_BINARY definition + */ + +#ifndef LIBC_FCNTL_H__ +#define LIBC_FCNTL_H__ + +#if defined(RT_USING_NEWLIB) || defined(_WIN32) +#include + +#ifndef O_NONBLOCK +#define O_NONBLOCK 0x4000 +#endif + +#if defined(_WIN32) +#define O_ACCMODE (_O_RDONLY | _O_WRONLY | _O_RDWR) +#endif + +#ifndef F_GETFL +#define F_GETFL 3 +#endif +#ifndef F_SETFL +#define F_SETFL 4 +#endif + +#ifndef O_DIRECTORY +#define O_DIRECTORY 0x200000 +#endif + +#ifndef O_BINARY +#ifdef _O_BINARY +#define O_BINARY _O_BINARY +#else +#define O_BINARY 0 +#endif +#endif + +#else +#define O_RDONLY 00 +#define O_WRONLY 01 +#define O_RDWR 02 + +#define O_CREAT 0100 +#define O_EXCL 0200 +#define O_NOCTTY 0400 +#define O_TRUNC 01000 +#define O_APPEND 02000 +#define O_NONBLOCK 04000 +#define O_DSYNC 010000 +#define O_SYNC 04010000 +#define O_RSYNC 04010000 +#define O_BINARY 0100000 +#define O_DIRECTORY 0200000 +#define O_NOFOLLOW 0400000 +#define O_CLOEXEC 02000000 + +#define O_ASYNC 020000 +#define O_DIRECT 040000 +#define O_LARGEFILE 0100000 +#define O_NOATIME 01000000 +#define O_PATH 010000000 +#define O_TMPFILE 020200000 +#define O_NDELAY O_NONBLOCK + +#define O_SEARCH O_PATH +#define O_EXEC O_PATH + +#define O_ACCMODE (03|O_SEARCH) + +#define F_DUPFD 0 +#define F_GETFD 1 +#define F_SETFD 2 +#define F_GETFL 3 +#define F_SETFL 4 + +#define F_SETOWN 8 +#define F_GETOWN 9 +#define F_SETSIG 10 +#define F_GETSIG 11 + +#define F_GETLK 12 +#define F_SETLK 13 +#define F_SETLKW 14 + +#define F_SETOWN_EX 15 +#define F_GETOWN_EX 16 + +#define F_GETOWNER_UIDS 17 +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fdset.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fdset.h new file mode 100644 index 0000000000..ecd965cd22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_fdset.h @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * File : libc_errno.h + * + * Change Logs: + * Date Author Notes + * 2017-10-30 Bernard The first version + */ + +#ifndef LIBC_FDSET_H__ +#define LIBC_FDSET_H__ + +#include + +#if defined(RT_USING_NEWLIB) || defined(_WIN32) +#include +#if defined(HAVE_SYS_SELECT_H) +#include +#endif + +#else + +#ifdef SAL_USING_POSIX + +#ifdef FD_SETSIZE +#undef FD_SETSIZE +#endif + +#define FD_SETSIZE DFS_FD_MAX +#endif + +# ifndef FD_SETSIZE +# define FD_SETSIZE 32 +# endif + +# define NBBY 8 /* number of bits in a byte */ + +typedef long fd_mask; +# define NFDBITS (sizeof (fd_mask) * NBBY) /* bits per mask */ +# ifndef howmany +# define howmany(x,y) (((x)+((y)-1))/(y)) +# endif + +/* We use a macro for fd_set so that including Sockets.h afterwards + can work. */ +typedef struct _types_fd_set { + fd_mask fds_bits[howmany(FD_SETSIZE, NFDBITS)]; +} _types_fd_set; + +#define fd_set _types_fd_set + +# define FD_SET(n, p) ((p)->fds_bits[(n)/NFDBITS] |= (1L << ((n) % NFDBITS))) +# define FD_CLR(n, p) ((p)->fds_bits[(n)/NFDBITS] &= ~(1L << ((n) % NFDBITS))) +# define FD_ISSET(n, p) ((p)->fds_bits[(n)/NFDBITS] & (1L << ((n) % NFDBITS))) +# define FD_ZERO(p) memset((void*)(p), 0, sizeof(*(p))) + +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_ioctl.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_ioctl.h new file mode 100644 index 0000000000..ef5a5257a8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_ioctl.h @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * File : libc_ioctl.h + * + * Change Logs: + * Date Author Notes + * 2017-01-21 Bernard the first version + */ + +#ifndef LIBC_IOCTL_H__ +#define LIBC_IOCTL_H__ + +#define _IOC(a,b,c,d) ( ((a)<<30) | ((b)<<8) | (c) | ((d)<<16) ) +#define _IOC_NONE 0U +#define _IOC_WRITE 1U +#define _IOC_READ 2U + +#ifndef _WIN32 +#define _IO(a,b) _IOC(_IOC_NONE,(a),(b),0) +#define _IOW(a,b,c) _IOC(_IOC_WRITE,(a),(b),sizeof(c)) +#define _IOR(a,b,c) _IOC(_IOC_READ,(a),(b),sizeof(c)) +#define _IOWR(a,b,c) _IOC(_IOC_READ|_IOC_WRITE,(a),(b),sizeof(c)) + +#define FIONREAD _IOR('f', 127, int) /* get # bytes to read */ +#define FIONBIO _IOW('f', 126, int) /* set/clear non-blocking i/o */ +#define FIONWRITE _IOR('f', 121, int) /* get # bytes outstanding + * in send queue. */ +#endif + +#define TCGETS 0x5401 +#define TCSETS 0x5402 +#define TCSETSW 0x5403 +#define TCSETSF 0x5404 +#define TCGETA 0x5405 +#define TCSETA 0x5406 +#define TCSETAW 0x5407 +#define TCSETAF 0x5408 +#define TCSBRK 0x5409 +#define TCXONC 0x540A +#define TCFLSH 0x540B +#define TIOCEXCL 0x540C +#define TIOCNXCL 0x540D +#define TIOCSCTTY 0x540E +#define TIOCGPGRP 0x540F +#define TIOCSPGRP 0x5410 +#define TIOCOUTQ 0x5411 +#define TIOCSTI 0x5412 +#define TIOCGWINSZ 0x5413 +#define TIOCSWINSZ 0x5414 +#define TIOCMGET 0x5415 +#define TIOCMBIS 0x5416 +#define TIOCMBIC 0x5417 +#define TIOCMSET 0x5418 +#define TIOCGSOFTCAR 0x5419 +#define TIOCSSOFTCAR 0x541A +// #define FIONREAD 0x541B +#define TIOCINQ FIONREAD +#define TIOCLINUX 0x541C +#define TIOCCONS 0x541D +#define TIOCGSERIAL 0x541E +#define TIOCSSERIAL 0x541F +#define TIOCPKT 0x5420 +// #define FIONBIO 0x5421 +#define TIOCNOTTY 0x5422 +#define TIOCSETD 0x5423 +#define TIOCGETD 0x5424 +#define TCSBRKP 0x5425 +#define TIOCSBRK 0x5427 +#define TIOCCBRK 0x5428 +#define TIOCGSID 0x5429 +#define TIOCGRS485 0x542E +#define TIOCSRS485 0x542F +#define TIOCGPTN 0x80045430 +#define TIOCSPTLCK 0x40045431 +#define TIOCGDEV 0x80045432 +#define TCGETX 0x5432 +#define TCSETX 0x5433 +#define TCSETXF 0x5434 +#define TCSETXW 0x5435 +#define TIOCSIG 0x40045436 +#define TIOCVHANGUP 0x5437 +#define TIOCGPKT 0x80045438 +#define TIOCGPTLCK 0x80045439 +#define TIOCGEXCL 0x80045440 + +#define FIONCLEX 0x5450 +#define FIOCLEX 0x5451 + +#ifndef _WIN32 +#define FIOASYNC 0x5452 +#endif + +#define TIOCSERCONFIG 0x5453 +#define TIOCSERGWILD 0x5454 +#define TIOCSERSWILD 0x5455 +#define TIOCGLCKTRMIOS 0x5456 +#define TIOCSLCKTRMIOS 0x5457 +#define TIOCSERGSTRUCT 0x5458 +#define TIOCSERGETLSR 0x5459 +#define TIOCSERGETMULTI 0x545A +#define TIOCSERSETMULTI 0x545B + +#define TIOCMIWAIT 0x545C +#define TIOCGICOUNT 0x545D +#define FIOQSIZE 0x5460 + +#define TIOCPKT_DATA 0 +#define TIOCPKT_FLUSHREAD 1 +#define TIOCPKT_FLUSHWRITE 2 +#define TIOCPKT_STOP 4 +#define TIOCPKT_START 8 +#define TIOCPKT_NOSTOP 16 +#define TIOCPKT_DOSTOP 32 +#define TIOCPKT_IOCTL 64 + +#define TIOCSER_TEMT 0x01 + +struct winsize { + unsigned short ws_row; + unsigned short ws_col; + unsigned short ws_xpixel; + unsigned short ws_ypixel; +}; + +#define TIOCM_LE 0x001 +#define TIOCM_DTR 0x002 +#define TIOCM_RTS 0x004 +#define TIOCM_ST 0x008 +#define TIOCM_SR 0x010 +#define TIOCM_CTS 0x020 +#define TIOCM_CAR 0x040 +#define TIOCM_RNG 0x080 +#define TIOCM_DSR 0x100 +#define TIOCM_CD TIOCM_CAR +#define TIOCM_RI TIOCM_RNG +#define TIOCM_OUT1 0x2000 +#define TIOCM_OUT2 0x4000 +#define TIOCM_LOOP 0x8000 + +#define N_TTY 0 +#define N_SLIP 1 +#define N_MOUSE 2 +#define N_PPP 3 +#define N_STRIP 4 +#define N_AX25 5 +#define N_X25 6 +#define N_6PACK 7 +#define N_MASC 8 +#define N_R3964 9 +#define N_PROFIBUS_FDL 10 +#define N_IRDA 11 +#define N_SMSBLOCK 12 +#define N_HDLC 13 +#define N_SYNC_PPP 14 +#define N_HCI 15 + +#define FIOSETOWN 0x8901 +#define SIOCSPGRP 0x8902 +#define FIOGETOWN 0x8903 +#define SIOCGPGRP 0x8904 +// #define SIOCATMARK 0x8905 +#define SIOCGSTAMP 0x8906 +#define SIOCGSTAMPNS 0x8907 + +#define SIOCADDRT 0x890B +#define SIOCDELRT 0x890C +#define SIOCRTMSG 0x890D + +#define SIOCGIFNAME 0x8910 +#define SIOCSIFLINK 0x8911 +#define SIOCGIFCONF 0x8912 +#define SIOCGIFFLAGS 0x8913 +#define SIOCSIFFLAGS 0x8914 +#define SIOCGIFADDR 0x8915 +#define SIOCSIFADDR 0x8916 +#define SIOCGIFDSTADDR 0x8917 +#define SIOCSIFDSTADDR 0x8918 +#define SIOCGIFBRDADDR 0x8919 +#define SIOCSIFBRDADDR 0x891a +#define SIOCGIFNETMASK 0x891b +#define SIOCSIFNETMASK 0x891c +#define SIOCGIFMETRIC 0x891d +#define SIOCSIFMETRIC 0x891e +#define SIOCGIFMEM 0x891f +#define SIOCSIFMEM 0x8920 +#define SIOCGIFMTU 0x8921 +#define SIOCSIFMTU 0x8922 +#define SIOCSIFNAME 0x8923 +#define SIOCSIFHWADDR 0x8924 +#define SIOCGIFENCAP 0x8925 +#define SIOCSIFENCAP 0x8926 +#define SIOCGIFHWADDR 0x8927 +#define SIOCGIFSLAVE 0x8929 +#define SIOCSIFSLAVE 0x8930 +#define SIOCADDMULTI 0x8931 +#define SIOCDELMULTI 0x8932 +#define SIOCGIFINDEX 0x8933 +#define SIOGIFINDEX SIOCGIFINDEX +#define SIOCSIFPFLAGS 0x8934 +#define SIOCGIFPFLAGS 0x8935 +#define SIOCDIFADDR 0x8936 +#define SIOCSIFHWBROADCAST 0x8937 +#define SIOCGIFCOUNT 0x8938 + +#define SIOCGIFBR 0x8940 +#define SIOCSIFBR 0x8941 + +#define SIOCGIFTXQLEN 0x8942 +#define SIOCSIFTXQLEN 0x8943 + +#define SIOCDARP 0x8953 +#define SIOCGARP 0x8954 +#define SIOCSARP 0x8955 + +#define SIOCDRARP 0x8960 +#define SIOCGRARP 0x8961 +#define SIOCSRARP 0x8962 + +#define SIOCGIFMAP 0x8970 +#define SIOCSIFMAP 0x8971 + +#define SIOCADDDLCI 0x8980 +#define SIOCDELDLCI 0x8981 + +#define SIOCDEVPRIVATE 0x89F0 +#define SIOCPROTOPRIVATE 0x89E0 + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_signal.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_signal.h new file mode 100644 index 0000000000..71f8de125d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_signal.h @@ -0,0 +1,188 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-09-12 Bernard The first version + */ + +#ifndef LIBC_SIGNAL_H__ +#define LIBC_SIGNAL_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef HAVE_CCONFIG_H +#include +#endif + +#ifndef HAVE_SIGVAL +/* Signal Generation and Delivery, P1003.1b-1993, p. 63 + NOTE: P1003.1c/D10, p. 34 adds sigev_notify_function and + sigev_notify_attributes to the sigevent structure. */ + +union sigval +{ + int sival_int; /* Integer signal value */ + void *sival_ptr; /* Pointer signal value */ +}; +#endif + +#ifndef HAVE_SIGEVENT +struct sigevent +{ + int sigev_notify; /* Notification type */ + int sigev_signo; /* Signal number */ + union sigval sigev_value; /* Signal value */ + void (*sigev_notify_function)( union sigval ); + /* Notification function */ + void *sigev_notify_attributes; /* Notification Attributes, really pthread_attr_t */ +}; +#endif + +#ifndef HAVE_SIGINFO +struct siginfo +{ + rt_uint16_t si_signo; + rt_uint16_t si_code; + + union sigval si_value; +}; +typedef struct siginfo siginfo_t; +#endif + +#define SI_USER 0x01 /* Signal sent by kill(). */ +#define SI_QUEUE 0x02 /* Signal sent by sigqueue(). */ +#define SI_TIMER 0x03 /* Signal generated by expiration of a + timer set by timer_settime(). */ +#define SI_ASYNCIO 0x04 /* Signal generated by completion of an + asynchronous I/O request. */ +#define SI_MESGQ 0x05 /* Signal generated by arrival of a + message on an empty message queue. */ + +#ifdef RT_USING_NEWLIB +#include +#endif + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +#include +typedef unsigned long sigset_t; + +#define SIGHUP 1 +/* #define SIGINT 2 */ +#define SIGQUIT 3 +/* #define SIGILL 4 */ +#define SIGTRAP 5 +/* #define SIGABRT 6 */ +#define SIGEMT 7 +/* #define SIGFPE 8 */ +#define SIGKILL 9 +#define SIGBUS 10 +/* #define SIGSEGV 11 */ +#define SIGSYS 12 +#define SIGPIPE 13 +#define SIGALRM 14 +/* #define SIGTERM 15 */ +#define SIGURG 16 +#define SIGSTOP 17 +#define SIGTSTP 18 +#define SIGCONT 19 +#define SIGCHLD 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGPOLL 23 +#define SIGWINCH 24 +/* #define SIGUSR1 25 */ +/* #define SIGUSR2 26 */ +#define SIGRTMIN 27 +#define SIGRTMAX 31 +#define NSIG 32 + +#define SIG_SETMASK 0 /* set mask with sigprocmask() */ +#define SIG_BLOCK 1 /* set of signals to block */ +#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ + +typedef void (*_sig_func_ptr)(int); + +struct sigaction +{ + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; +}; + +#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) +#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) +#define sigemptyset(what) (*(what) = 0, 0) +#define sigfillset(what) (*(what) = ~(0), 0) +#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) + +int sigprocmask (int how, const sigset_t *set, sigset_t *oset); +int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); + +#elif defined(__IAR_SYSTEMS_ICC__) +#include +typedef unsigned long sigset_t; + +#define SIGHUP 1 +#define SIGINT 2 +#define SIGQUIT 3 +#define SIGILL 4 +#define SIGTRAP 5 +/* #define SIGABRT 6 */ +#define SIGEMT 7 +#define SIGFPE 8 +#define SIGKILL 9 +#define SIGBUS 10 +#define SIGSEGV 11 +#define SIGSYS 12 +#define SIGPIPE 13 +#define SIGALRM 14 +#define SIGTERM 15 +#define SIGURG 16 +#define SIGSTOP 17 +#define SIGTSTP 18 +#define SIGCONT 19 +#define SIGCHLD 20 +#define SIGTTIN 21 +#define SIGTTOU 22 +#define SIGPOLL 23 +#define SIGWINCH 24 +#define SIGUSR1 25 +#define SIGUSR2 26 +#define SIGRTMIN 27 +#define SIGRTMAX 31 +#define NSIG 32 + +#define SIG_SETMASK 0 /* set mask with sigprocmask() */ +#define SIG_BLOCK 1 /* set of signals to block */ +#define SIG_UNBLOCK 2 /* set of signals to, well, unblock */ + +typedef void (*_sig_func_ptr)(int); + +struct sigaction +{ + _sig_func_ptr sa_handler; + sigset_t sa_mask; + int sa_flags; +}; + +#define sigaddset(what,sig) (*(what) |= (1<<(sig)), 0) +#define sigdelset(what,sig) (*(what) &= ~(1<<(sig)), 0) +#define sigemptyset(what) (*(what) = 0, 0) +#define sigfillset(what) (*(what) = ~(0), 0) +#define sigismember(what,sig) (((*(what)) & (1<<(sig))) != 0) + +int sigprocmask (int how, const sigset_t *set, sigset_t *oset); +int sigaction(int signum, const struct sigaction *act, struct sigaction *oldact); +#endif + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_stat.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_stat.h new file mode 100644 index 0000000000..9079d1ef15 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/libc/libc_stat.h @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef LIBC_STAT_H__ +#define LIBC_STAT_H__ + +#include + +#if defined(RT_USING_NEWLIB) +/* use header file of newlib */ +#include + +#elif defined(_WIN32) +#include + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +#define S_IFSOCK 0140000 +#define S_IFLNK 0120000 +#define S_IFBLK 0060000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) + +#else +#define S_IFMT 00170000 +#define S_IFSOCK 0140000 +#define S_IFLNK 0120000 +#define S_IFREG 0100000 +#define S_IFBLK 0060000 +#define S_IFDIR 0040000 +#define S_IFCHR 0020000 +#define S_IFIFO 0010000 +#define S_ISUID 0004000 +#define S_ISGID 0002000 +#define S_ISVTX 0001000 + +#define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) +#define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) +#define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) +#define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) +#define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) +#define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) +#define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) + +#define S_IRWXU 00700 +#define S_IRUSR 00400 +#define S_IWUSR 00200 +#define S_IXUSR 00100 + +#define S_IRWXG 00070 +#define S_IRGRP 00040 +#define S_IWGRP 00020 +#define S_IXGRP 00010 + +#define S_IRWXO 00007 +#define S_IROTH 00004 +#define S_IWOTH 00002 +#define S_IXOTH 00001 + +/* stat structure */ +#include +#include + +struct stat +{ + struct rt_device *st_dev; + uint16_t st_ino; + uint16_t st_mode; + uint16_t st_nlink; + uint16_t st_uid; + uint16_t st_gid; + struct rt_device *st_rdev; + uint32_t st_size; + time_t st_atime; + long st_spare1; + time_t st_mtime; + long st_spare2; + time_t st_ctime; + long st_spare3; + uint32_t st_blksize; + uint32_t st_blocks; + long st_spare4[2]; +}; + +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdbg.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdbg.h new file mode 100644 index 0000000000..a2dfbd9697 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdbg.h @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2016-11-12 Bernard The first version + * 2018-05-25 armink Add simple API, such as LOG_D, LOG_E + */ + +/* + * The macro definitions for debug + * + * These macros are defined in static. If you want to use debug macro, you can + * use as following code: + * + * In your C/C++ file, enable/disable DEBUG_ENABLE macro, and then include this + * header file. + * + * #define DBG_TAG "MOD_TAG" + * #define DBG_LVL DBG_INFO + * #include // must after of DBG_LVL, DBG_TAG or other options + * + * Then in your C/C++ file, you can use LOG_X macro to print out logs: + * LOG_D("this is a debug log!"); + * LOG_E("this is a error log!"); + */ + +#ifndef RT_DBG_H__ +#define RT_DBG_H__ + +#include + +/* the debug log will force enable when RT_DEBUG macro is defined */ +#if defined(RT_DEBUG) && !defined(DBG_ENABLE) +#define DBG_ENABLE +#endif + +/* it will force output color log when RT_DEBUG_COLOR macro is defined */ +#if defined(RT_DEBUG_COLOR) && !defined(DBG_COLOR) +#define DBG_COLOR +#endif + +#if defined(RT_USING_ULOG) +/* using ulog compatible with rtdbg */ +#include +#else + +/* DEBUG level */ +#define DBG_ERROR 0 +#define DBG_WARNING 1 +#define DBG_INFO 2 +#define DBG_LOG 3 + +#ifdef DBG_TAG +#ifndef DBG_SECTION_NAME +#define DBG_SECTION_NAME DBG_TAG +#endif +#else +/* compatible with old version */ +#ifndef DBG_SECTION_NAME +#define DBG_SECTION_NAME "DBG" +#endif +#endif /* DBG_TAG */ + +#ifdef DBG_ENABLE + +#ifdef DBG_LVL +#ifndef DBG_LEVEL +#define DBG_LEVEL DBG_LVL +#endif +#else +/* compatible with old version */ +#ifndef DBG_LEVEL +#define DBG_LEVEL DBG_WARNING +#endif +#endif /* DBG_LVL */ + +/* + * The color for terminal (foreground) + * BLACK 30 + * RED 31 + * GREEN 32 + * YELLOW 33 + * BLUE 34 + * PURPLE 35 + * CYAN 36 + * WHITE 37 + */ +#ifdef DBG_COLOR +#define _DBG_COLOR(n) rt_kprintf("\033["#n"m") +#define _DBG_LOG_HDR(lvl_name, color_n) \ + rt_kprintf("\033["#color_n"m["lvl_name"/"DBG_SECTION_NAME"] ") +#define _DBG_LOG_X_END \ + rt_kprintf("\033[0m\n") +#else +#define _DBG_COLOR(n) +#define _DBG_LOG_HDR(lvl_name, color_n) \ + rt_kprintf("["lvl_name"/"DBG_SECTION_NAME"] ") +#define _DBG_LOG_X_END \ + rt_kprintf("\n") +#endif /* DBG_COLOR */ + +/* + * static debug routine + * NOTE: This is a NOT RECOMMENDED API. Please using LOG_X API. + * It will be DISCARDED later. Because it will take up more resources. + */ +#define dbg_log(level, fmt, ...) \ + if ((level) <= DBG_LEVEL) \ + { \ + switch(level) \ + { \ + case DBG_ERROR: _DBG_LOG_HDR("E", 31); break; \ + case DBG_WARNING: _DBG_LOG_HDR("W", 33); break; \ + case DBG_INFO: _DBG_LOG_HDR("I", 32); break; \ + case DBG_LOG: _DBG_LOG_HDR("D", 0); break; \ + default: break; \ + } \ + rt_kprintf(fmt, ##__VA_ARGS__); \ + _DBG_COLOR(0); \ + } + +#define dbg_here \ + if ((DBG_LEVEL) <= DBG_LOG){ \ + rt_kprintf(DBG_SECTION_NAME " Here %s:%d\n", \ + __FUNCTION__, __LINE__); \ + } + +#define dbg_log_line(lvl, color_n, fmt, ...) \ + do \ + { \ + _DBG_LOG_HDR(lvl, color_n); \ + rt_kprintf(fmt, ##__VA_ARGS__); \ + _DBG_LOG_X_END; \ + } \ + while (0) + +#define dbg_raw(...) rt_kprintf(__VA_ARGS__); + +#else +#define dbg_log(level, fmt, ...) +#define dbg_here +#define dbg_enter +#define dbg_exit +#define dbg_log_line(lvl, color_n, fmt, ...) +#define dbg_raw(...) +#endif /* DBG_ENABLE */ + +#if (DBG_LEVEL >= DBG_LOG) +#define LOG_D(fmt, ...) dbg_log_line("D", 0, fmt, ##__VA_ARGS__) +#else +#define LOG_D(...) +#endif + +#if (DBG_LEVEL >= DBG_INFO) +#define LOG_I(fmt, ...) dbg_log_line("I", 32, fmt, ##__VA_ARGS__) +#else +#define LOG_I(...) +#endif + +#if (DBG_LEVEL >= DBG_WARNING) +#define LOG_W(fmt, ...) dbg_log_line("W", 33, fmt, ##__VA_ARGS__) +#else +#define LOG_W(...) +#endif + +#if (DBG_LEVEL >= DBG_ERROR) +#define LOG_E(fmt, ...) dbg_log_line("E", 31, fmt, ##__VA_ARGS__) +#else +#define LOG_E(...) +#endif + +#define LOG_RAW(...) dbg_raw(__VA_ARGS__) + +#endif /* defined(RT_USING_ULOG) && define(DBG_ENABLE) */ + +#endif /* RT_DBG_H__ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdebug.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdebug.h new file mode 100644 index 0000000000..b66cd6fc69 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdebug.h @@ -0,0 +1,142 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __RTDEBUG_H__ +#define __RTDEBUG_H__ + +#include + +/* settings depend check */ +#ifdef RT_USING_POSIX +#if !defined(RT_USING_DFS) || !defined(RT_USING_DFS_DEVFS) +#error "POSIX poll/select, stdin need file system(RT_USING_DFS) and device file system(RT_USING_DFS_DEVFS)" +#endif + +#if !defined(RT_USING_LIBC) +#error "POSIX layer need standard C library(RT_USING_LIBC)" +#endif + +#endif + +#ifdef RT_USING_POSIX_TERMIOS +#if !defined(RT_USING_POSIX) +#error "termios need POSIX layer(RT_USING_POSIX)" +#endif +#endif + +/* Using this macro to control all kernel debug features. */ +#ifdef RT_DEBUG + +/* Turn on some of these (set to non-zero) to debug kernel */ +#ifndef RT_DEBUG_MEM +#define RT_DEBUG_MEM 0 +#endif + +#ifndef RT_DEBUG_MEMHEAP +#define RT_DEBUG_MEMHEAP 0 +#endif + +#ifndef RT_DEBUG_MODULE +#define RT_DEBUG_MODULE 0 +#endif + +#ifndef RT_DEBUG_SCHEDULER +#define RT_DEBUG_SCHEDULER 0 +#endif + +#ifndef RT_DEBUG_SLAB +#define RT_DEBUG_SLAB 0 +#endif + +#ifndef RT_DEBUG_THREAD +#define RT_DEBUG_THREAD 0 +#endif + +#ifndef RT_DEBUG_TIMER +#define RT_DEBUG_TIMER 0 +#endif + +#ifndef RT_DEBUG_IRQ +#define RT_DEBUG_IRQ 0 +#endif + +#ifndef RT_DEBUG_IPC +#define RT_DEBUG_IPC 0 +#endif + +#ifndef RT_DEBUG_INIT +#define RT_DEBUG_INIT 0 +#endif + +/* Turn on this to enable context check */ +#ifndef RT_DEBUG_CONTEXT_CHECK +#define RT_DEBUG_CONTEXT_CHECK 1 +#endif + +#define RT_DEBUG_LOG(type, message) \ +do \ +{ \ + if (type) \ + rt_kprintf message; \ +} \ +while (0) + +#define RT_ASSERT(EX) \ +if (!(EX)) \ +{ \ + rt_assert_handler(#EX, __FUNCTION__, __LINE__); \ +} + +/* Macro to check current context */ +#if RT_DEBUG_CONTEXT_CHECK +#define RT_DEBUG_NOT_IN_INTERRUPT \ +do \ +{ \ + rt_base_t level; \ + level = rt_hw_interrupt_disable(); \ + if (rt_interrupt_get_nest() != 0) \ + { \ + rt_kprintf("Function[%s] shall not be used in ISR\n", __FUNCTION__); \ + RT_ASSERT(0) \ + } \ + rt_hw_interrupt_enable(level); \ +} \ +while (0) + +/* "In thread context" means: + * 1) the scheduler has been started + * 2) not in interrupt context. + */ +#define RT_DEBUG_IN_THREAD_CONTEXT \ +do \ +{ \ + rt_base_t level; \ + level = rt_hw_interrupt_disable(); \ + if (rt_thread_self() == RT_NULL) \ + { \ + rt_kprintf("Function[%s] shall not be used before scheduler start\n", \ + __FUNCTION__); \ + RT_ASSERT(0) \ + } \ + RT_DEBUG_NOT_IN_INTERRUPT; \ + rt_hw_interrupt_enable(level); \ +} \ +while (0) +#else +#define RT_DEBUG_NOT_IN_INTERRUPT +#define RT_DEBUG_IN_THREAD_CONTEXT +#endif + +#else /* RT_DEBUG */ + +#define RT_ASSERT(EX) +#define RT_DEBUG_LOG(type, message) +#define RT_DEBUG_NOT_IN_INTERRUPT +#define RT_DEBUG_IN_THREAD_CONTEXT + +#endif /* RT_DEBUG */ + +#endif /* __RTDEBUG_H__ */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdef.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdef.h new file mode 100644 index 0000000000..91a8a470de --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtdef.h @@ -0,0 +1,1048 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2007-01-10 Bernard the first version + * 2008-07-12 Bernard remove all rt_int8, rt_uint32_t etc typedef + * 2010-10-26 yi.qiu add module support + * 2010-11-10 Bernard add cleanup callback function in thread exit. + * 2011-05-09 Bernard use builtin va_arg in GCC 4.x + * 2012-11-16 Bernard change RT_NULL from ((void*)0) to 0. + * 2012-12-29 Bernard change the RT_USING_MEMPOOL location and add + * RT_USING_MEMHEAP condition. + * 2012-12-30 Bernard add more control command for graphic. + * 2013-01-09 Bernard change version number. + * 2015-02-01 Bernard change version number to v2.1.0 + * 2017-08-31 Bernard change version number to v3.0.0 + * 2017-11-30 Bernard change version number to v3.0.1 + * 2017-12-27 Bernard change version number to v3.0.2 + * 2018-02-24 Bernard change version number to v3.0.3 + * 2018-04-25 Bernard change version number to v3.0.4 + * 2018-05-31 Bernard change version number to v3.1.0 + * 2018-09-04 Bernard change version number to v3.1.1 + * 2018-09-14 Bernard apply Apache License v2.0 to RT-Thread Kernel + * 2018-12-28 armink change version number to v3.1.2 + * 2019-03-14 armink change version number to v3.1.3 + */ + +#ifndef __RT_DEF_H__ +#define __RT_DEF_H__ + +/* include rtconfig header to import configuration */ +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup BasicDef + */ + +/*@{*/ + +/* RT-Thread version information */ +#define RT_VERSION 3L /**< major version number */ +#define RT_SUBVERSION 1L /**< minor version number */ +#define RT_REVISION 3L /**< revise version number */ + +/* RT-Thread version */ +#define RTTHREAD_VERSION ((RT_VERSION * 10000) + \ + (RT_SUBVERSION * 100) + RT_REVISION) + +/* RT-Thread basic data type definitions */ +#ifndef RT_USING_ARCH_DATA_TYPE +typedef signed char rt_int8_t; /**< 8bit integer type */ +typedef signed short rt_int16_t; /**< 16bit integer type */ +typedef signed long rt_int32_t; /**< 32bit integer type */ +typedef signed long long rt_int64_t; /**< 64bit integer type */ +typedef unsigned char rt_uint8_t; /**< 8bit unsigned integer type */ +typedef unsigned short rt_uint16_t; /**< 16bit unsigned integer type */ +typedef unsigned long rt_uint32_t; /**< 32bit unsigned integer type */ +typedef unsigned long long rt_uint64_t; /**< 64bit unsigned integer type */ +#endif +typedef int rt_bool_t; /**< boolean type */ + +/* 32bit CPU */ +typedef long rt_base_t; /**< Nbit CPU related date type */ +typedef unsigned long rt_ubase_t; /**< Nbit unsigned CPU related data type */ + +typedef rt_base_t rt_err_t; /**< Type for error number */ +typedef rt_uint32_t rt_time_t; /**< Type for time stamp */ +typedef rt_uint32_t rt_tick_t; /**< Type for tick count */ +typedef rt_base_t rt_flag_t; /**< Type for flags */ +typedef rt_ubase_t rt_size_t; /**< Type for size number */ +typedef rt_ubase_t rt_dev_t; /**< Type for device */ +typedef rt_base_t rt_off_t; /**< Type for offset */ + +/* boolean type definitions */ +#define RT_TRUE 1 /**< boolean true */ +#define RT_FALSE 0 /**< boolean fails */ + +/**@}*/ + +/* maximum value of base type */ +#define RT_UINT8_MAX 0xff /**< Maxium number of UINT8 */ +#define RT_UINT16_MAX 0xffff /**< Maxium number of UINT16 */ +#define RT_UINT32_MAX 0xffffffff /**< Maxium number of UINT32 */ +#define RT_TICK_MAX RT_UINT32_MAX /**< Maxium number of tick */ + +#if defined (__ARMCC_VERSION) && (__ARMCC_VERSION >= 6010050) +#define __CLANG_ARM +#endif + +/* Compiler Related Definitions */ +#if defined(__CC_ARM) || defined(__CLANG_ARM) /* ARM Compiler */ + #include + #define SECTION(x) __attribute__((section(x))) + #define RT_UNUSED __attribute__((unused)) + #define RT_USED __attribute__((used)) + #define ALIGN(n) __attribute__((aligned(n))) + + #define RT_WEAK __attribute__((weak)) + #define rt_inline static __inline + /* module compiling */ + #ifdef RT_USING_MODULE + #define RTT_API __declspec(dllimport) + #else + #define RTT_API __declspec(dllexport) + #endif + +#elif defined (__IAR_SYSTEMS_ICC__) /* for IAR Compiler */ + #include + #define SECTION(x) @ x + #define RT_UNUSED + #define RT_USED __root + #define PRAGMA(x) _Pragma(#x) + #define ALIGN(n) PRAGMA(data_alignment=n) + #define RT_WEAK __weak + #define rt_inline static inline + #define RTT_API + +#elif defined (__GNUC__) /* GNU GCC Compiler */ + #ifdef RT_USING_NEWLIB + #include + #else + /* the version of GNU GCC must be greater than 4.x */ + typedef __builtin_va_list __gnuc_va_list; + typedef __gnuc_va_list va_list; + #define va_start(v,l) __builtin_va_start(v,l) + #define va_end(v) __builtin_va_end(v) + #define va_arg(v,l) __builtin_va_arg(v,l) + #endif + + #define SECTION(x) __attribute__((section(x))) + #define RT_UNUSED __attribute__((unused)) + #define RT_USED __attribute__((used)) + #define ALIGN(n) __attribute__((aligned(n))) + #define RT_WEAK __attribute__((weak)) + #define rt_inline static __inline + #define RTT_API +#elif defined (__ADSPBLACKFIN__) /* for VisualDSP++ Compiler */ + #include + #define SECTION(x) __attribute__((section(x))) + #define RT_UNUSED __attribute__((unused)) + #define RT_USED __attribute__((used)) + #define ALIGN(n) __attribute__((aligned(n))) + #define RT_WEAK __attribute__((weak)) + #define rt_inline static inline + #define RTT_API +#elif defined (_MSC_VER) + #include + #define SECTION(x) + #define RT_UNUSED + #define RT_USED + #define ALIGN(n) __declspec(align(n)) + #define RT_WEAK + #define rt_inline static __inline + #define RTT_API +#elif defined (__TI_COMPILER_VERSION__) + #include + /* The way that TI compiler set section is different from other(at least + * GCC and MDK) compilers. See ARM Optimizing C/C++ Compiler 5.9.3 for more + * details. */ + #define SECTION(x) + #define RT_UNUSED + #define RT_USED + #define PRAGMA(x) _Pragma(#x) + #define ALIGN(n) + #define RT_WEAK + #define rt_inline static inline + #define RTT_API +#else + #error not supported tool chain +#endif + +/* initialization export */ +#ifdef RT_USING_COMPONENTS_INIT +typedef int (*init_fn_t)(void); +#ifdef _MSC_VER /* we do not support MS VC++ compiler */ + #define INIT_EXPORT(fn, level) +#else + #if RT_DEBUG_INIT + struct rt_init_desc + { + const char* fn_name; + const init_fn_t fn; + }; + #define INIT_EXPORT(fn, level) \ + const char __rti_##fn##_name[] = #fn; \ + RT_USED const struct rt_init_desc __rt_init_desc_##fn SECTION(".rti_fn."level) = \ + { __rti_##fn##_name, fn}; + #else + #define INIT_EXPORT(fn, level) \ + RT_USED const init_fn_t __rt_init_##fn SECTION(".rti_fn."level) = fn + #endif +#endif +#else +#define INIT_EXPORT(fn, level) +#endif + +/* board init routines will be called in board_init() function */ +#define INIT_BOARD_EXPORT(fn) INIT_EXPORT(fn, "1") + +/* pre/device/component/env/app init routines will be called in init_thread */ +/* components pre-initialization (pure software initilization) */ +#define INIT_PREV_EXPORT(fn) INIT_EXPORT(fn, "2") +/* device initialization */ +#define INIT_DEVICE_EXPORT(fn) INIT_EXPORT(fn, "3") +/* components initialization (dfs, lwip, ...) */ +#define INIT_COMPONENT_EXPORT(fn) INIT_EXPORT(fn, "4") +/* environment initialization (mount disk, ...) */ +#define INIT_ENV_EXPORT(fn) INIT_EXPORT(fn, "5") +/* appliation initialization (rtgui application etc ...) */ +#define INIT_APP_EXPORT(fn) INIT_EXPORT(fn, "6") + +#if !defined(RT_USING_FINSH) +/* define these to empty, even if not include finsh.h file */ +#define FINSH_FUNCTION_EXPORT(name, desc) +#define FINSH_FUNCTION_EXPORT_ALIAS(name, alias, desc) +#define FINSH_VAR_EXPORT(name, type, desc) + +#define MSH_CMD_EXPORT(command, desc) +#define MSH_CMD_EXPORT_ALIAS(command, alias, desc) +#elif !defined(FINSH_USING_SYMTAB) +#define FINSH_FUNCTION_EXPORT_CMD(name, cmd, desc) +#endif + +/* event length */ +#define RT_EVENT_LENGTH 32 + +/* memory management option */ +#define RT_MM_PAGE_SIZE 4096 +#define RT_MM_PAGE_MASK (RT_MM_PAGE_SIZE - 1) +#define RT_MM_PAGE_BITS 12 + +/* kernel malloc definitions */ +#ifndef RT_KERNEL_MALLOC +#define RT_KERNEL_MALLOC(sz) rt_malloc(sz) +#endif + +#ifndef RT_KERNEL_FREE +#define RT_KERNEL_FREE(ptr) rt_free(ptr) +#endif + +#ifndef RT_KERNEL_REALLOC +#define RT_KERNEL_REALLOC(ptr, size) rt_realloc(ptr, size) +#endif + +/** + * @addtogroup Error + */ + +/**@{*/ + +/* RT-Thread error code definitions */ +#define RT_EOK 0 /**< There is no error */ +#define RT_ERROR 1 /**< A generic error happens */ +#define RT_ETIMEOUT 2 /**< Timed out */ +#define RT_EFULL 3 /**< The resource is full */ +#define RT_EEMPTY 4 /**< The resource is empty */ +#define RT_ENOMEM 5 /**< No memory */ +#define RT_ENOSYS 6 /**< No system */ +#define RT_EBUSY 7 /**< Busy */ +#define RT_EIO 8 /**< IO error */ +#define RT_EINTR 9 /**< Interrupted system call */ +#define RT_EINVAL 10 /**< Invalid argument */ + +/**@}*/ + +/** + * @ingroup BasicDef + * + * @def RT_ALIGN(size, align) + * Return the most contiguous size aligned at specified width. RT_ALIGN(13, 4) + * would return 16. + */ +#define RT_ALIGN(size, align) (((size) + (align) - 1) & ~((align) - 1)) + +/** + * @ingroup BasicDef + * + * @def RT_ALIGN_DOWN(size, align) + * Return the down number of aligned at specified width. RT_ALIGN_DOWN(13, 4) + * would return 12. + */ +#define RT_ALIGN_DOWN(size, align) ((size) & ~((align) - 1)) + +/** + * @ingroup BasicDef + * + * @def RT_NULL + * Similar as the \c NULL in C library. + */ +#define RT_NULL (0) + +/** + * Double List structure + */ +struct rt_list_node +{ + struct rt_list_node *next; /**< point to next node. */ + struct rt_list_node *prev; /**< point to prev node. */ +}; +typedef struct rt_list_node rt_list_t; /**< Type for lists. */ + +/** + * Single List structure + */ +struct rt_slist_node +{ + struct rt_slist_node *next; /**< point to next node. */ +}; +typedef struct rt_slist_node rt_slist_t; /**< Type for single list. */ + +/** + * @addtogroup KernelObject + */ + +/**@{*/ + +/* + * kernel object macros + */ +#define RT_OBJECT_FLAG_MODULE 0x80 /**< is module object. */ + +/** + * Base structure of Kernel object + */ +struct rt_object +{ + char name[RT_NAME_MAX]; /**< name of kernel object */ + rt_uint8_t type; /**< type of kernel object */ + rt_uint8_t flag; /**< flag of kernel object */ + +#ifdef RT_USING_MODULE + void *module_id; /**< id of application module */ +#endif + rt_list_t list; /**< list node of kernel object */ +}; +typedef struct rt_object *rt_object_t; /**< Type for kernel objects. */ + +/** + * The object type can be one of the follows with specific + * macros enabled: + * - Thread + * - Semaphore + * - Mutex + * - Event + * - MailBox + * - MessageQueue + * - MemHeap + * - MemPool + * - Device + * - Timer + * - Module + * - Unknown + * - Static + */ +enum rt_object_class_type +{ + RT_Object_Class_Null = 0, /**< The object is not used. */ + RT_Object_Class_Thread, /**< The object is a thread. */ + RT_Object_Class_Semaphore, /**< The object is a semaphore. */ + RT_Object_Class_Mutex, /**< The object is a mutex. */ + RT_Object_Class_Event, /**< The object is a event. */ + RT_Object_Class_MailBox, /**< The object is a mail box. */ + RT_Object_Class_MessageQueue, /**< The object is a message queue. */ + RT_Object_Class_MemHeap, /**< The object is a memory heap */ + RT_Object_Class_MemPool, /**< The object is a memory pool. */ + RT_Object_Class_Device, /**< The object is a device */ + RT_Object_Class_Timer, /**< The object is a timer. */ + RT_Object_Class_Module, /**< The object is a module. */ + RT_Object_Class_Unknown, /**< The object is unknown. */ + RT_Object_Class_Static = 0x80 /**< The object is a static object. */ +}; + +/** + * The information of the kernel object + */ +struct rt_object_information +{ + enum rt_object_class_type type; /**< object class type */ + rt_list_t object_list; /**< object list */ + rt_size_t object_size; /**< object size */ +}; + +/** + * The hook function call macro + */ +#ifdef RT_USING_HOOK +#define RT_OBJECT_HOOK_CALL(func, argv) \ + do { if ((func) != RT_NULL) func argv; } while (0) +#else +#define RT_OBJECT_HOOK_CALL(func, argv) +#endif + +/**@}*/ + +/** + * @addtogroup Clock + */ + +/**@{*/ + +/** + * clock & timer macros + */ +#define RT_TIMER_FLAG_DEACTIVATED 0x0 /**< timer is deactive */ +#define RT_TIMER_FLAG_ACTIVATED 0x1 /**< timer is active */ +#define RT_TIMER_FLAG_ONE_SHOT 0x0 /**< one shot timer */ +#define RT_TIMER_FLAG_PERIODIC 0x2 /**< periodic timer */ + +#define RT_TIMER_FLAG_HARD_TIMER 0x0 /**< hard timer,the timer's callback function will be called in tick isr. */ +#define RT_TIMER_FLAG_SOFT_TIMER 0x4 /**< soft timer,the timer's callback function will be called in timer thread. */ + +#define RT_TIMER_CTRL_SET_TIME 0x0 /**< set timer control command */ +#define RT_TIMER_CTRL_GET_TIME 0x1 /**< get timer control command */ +#define RT_TIMER_CTRL_SET_ONESHOT 0x2 /**< change timer to one shot */ +#define RT_TIMER_CTRL_SET_PERIODIC 0x3 /**< change timer to periodic */ + +#ifndef RT_TIMER_SKIP_LIST_LEVEL +#define RT_TIMER_SKIP_LIST_LEVEL 1 +#endif + +/* 1 or 3 */ +#ifndef RT_TIMER_SKIP_LIST_MASK +#define RT_TIMER_SKIP_LIST_MASK 0x3 +#endif + +/** + * timer structure + */ +struct rt_timer +{ + struct rt_object parent; /**< inherit from rt_object */ + + rt_list_t row[RT_TIMER_SKIP_LIST_LEVEL]; + + void (*timeout_func)(void *parameter); /**< timeout function */ + void *parameter; /**< timeout function's parameter */ + + rt_tick_t init_tick; /**< timer timeout tick */ + rt_tick_t timeout_tick; /**< timeout tick */ +}; +typedef struct rt_timer *rt_timer_t; + +/**@}*/ + +/** + * @addtogroup Signal + */ +#ifdef RT_USING_SIGNALS +#include +typedef unsigned long rt_sigset_t; +typedef void (*rt_sighandler_t)(int signo); +typedef siginfo_t rt_siginfo_t; + +#define RT_SIG_MAX 32 +#endif +/**@}*/ + +/** + * @addtogroup Thread + */ + +/**@{*/ + +/* + * Thread + */ + +/* + * thread state definitions + */ +#define RT_THREAD_INIT 0x00 /**< Initialized status */ +#define RT_THREAD_READY 0x01 /**< Ready status */ +#define RT_THREAD_SUSPEND 0x02 /**< Suspend status */ +#define RT_THREAD_RUNNING 0x03 /**< Running status */ +#define RT_THREAD_BLOCK RT_THREAD_SUSPEND /**< Blocked status */ +#define RT_THREAD_CLOSE 0x04 /**< Closed status */ +#define RT_THREAD_STAT_MASK 0x0f + +#define RT_THREAD_STAT_SIGNAL 0x10 /**< task hold signals */ +#define RT_THREAD_STAT_SIGNAL_READY (RT_THREAD_STAT_SIGNAL | RT_THREAD_READY) +#define RT_THREAD_STAT_SIGNAL_WAIT 0x20 /**< task is waiting for signals */ +#define RT_THREAD_STAT_SIGNAL_PENDING 0x40 /**< signals is held and it has not been procressed */ +#define RT_THREAD_STAT_SIGNAL_MASK 0xf0 + +/** + * thread control command definitions + */ +#define RT_THREAD_CTRL_STARTUP 0x00 /**< Startup thread. */ +#define RT_THREAD_CTRL_CLOSE 0x01 /**< Close thread. */ +#define RT_THREAD_CTRL_CHANGE_PRIORITY 0x02 /**< Change thread priority. */ +#define RT_THREAD_CTRL_INFO 0x03 /**< Get thread information. */ + +/** + * Thread structure + */ +struct rt_thread +{ + /* rt object */ + char name[RT_NAME_MAX]; /**< the name of thread */ + rt_uint8_t type; /**< type of object */ + rt_uint8_t flags; /**< thread's flags */ + +#ifdef RT_USING_MODULE + void *module_id; /**< id of application module */ +#endif + + rt_list_t list; /**< the object list */ + rt_list_t tlist; /**< the thread list */ + + /* stack point and entry */ + void *sp; /**< stack point */ + void *entry; /**< entry */ + void *parameter; /**< parameter */ + void *stack_addr; /**< stack address */ + rt_uint32_t stack_size; /**< stack size */ + + /* error code */ + rt_err_t error; /**< error code */ + + rt_uint8_t stat; /**< thread status */ + + /* priority */ + rt_uint8_t current_priority; /**< current priority */ + rt_uint8_t init_priority; /**< initialized priority */ +#if RT_THREAD_PRIORITY_MAX > 32 + rt_uint8_t number; + rt_uint8_t high_mask; +#endif + rt_uint32_t number_mask; + +#if defined(RT_USING_EVENT) + /* thread event */ + rt_uint32_t event_set; + rt_uint8_t event_info; +#endif + +#if defined(RT_USING_SIGNALS) + rt_sigset_t sig_pending; /**< the pending signals */ + rt_sigset_t sig_mask; /**< the mask bits of signal */ + + void *sig_ret; /**< the return stack pointer from signal */ + rt_sighandler_t *sig_vectors; /**< vectors of signal handler */ + void *si_list; /**< the signal infor list */ +#endif + + rt_ubase_t init_tick; /**< thread's initialized tick */ + rt_ubase_t remaining_tick; /**< remaining tick */ + + struct rt_timer thread_timer; /**< built-in thread timer */ + + void (*cleanup)(struct rt_thread *tid); /**< cleanup function when thread exit */ + + /* light weight process if present */ +#ifdef RT_USING_LWP + void *lwp; +#endif + + rt_uint32_t user_data; /**< private user data beyond this thread */ +}; +typedef struct rt_thread *rt_thread_t; + +/**@}*/ + +/** + * @addtogroup IPC + */ + +/**@{*/ + +/** + * IPC flags and control command definitions + */ +#define RT_IPC_FLAG_FIFO 0x00 /**< FIFOed IPC. @ref IPC. */ +#define RT_IPC_FLAG_PRIO 0x01 /**< PRIOed IPC. @ref IPC. */ + +#define RT_IPC_CMD_UNKNOWN 0x00 /**< unknown IPC command */ +#define RT_IPC_CMD_RESET 0x01 /**< reset IPC object */ + +#define RT_WAITING_FOREVER -1 /**< Block forever until get resource. */ +#define RT_WAITING_NO 0 /**< Non-block. */ + +/** + * Base structure of IPC object + */ +struct rt_ipc_object +{ + struct rt_object parent; /**< inherit from rt_object */ + + rt_list_t suspend_thread; /**< threads pended on this resource */ +}; + +#ifdef RT_USING_SEMAPHORE +/** + * Semaphore structure + */ +struct rt_semaphore +{ + struct rt_ipc_object parent; /**< inherit from ipc_object */ + + rt_uint16_t value; /**< value of semaphore. */ + rt_uint16_t reserved; /**< reserved field */ +}; +typedef struct rt_semaphore *rt_sem_t; +#endif + +#ifdef RT_USING_MUTEX +/** + * Mutual exclusion (mutex) structure + */ +struct rt_mutex +{ + struct rt_ipc_object parent; /**< inherit from ipc_object */ + + rt_uint16_t value; /**< value of mutex */ + + rt_uint8_t original_priority; /**< priority of last thread hold the mutex */ + rt_uint8_t hold; /**< numbers of thread hold the mutex */ + + struct rt_thread *owner; /**< current owner of mutex */ +}; +typedef struct rt_mutex *rt_mutex_t; +#endif + +#ifdef RT_USING_EVENT +/** + * flag defintions in event + */ +#define RT_EVENT_FLAG_AND 0x01 /**< logic and */ +#define RT_EVENT_FLAG_OR 0x02 /**< logic or */ +#define RT_EVENT_FLAG_CLEAR 0x04 /**< clear flag */ + +/* + * event structure + */ +struct rt_event +{ + struct rt_ipc_object parent; /**< inherit from ipc_object */ + + rt_uint32_t set; /**< event set */ +}; +typedef struct rt_event *rt_event_t; +#endif + +#ifdef RT_USING_MAILBOX +/** + * mailbox structure + */ +struct rt_mailbox +{ + struct rt_ipc_object parent; /**< inherit from ipc_object */ + + rt_uint32_t *msg_pool; /**< start address of message buffer */ + + rt_uint16_t size; /**< size of message pool */ + + rt_uint16_t entry; /**< index of messages in msg_pool */ + rt_uint16_t in_offset; /**< input offset of the message buffer */ + rt_uint16_t out_offset; /**< output offset of the message buffer */ + + rt_list_t suspend_sender_thread; /**< sender thread suspended on this mailbox */ +}; +typedef struct rt_mailbox *rt_mailbox_t; +#endif + +#ifdef RT_USING_MESSAGEQUEUE +/** + * message queue structure + */ +struct rt_messagequeue +{ + struct rt_ipc_object parent; /**< inherit from ipc_object */ + + void *msg_pool; /**< start address of message queue */ + + rt_uint16_t msg_size; /**< message size of each message */ + rt_uint16_t max_msgs; /**< max number of messages */ + + rt_uint16_t entry; /**< index of messages in the queue */ + + void *msg_queue_head; /**< list head */ + void *msg_queue_tail; /**< list tail */ + void *msg_queue_free; /**< pointer indicated the free node of queue */ +}; +typedef struct rt_messagequeue *rt_mq_t; +#endif + +/**@}*/ + +/** + * @addtogroup MM + */ + +/**@{*/ + +/* + * memory management + * heap & partition + */ + +#ifdef RT_USING_MEMHEAP +/** + * memory item on the heap + */ +struct rt_memheap_item +{ + rt_uint32_t magic; /**< magic number for memheap */ + struct rt_memheap *pool_ptr; /**< point of pool */ + + struct rt_memheap_item *next; /**< next memheap item */ + struct rt_memheap_item *prev; /**< prev memheap item */ + + struct rt_memheap_item *next_free; /**< next free memheap item */ + struct rt_memheap_item *prev_free; /**< prev free memheap item */ +}; + +/** + * Base structure of memory heap object + */ +struct rt_memheap +{ + struct rt_object parent; /**< inherit from rt_object */ + + void *start_addr; /**< pool start address and size */ + + rt_uint32_t pool_size; /**< pool size */ + rt_uint32_t available_size; /**< available size */ + rt_uint32_t max_used_size; /**< maximum allocated size */ + + struct rt_memheap_item *block_list; /**< used block list */ + + struct rt_memheap_item *free_list; /**< free block list */ + struct rt_memheap_item free_header; /**< free block list header */ + + struct rt_semaphore lock; /**< semaphore lock */ +}; +#endif + +#ifdef RT_USING_MEMPOOL +/** + * Base structure of Memory pool object + */ +struct rt_mempool +{ + struct rt_object parent; /**< inherit from rt_object */ + + void *start_address; /**< memory pool start */ + rt_size_t size; /**< size of memory pool */ + + rt_size_t block_size; /**< size of memory blocks */ + rt_uint8_t *block_list; /**< memory blocks list */ + + rt_size_t block_total_count; /**< numbers of memory block */ + rt_size_t block_free_count; /**< numbers of free memory block */ + + rt_list_t suspend_thread; /**< threads pended on this resource */ + rt_size_t suspend_thread_count; /**< numbers of thread pended on this resource */ +}; +typedef struct rt_mempool *rt_mp_t; +#endif + +/**@}*/ + +#ifdef RT_USING_DEVICE +/** + * @addtogroup Device + */ + +/**@{*/ + +/** + * device (I/O) class type + */ +enum rt_device_class_type +{ + RT_Device_Class_Char = 0, /**< character device */ + RT_Device_Class_Block, /**< block device */ + RT_Device_Class_NetIf, /**< net interface */ + RT_Device_Class_MTD, /**< memory device */ + RT_Device_Class_CAN, /**< CAN device */ + RT_Device_Class_RTC, /**< RTC device */ + RT_Device_Class_Sound, /**< Sound device */ + RT_Device_Class_Graphic, /**< Graphic device */ + RT_Device_Class_I2CBUS, /**< I2C bus device */ + RT_Device_Class_USBDevice, /**< USB slave device */ + RT_Device_Class_USBHost, /**< USB host bus */ + RT_Device_Class_SPIBUS, /**< SPI bus device */ + RT_Device_Class_SPIDevice, /**< SPI device */ + RT_Device_Class_SDIO, /**< SDIO bus device */ + RT_Device_Class_PM, /**< PM pseudo device */ + RT_Device_Class_Pipe, /**< Pipe device */ + RT_Device_Class_Portal, /**< Portal device */ + RT_Device_Class_Timer, /**< Timer device */ + RT_Device_Class_Miscellaneous, /**< Miscellaneous device */ + RT_Device_Class_Sensor, /**< Sensor device */ + RT_Device_Class_Unknown /**< unknown device */ +}; + +/** + * device flags defitions + */ +#define RT_DEVICE_FLAG_DEACTIVATE 0x000 /**< device is not not initialized */ + +#define RT_DEVICE_FLAG_RDONLY 0x001 /**< read only */ +#define RT_DEVICE_FLAG_WRONLY 0x002 /**< write only */ +#define RT_DEVICE_FLAG_RDWR 0x003 /**< read and write */ + +#define RT_DEVICE_FLAG_REMOVABLE 0x004 /**< removable device */ +#define RT_DEVICE_FLAG_STANDALONE 0x008 /**< standalone device */ +#define RT_DEVICE_FLAG_ACTIVATED 0x010 /**< device is activated */ +#define RT_DEVICE_FLAG_SUSPENDED 0x020 /**< device is suspended */ +#define RT_DEVICE_FLAG_STREAM 0x040 /**< stream mode */ + +#define RT_DEVICE_FLAG_INT_RX 0x100 /**< INT mode on Rx */ +#define RT_DEVICE_FLAG_DMA_RX 0x200 /**< DMA mode on Rx */ +#define RT_DEVICE_FLAG_INT_TX 0x400 /**< INT mode on Tx */ +#define RT_DEVICE_FLAG_DMA_TX 0x800 /**< DMA mode on Tx */ + +#define RT_DEVICE_OFLAG_CLOSE 0x000 /**< device is closed */ +#define RT_DEVICE_OFLAG_RDONLY 0x001 /**< read only access */ +#define RT_DEVICE_OFLAG_WRONLY 0x002 /**< write only access */ +#define RT_DEVICE_OFLAG_RDWR 0x003 /**< read and write */ +#define RT_DEVICE_OFLAG_OPEN 0x008 /**< device is opened */ +#define RT_DEVICE_OFLAG_MASK 0xf0f /**< mask of open flag */ + +/** + * general device commands + */ +#define RT_DEVICE_CTRL_RESUME 0x01 /**< resume device */ +#define RT_DEVICE_CTRL_SUSPEND 0x02 /**< suspend device */ +#define RT_DEVICE_CTRL_CONFIG 0x03 /**< configure device */ + +#define RT_DEVICE_CTRL_SET_INT 0x10 /**< set interrupt */ +#define RT_DEVICE_CTRL_CLR_INT 0x11 /**< clear interrupt */ +#define RT_DEVICE_CTRL_GET_INT 0x12 /**< get interrupt status */ + +/** + * special device commands + */ +#define RT_DEVICE_CTRL_CHAR_STREAM 0x10 /**< stream mode on char device */ +#define RT_DEVICE_CTRL_BLK_GETGEOME 0x10 /**< get geometry information */ +#define RT_DEVICE_CTRL_BLK_SYNC 0x11 /**< flush data to block device */ +#define RT_DEVICE_CTRL_BLK_ERASE 0x12 /**< erase block on block device */ +#define RT_DEVICE_CTRL_BLK_AUTOREFRESH 0x13 /**< block device : enter/exit auto refresh mode */ +#define RT_DEVICE_CTRL_NETIF_GETMAC 0x10 /**< get mac address */ +#define RT_DEVICE_CTRL_MTD_FORMAT 0x10 /**< format a MTD device */ +#define RT_DEVICE_CTRL_RTC_GET_TIME 0x10 /**< get time */ +#define RT_DEVICE_CTRL_RTC_SET_TIME 0x11 /**< set time */ +#define RT_DEVICE_CTRL_RTC_GET_ALARM 0x12 /**< get alarm */ +#define RT_DEVICE_CTRL_RTC_SET_ALARM 0x13 /**< set alarm */ + +typedef struct rt_device *rt_device_t; +/** + * operations set for device object + */ +struct rt_device_ops +{ + /* common device interface */ + rt_err_t (*init) (rt_device_t dev); + rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag); + rt_err_t (*close) (rt_device_t dev); + rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size); + rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size); + rt_err_t (*control)(rt_device_t dev, int cmd, void *args); +}; + +/** + * WaitQueue structure + */ +struct rt_wqueue +{ + rt_uint32_t flag; + rt_list_t waiting_list; +}; +typedef struct rt_wqueue rt_wqueue_t; + +/** + * Device structure + */ +struct rt_device +{ + struct rt_object parent; /**< inherit from rt_object */ + + enum rt_device_class_type type; /**< device type */ + rt_uint16_t flag; /**< device flag */ + rt_uint16_t open_flag; /**< device open flag */ + + rt_uint8_t ref_count; /**< reference count */ + rt_uint8_t device_id; /**< 0 - 255 */ + + /* device call back */ + rt_err_t (*rx_indicate)(rt_device_t dev, rt_size_t size); + rt_err_t (*tx_complete)(rt_device_t dev, void *buffer); + +#ifdef RT_USING_DEVICE_OPS + const struct rt_device_ops *ops; +#else + /* common device interface */ + rt_err_t (*init) (rt_device_t dev); + rt_err_t (*open) (rt_device_t dev, rt_uint16_t oflag); + rt_err_t (*close) (rt_device_t dev); + rt_size_t (*read) (rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size); + rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size); + rt_err_t (*control)(rt_device_t dev, int cmd, void *args); +#endif + +#if defined(RT_USING_POSIX) + const struct dfs_file_ops *fops; + struct rt_wqueue wait_queue; +#endif + + void *user_data; /**< device private data */ +}; + +/** + * block device geometry structure + */ +struct rt_device_blk_geometry +{ + rt_uint32_t sector_count; /**< count of sectors */ + rt_uint32_t bytes_per_sector; /**< number of bytes per sector */ + rt_uint32_t block_size; /**< number of bytes to erase one block */ +}; + +/** + * sector arrange struct on block device + */ +struct rt_device_blk_sectors +{ + rt_uint32_t sector_begin; /**< begin sector */ + rt_uint32_t sector_end; /**< end sector */ +}; + +/** + * cursor control command + */ +#define RT_DEVICE_CTRL_CURSOR_SET_POSITION 0x10 +#define RT_DEVICE_CTRL_CURSOR_SET_TYPE 0x11 + +/** + * graphic device control command + */ +#define RTGRAPHIC_CTRL_RECT_UPDATE 0 +#define RTGRAPHIC_CTRL_POWERON 1 +#define RTGRAPHIC_CTRL_POWEROFF 2 +#define RTGRAPHIC_CTRL_GET_INFO 3 +#define RTGRAPHIC_CTRL_SET_MODE 4 +#define RTGRAPHIC_CTRL_GET_EXT 5 + +/* graphic deice */ +enum +{ + RTGRAPHIC_PIXEL_FORMAT_MONO = 0, + RTGRAPHIC_PIXEL_FORMAT_GRAY4, + RTGRAPHIC_PIXEL_FORMAT_GRAY16, + RTGRAPHIC_PIXEL_FORMAT_RGB332, + RTGRAPHIC_PIXEL_FORMAT_RGB444, + RTGRAPHIC_PIXEL_FORMAT_RGB565, + RTGRAPHIC_PIXEL_FORMAT_RGB565P, + RTGRAPHIC_PIXEL_FORMAT_BGR565 = RTGRAPHIC_PIXEL_FORMAT_RGB565P, + RTGRAPHIC_PIXEL_FORMAT_RGB666, + RTGRAPHIC_PIXEL_FORMAT_RGB888, + RTGRAPHIC_PIXEL_FORMAT_ARGB888, + RTGRAPHIC_PIXEL_FORMAT_ABGR888, + RTGRAPHIC_PIXEL_FORMAT_ARGB565, + RTGRAPHIC_PIXEL_FORMAT_ALPHA, + RTGRAPHIC_PIXEL_FORMAT_COLOR, +}; + +/** + * build a pixel position according to (x, y) coordinates. + */ +#define RTGRAPHIC_PIXEL_POSITION(x, y) ((x << 16) | y) + +/** + * graphic device information structure + */ +struct rt_device_graphic_info +{ + rt_uint8_t pixel_format; /**< graphic format */ + rt_uint8_t bits_per_pixel; /**< bits per pixel */ + rt_uint16_t reserved; /**< reserved field */ + + rt_uint16_t width; /**< width of graphic device */ + rt_uint16_t height; /**< height of graphic device */ + + rt_uint8_t *framebuffer; /**< frame buffer */ +}; + +/** + * rectangle information structure + */ +struct rt_device_rect_info +{ + rt_uint16_t x; /**< x coordinate */ + rt_uint16_t y; /**< y coordinate */ + rt_uint16_t width; /**< width */ + rt_uint16_t height; /**< height */ +}; + +/** + * graphic operations + */ +struct rt_device_graphic_ops +{ + void (*set_pixel) (const char *pixel, int x, int y); + void (*get_pixel) (char *pixel, int x, int y); + + void (*draw_hline)(const char *pixel, int x1, int x2, int y); + void (*draw_vline)(const char *pixel, int x, int y1, int y2); + + void (*blit_line) (const char *pixel, int x, int y, rt_size_t size); +}; +#define rt_graphix_ops(device) ((struct rt_device_graphic_ops *)(device->user_data)) + +/**@}*/ +#endif + +/* definitions for libc */ +#if defined (RT_USING_MINILIBC) || (RT_USING_LIBC) +/* definitions for libc */ +#include "rtlibc.h" +#endif + +#ifdef __cplusplus +} +#endif + +#ifdef __cplusplus +/* RT-Thread definitions for C++ */ +namespace rtthread { + +enum TICK_WAIT { + WAIT_NONE = 0, + WAIT_FOREVER = -1, +}; + +} + +#endif /* end of __cplusplus */ + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rthw.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rthw.h new file mode 100644 index 0000000000..3e74df0f22 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rthw.h @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-18 Bernard the first version + * 2006-04-25 Bernard add rt_hw_context_switch_interrupt declaration + * 2006-09-24 Bernard add rt_hw_context_switch_to declaration + * 2012-12-29 Bernard add rt_hw_exception_install declaration + * 2017-10-17 Hichard add some micros + */ + +#ifndef __RT_HW_H__ +#define __RT_HW_H__ + +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/* + * Some macros define + */ +#ifndef HWREG32 +#define HWREG32(x) (*((volatile rt_uint32_t *)(x))) +#endif +#ifndef HWREG16 +#define HWREG16(x) (*((volatile rt_uint16_t *)(x))) +#endif +#ifndef HWREG8 +#define HWREG8(x) (*((volatile rt_uint8_t *)(x))) +#endif + +#ifndef RT_CPU_CACHE_LINE_SZ +#define RT_CPU_CACHE_LINE_SZ 32 +#endif + +enum RT_HW_CACHE_OPS +{ + RT_HW_CACHE_FLUSH = 0x01, + RT_HW_CACHE_INVALIDATE = 0x02, +}; + +/* + * CPU interfaces + */ +void rt_hw_cpu_icache_enable(void); +void rt_hw_cpu_icache_disable(void); +rt_base_t rt_hw_cpu_icache_status(void); +void rt_hw_cpu_icache_ops(int ops, void* addr, int size); + +void rt_hw_cpu_dcache_enable(void); +void rt_hw_cpu_dcache_disable(void); +rt_base_t rt_hw_cpu_dcache_status(void); +void rt_hw_cpu_dcache_ops(int ops, void* addr, int size); + +void rt_hw_cpu_reset(void); +void rt_hw_cpu_shutdown(void); + +rt_uint8_t *rt_hw_stack_init(void *entry, + void *parameter, + rt_uint8_t *stack_addr, + void *exit); + +/* + * Interrupt handler definition + */ +typedef void (*rt_isr_handler_t)(int vector, void *param); + +struct rt_irq_desc +{ + rt_isr_handler_t handler; + void *param; + +#ifdef RT_USING_INTERRUPT_INFO + char name[RT_NAME_MAX]; + rt_uint32_t counter; +#endif +}; + +/* + * Interrupt interfaces + */ +void rt_hw_interrupt_init(void); +void rt_hw_interrupt_mask(int vector); +void rt_hw_interrupt_umask(int vector); +rt_isr_handler_t rt_hw_interrupt_install(int vector, + rt_isr_handler_t handler, + void *param, + const char *name); + +rt_base_t rt_hw_interrupt_disable(void); +void rt_hw_interrupt_enable(rt_base_t level); + +/* + * Context interfaces + */ +void rt_hw_context_switch(rt_uint32_t from, rt_uint32_t to); +void rt_hw_context_switch_to(rt_uint32_t to); +void rt_hw_context_switch_interrupt(rt_uint32_t from, rt_uint32_t to); + +void rt_hw_console_output(const char *str); + +void rt_hw_backtrace(rt_uint32_t *fp, rt_uint32_t thread_entry); +void rt_hw_show_memory(rt_uint32_t addr, rt_uint32_t size); + +/* + * Exception interfaces + */ +void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context)); + +/* + * delay interfaces + */ +void rt_hw_us_delay(rt_uint32_t us); + +#define RT_DEFINE_SPINLOCK(x) +#define RT_DECLARE_SPINLOCK(x) rt_ubase_t x + +#define rt_hw_spin_lock(lock) *(lock) = rt_hw_interrupt_disable() +#define rt_hw_spin_unlock(lock) rt_hw_interrupt_enable(*(lock)) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtlibc.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtlibc.h new file mode 100644 index 0000000000..b3a548beb1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtlibc.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-01-21 Bernard the first version + */ + +#ifndef RTLIBC_H__ +#define RTLIBC_H__ + +/* definitions for libc if toolchain has no these definitions */ +#include "libc/libc_stat.h" +#include "libc/libc_errno.h" + +#include "libc/libc_fcntl.h" +#include "libc/libc_ioctl.h" +#include "libc/libc_dirent.h" +#include "libc/libc_signal.h" +#include "libc/libc_fdset.h" + +#if defined(__CC_ARM) || defined(__CLANG_ARM) || defined(__IAR_SYSTEMS_ICC__) +typedef signed long off_t; +typedef int mode_t; +#endif + +#if defined(__MINGW32__) || defined(_WIN32) +typedef signed long off_t; +typedef int mode_t; +#endif + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtm.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtm.h new file mode 100644 index 0000000000..7e07a2239c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtm.h @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +#ifndef __RTM_H__ +#define __RTM_H__ + +#include +#include + +#ifdef RT_USING_MODULE +struct rt_module_symtab +{ + void *addr; + const char *name; +}; + +#if defined(_MSC_VER) +#pragma section("RTMSymTab$f",read) +#define RTM_EXPORT(symbol) \ +__declspec(allocate("RTMSymTab$f"))const char __rtmsym_##symbol##_name[] = "__vs_rtm_"#symbol; +#pragma comment(linker, "/merge:RTMSymTab=mytext") + +#elif defined(__MINGW32__) +#define RTM_EXPORT(symbol) + +#else +#define RTM_EXPORT(symbol) \ +const char __rtmsym_##symbol##_name[] SECTION(".rodata.name") = #symbol; \ +const struct rt_module_symtab __rtmsym_##symbol SECTION("RTMSymTab")= \ +{ \ + (void *)&symbol, \ + __rtmsym_##symbol##_name \ +}; +#endif + +#else +#define RTM_EXPORT(symbol) +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtservice.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtservice.h new file mode 100644 index 0000000000..81d6c71f17 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtservice.h @@ -0,0 +1,315 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-16 Bernard the first version + * 2006-09-07 Bernard move the kservice APIs to rtthread.h + * 2007-06-27 Bernard fix the rt_list_remove bug + * 2012-03-22 Bernard rename kservice.h to rtservice.h + * 2017-11-15 JasonJia Modify rt_slist_foreach to rt_slist_for_each_entry. + * Make code cleanup. + */ + +#ifndef __RT_SERVICE_H__ +#define __RT_SERVICE_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup KernelService + */ + +/**@{*/ + +/** + * rt_container_of - return the member address of ptr, if the type of ptr is the + * struct type. + */ +#define rt_container_of(ptr, type, member) \ + ((type *)((char *)(ptr) - (unsigned long)(&((type *)0)->member))) + + +/** + * @brief initialize a list object + */ +#define RT_LIST_OBJECT_INIT(object) { &(object), &(object) } + +/** + * @brief initialize a list + * + * @param l list to be initialized + */ +rt_inline void rt_list_init(rt_list_t *l) +{ + l->next = l->prev = l; +} + +/** + * @brief insert a node after a list + * + * @param l list to insert it + * @param n new node to be inserted + */ +rt_inline void rt_list_insert_after(rt_list_t *l, rt_list_t *n) +{ + l->next->prev = n; + n->next = l->next; + + l->next = n; + n->prev = l; +} + +/** + * @brief insert a node before a list + * + * @param n new node to be inserted + * @param l list to insert it + */ +rt_inline void rt_list_insert_before(rt_list_t *l, rt_list_t *n) +{ + l->prev->next = n; + n->prev = l->prev; + + l->prev = n; + n->next = l; +} + +/** + * @brief remove node from list. + * @param n the node to remove from the list. + */ +rt_inline void rt_list_remove(rt_list_t *n) +{ + n->next->prev = n->prev; + n->prev->next = n->next; + + n->next = n->prev = n; +} + +/** + * @brief tests whether a list is empty + * @param l the list to test. + */ +rt_inline int rt_list_isempty(const rt_list_t *l) +{ + return l->next == l; +} + +/** + * @brief get the list length + * @param l the list to get. + */ +rt_inline unsigned int rt_list_len(const rt_list_t *l) +{ + unsigned int len = 0; + const rt_list_t *p = l; + while (p->next != l) + { + p = p->next; + len ++; + } + + return len; +} + +/** + * @brief get the struct for this entry + * @param node the entry point + * @param type the type of structure + * @param member the name of list in structure + */ +#define rt_list_entry(node, type, member) \ + rt_container_of(node, type, member) + +/** + * rt_list_for_each - iterate over a list + * @pos: the rt_list_t * to use as a loop cursor. + * @head: the head for your list. + */ +#define rt_list_for_each(pos, head) \ + for (pos = (head)->next; pos != (head); pos = pos->next) + +/** + * rt_list_for_each_safe - iterate over a list safe against removal of list entry + * @pos: the rt_list_t * to use as a loop cursor. + * @n: another rt_list_t * to use as temporary storage + * @head: the head for your list. + */ +#define rt_list_for_each_safe(pos, n, head) \ + for (pos = (head)->next, n = pos->next; pos != (head); \ + pos = n, n = pos->next) + +/** + * rt_list_for_each_entry - iterate over list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define rt_list_for_each_entry(pos, head, member) \ + for (pos = rt_list_entry((head)->next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = rt_list_entry(pos->member.next, typeof(*pos), member)) + +/** + * rt_list_for_each_entry_safe - iterate over list of given type safe against removal of list entry + * @pos: the type * to use as a loop cursor. + * @n: another type * to use as temporary storage + * @head: the head for your list. + * @member: the name of the list_struct within the struct. + */ +#define rt_list_for_each_entry_safe(pos, n, head, member) \ + for (pos = rt_list_entry((head)->next, typeof(*pos), member), \ + n = rt_list_entry(pos->member.next, typeof(*pos), member); \ + &pos->member != (head); \ + pos = n, n = rt_list_entry(n->member.next, typeof(*n), member)) + +/** + * rt_list_first_entry - get the first element from a list + * @ptr: the list head to take the element from. + * @type: the type of the struct this is embedded in. + * @member: the name of the list_struct within the struct. + * + * Note, that list is expected to be not empty. + */ +#define rt_list_first_entry(ptr, type, member) \ + rt_list_entry((ptr)->next, type, member) + +#define RT_SLIST_OBJECT_INIT(object) { RT_NULL } + +/** + * @brief initialize a single list + * + * @param l the single list to be initialized + */ +rt_inline void rt_slist_init(rt_slist_t *l) +{ + l->next = RT_NULL; +} + +rt_inline void rt_slist_append(rt_slist_t *l, rt_slist_t *n) +{ + struct rt_slist_node *node; + + node = l; + while (node->next) node = node->next; + + /* append the node to the tail */ + node->next = n; + n->next = RT_NULL; +} + +rt_inline void rt_slist_insert(rt_slist_t *l, rt_slist_t *n) +{ + n->next = l->next; + l->next = n; +} + +rt_inline unsigned int rt_slist_len(const rt_slist_t *l) +{ + unsigned int len = 0; + const rt_slist_t *list = l->next; + while (list != RT_NULL) + { + list = list->next; + len ++; + } + + return len; +} + +rt_inline rt_slist_t *rt_slist_remove(rt_slist_t *l, rt_slist_t *n) +{ + /* remove slist head */ + struct rt_slist_node *node = l; + while (node->next && node->next != n) node = node->next; + + /* remove node */ + if (node->next != (rt_slist_t *)0) node->next = node->next->next; + + return l; +} + +rt_inline rt_slist_t *rt_slist_first(rt_slist_t *l) +{ + return l->next; +} + +rt_inline rt_slist_t *rt_slist_tail(rt_slist_t *l) +{ + while (l->next) l = l->next; + + return l; +} + +rt_inline rt_slist_t *rt_slist_next(rt_slist_t *n) +{ + return n->next; +} + +rt_inline int rt_slist_isempty(rt_slist_t *l) +{ + return l->next == RT_NULL; +} + +/** + * @brief get the struct for this single list node + * @param node the entry point + * @param type the type of structure + * @param member the name of list in structure + */ +#define rt_slist_entry(node, type, member) \ + rt_container_of(node, type, member) + +/** + * rt_slist_for_each - iterate over a single list + * @pos: the rt_slist_t * to use as a loop cursor. + * @head: the head for your single list. + */ +#define rt_slist_for_each(pos, head) \ + for (pos = (head)->next; pos != RT_NULL; pos = pos->next) + +/** + * rt_slist_for_each_entry - iterate over single list of given type + * @pos: the type * to use as a loop cursor. + * @head: the head for your single list. + * @member: the name of the list_struct within the struct. + */ +#define rt_slist_for_each_entry(pos, head, member) \ + for (pos = rt_slist_entry((head)->next, typeof(*pos), member); \ + &pos->member != (RT_NULL); \ + pos = rt_slist_entry(pos->member.next, typeof(*pos), member)) + +/** + * rt_slist_first_entry - get the first element from a slist + * @ptr: the slist head to take the element from. + * @type: the type of the struct this is embedded in. + * @member: the name of the slist_struct within the struct. + * + * Note, that slist is expected to be not empty. + */ +#define rt_slist_first_entry(ptr, type, member) \ + rt_slist_entry((ptr)->next, type, member) + +/** + * rt_slist_tail_entry - get the tail element from a slist + * @ptr: the slist head to take the element from. + * @type: the type of the struct this is embedded in. + * @member: the name of the slist_struct within the struct. + * + * Note, that slist is expected to be not empty. + */ +#define rt_slist_tail_entry(ptr, type, member) \ + rt_slist_entry(rt_slist_tail(ptr), type, member) + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtthread.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtthread.h new file mode 100644 index 0000000000..bfe41a3e32 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/include/rtthread.h @@ -0,0 +1,533 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-18 Bernard the first version + * 2006-04-26 Bernard add semaphore APIs + * 2006-08-10 Bernard add version information + * 2007-01-28 Bernard rename RT_OBJECT_Class_Static to RT_Object_Class_Static + * 2007-03-03 Bernard clean up the definitions to rtdef.h + * 2010-04-11 yi.qiu add module feature + * 2013-06-24 Bernard add rt_kprintf re-define when not use RT_USING_CONSOLE. + * 2016-08-09 ArdaFu add new thread and interrupt hook. + */ + +#ifndef __RT_THREAD_H__ +#define __RT_THREAD_H__ + +#include +#include +#include +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @addtogroup KernelObject + */ + +/**@{*/ + +/* + * kernel object interface + */ +void rt_system_object_init(void); +struct rt_object_information * +rt_object_get_information(enum rt_object_class_type type); +void rt_object_init(struct rt_object *object, + enum rt_object_class_type type, + const char *name); +void rt_object_detach(rt_object_t object); +rt_object_t rt_object_allocate(enum rt_object_class_type type, + const char *name); +void rt_object_delete(rt_object_t object); +rt_bool_t rt_object_is_systemobject(rt_object_t object); +rt_uint8_t rt_object_get_type(rt_object_t object); +rt_object_t rt_object_find(const char *name, rt_uint8_t type); + +#ifdef RT_USING_HOOK +void rt_object_attach_sethook(void (*hook)(struct rt_object *object)); +void rt_object_detach_sethook(void (*hook)(struct rt_object *object)); +void rt_object_trytake_sethook(void (*hook)(struct rt_object *object)); +void rt_object_take_sethook(void (*hook)(struct rt_object *object)); +void rt_object_put_sethook(void (*hook)(struct rt_object *object)); +#endif + +/**@}*/ + +/** + * @addtogroup Clock + */ + +/**@{*/ + +/* + * clock & timer interface + */ +void rt_system_tick_init(void); +rt_tick_t rt_tick_get(void); +void rt_tick_set(rt_tick_t tick); +void rt_tick_increase(void); +rt_tick_t rt_tick_from_millisecond(rt_int32_t ms); + +void rt_system_timer_init(void); +void rt_system_timer_thread_init(void); + +void rt_timer_init(rt_timer_t timer, + const char *name, + void (*timeout)(void *parameter), + void *parameter, + rt_tick_t time, + rt_uint8_t flag); +rt_err_t rt_timer_detach(rt_timer_t timer); +rt_timer_t rt_timer_create(const char *name, + void (*timeout)(void *parameter), + void *parameter, + rt_tick_t time, + rt_uint8_t flag); +rt_err_t rt_timer_delete(rt_timer_t timer); +rt_err_t rt_timer_start(rt_timer_t timer); +rt_err_t rt_timer_stop(rt_timer_t timer); +rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg); + +rt_tick_t rt_timer_next_timeout_tick(void); +void rt_timer_check(void); + +#ifdef RT_USING_HOOK +void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer)); +void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer)); +#endif + +/**@}*/ + +/** + * @addtogroup Thread + */ + +/**@{*/ + +/* + * thread interface + */ +rt_err_t rt_thread_init(struct rt_thread *thread, + const char *name, + void (*entry)(void *parameter), + void *parameter, + void *stack_start, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); +rt_err_t rt_thread_detach(rt_thread_t thread); +rt_thread_t rt_thread_create(const char *name, + void (*entry)(void *parameter), + void *parameter, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick); +rt_thread_t rt_thread_self(void); +rt_thread_t rt_thread_find(char *name); +rt_err_t rt_thread_startup(rt_thread_t thread); +rt_err_t rt_thread_delete(rt_thread_t thread); + +rt_err_t rt_thread_yield(void); +rt_err_t rt_thread_delay(rt_tick_t tick); +rt_err_t rt_thread_mdelay(rt_int32_t ms); +rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg); +rt_err_t rt_thread_suspend(rt_thread_t thread); +rt_err_t rt_thread_resume(rt_thread_t thread); +void rt_thread_timeout(void *parameter); + +#ifdef RT_USING_SIGNALS +void rt_thread_alloc_sig(rt_thread_t tid); +void rt_thread_free_sig(rt_thread_t tid); +int rt_thread_kill(rt_thread_t tid, int sig); +#endif + +#ifdef RT_USING_HOOK +void rt_thread_suspend_sethook(void (*hook)(rt_thread_t thread)); +void rt_thread_resume_sethook (void (*hook)(rt_thread_t thread)); +void rt_thread_inited_sethook (void (*hook)(rt_thread_t thread)); +#endif + +/* + * idle thread interface + */ +void rt_thread_idle_init(void); +#if defined(RT_USING_HOOK) || defined(RT_USING_IDLE_HOOK) +rt_err_t rt_thread_idle_sethook(void (*hook)(void)); +rt_err_t rt_thread_idle_delhook(void (*hook)(void)); +#endif +void rt_thread_idle_excute(void); +rt_thread_t rt_thread_idle_gethandler(void); + +/* + * schedule service + */ +void rt_system_scheduler_init(void); +void rt_system_scheduler_start(void); + +void rt_schedule(void); +void rt_schedule_insert_thread(struct rt_thread *thread); +void rt_schedule_remove_thread(struct rt_thread *thread); + +void rt_enter_critical(void); +void rt_exit_critical(void); +rt_uint16_t rt_critical_level(void); + +#ifdef RT_USING_HOOK +void rt_scheduler_sethook(void (*hook)(rt_thread_t from, rt_thread_t to)); +#endif + +/**@}*/ + +/** + * @addtogroup Signals + * @{ + */ +#ifdef RT_USING_SIGNALS +void rt_signal_mask(int signo); +void rt_signal_unmask(int signo); +rt_sighandler_t rt_signal_install(int signo, rt_sighandler_t handler); +int rt_signal_wait(const rt_sigset_t *set, rt_siginfo_t *si, rt_int32_t timeout); + +int rt_system_signal_init(void); +#endif +/*@}*/ + +/** + * @addtogroup MM + */ + +/**@{*/ + +/* + * memory management interface + */ +#ifdef RT_USING_MEMPOOL +/* + * memory pool interface + */ +rt_err_t rt_mp_init(struct rt_mempool *mp, + const char *name, + void *start, + rt_size_t size, + rt_size_t block_size); +rt_err_t rt_mp_detach(struct rt_mempool *mp); +rt_mp_t rt_mp_create(const char *name, + rt_size_t block_count, + rt_size_t block_size); +rt_err_t rt_mp_delete(rt_mp_t mp); + +void *rt_mp_alloc(rt_mp_t mp, rt_int32_t time); +void rt_mp_free(void *block); + +#ifdef RT_USING_HOOK +void rt_mp_alloc_sethook(void (*hook)(struct rt_mempool *mp, void *block)); +void rt_mp_free_sethook(void (*hook)(struct rt_mempool *mp, void *block)); +#endif + +#endif + +#ifdef RT_USING_HEAP +/* + * heap memory interface + */ +void rt_system_heap_init(void *begin_addr, void *end_addr); + +void *rt_malloc(rt_size_t nbytes); +void rt_free(void *ptr); +void *rt_realloc(void *ptr, rt_size_t nbytes); +void *rt_calloc(rt_size_t count, rt_size_t size); +void *rt_malloc_align(rt_size_t size, rt_size_t align); +void rt_free_align(void *ptr); + +void rt_memory_info(rt_uint32_t *total, + rt_uint32_t *used, + rt_uint32_t *max_used); + +#ifdef RT_USING_SLAB +void *rt_page_alloc(rt_size_t npages); +void rt_page_free(void *addr, rt_size_t npages); +#endif + +#ifdef RT_USING_HOOK +void rt_malloc_sethook(void (*hook)(void *ptr, rt_size_t size)); +void rt_free_sethook(void (*hook)(void *ptr)); +#endif + +#endif + +#ifdef RT_USING_MEMHEAP +/** + * memory heap object interface + */ +rt_err_t rt_memheap_init(struct rt_memheap *memheap, + const char *name, + void *start_addr, + rt_size_t size); +rt_err_t rt_memheap_detach(struct rt_memheap *heap); +void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size); +void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize); +void rt_memheap_free(void *ptr); +#endif + +/**@}*/ + +/** + * @addtogroup IPC + */ + +/**@{*/ + +#ifdef RT_USING_SEMAPHORE +/* + * semaphore interface + */ +rt_err_t rt_sem_init(rt_sem_t sem, + const char *name, + rt_uint32_t value, + rt_uint8_t flag); +rt_err_t rt_sem_detach(rt_sem_t sem); +rt_sem_t rt_sem_create(const char *name, rt_uint32_t value, rt_uint8_t flag); +rt_err_t rt_sem_delete(rt_sem_t sem); + +rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time); +rt_err_t rt_sem_trytake(rt_sem_t sem); +rt_err_t rt_sem_release(rt_sem_t sem); +rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg); +#endif + +#ifdef RT_USING_MUTEX +/* + * mutex interface + */ +rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag); +rt_err_t rt_mutex_detach(rt_mutex_t mutex); +rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag); +rt_err_t rt_mutex_delete(rt_mutex_t mutex); + +rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time); +rt_err_t rt_mutex_release(rt_mutex_t mutex); +rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg); +#endif + +#ifdef RT_USING_EVENT +/* + * event interface + */ +rt_err_t rt_event_init(rt_event_t event, const char *name, rt_uint8_t flag); +rt_err_t rt_event_detach(rt_event_t event); +rt_event_t rt_event_create(const char *name, rt_uint8_t flag); +rt_err_t rt_event_delete(rt_event_t event); + +rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set); +rt_err_t rt_event_recv(rt_event_t event, + rt_uint32_t set, + rt_uint8_t opt, + rt_int32_t timeout, + rt_uint32_t *recved); +rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg); +#endif + +#ifdef RT_USING_MAILBOX +/* + * mailbox interface + */ +rt_err_t rt_mb_init(rt_mailbox_t mb, + const char *name, + void *msgpool, + rt_size_t size, + rt_uint8_t flag); +rt_err_t rt_mb_detach(rt_mailbox_t mb); +rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag); +rt_err_t rt_mb_delete(rt_mailbox_t mb); + +rt_err_t rt_mb_send(rt_mailbox_t mb, rt_uint32_t value); +rt_err_t rt_mb_send_wait(rt_mailbox_t mb, + rt_uint32_t value, + rt_int32_t timeout); +rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_uint32_t *value, rt_int32_t timeout); +rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg); +#endif + +#ifdef RT_USING_MESSAGEQUEUE +/* + * message queue interface + */ +rt_err_t rt_mq_init(rt_mq_t mq, + const char *name, + void *msgpool, + rt_size_t msg_size, + rt_size_t pool_size, + rt_uint8_t flag); +rt_err_t rt_mq_detach(rt_mq_t mq); +rt_mq_t rt_mq_create(const char *name, + rt_size_t msg_size, + rt_size_t max_msgs, + rt_uint8_t flag); +rt_err_t rt_mq_delete(rt_mq_t mq); + +rt_err_t rt_mq_send(rt_mq_t mq, void *buffer, rt_size_t size); +rt_err_t rt_mq_urgent(rt_mq_t mq, void *buffer, rt_size_t size); +rt_err_t rt_mq_recv(rt_mq_t mq, + void *buffer, + rt_size_t size, + rt_int32_t timeout); +rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg); +#endif + +/**@}*/ + +#ifdef RT_USING_DEVICE +/** + * @addtogroup Device + */ + +/**@{*/ + +/* + * device (I/O) system interface + */ +rt_device_t rt_device_find(const char *name); + +rt_err_t rt_device_register(rt_device_t dev, + const char *name, + rt_uint16_t flags); +rt_err_t rt_device_unregister(rt_device_t dev); + +rt_device_t rt_device_create(int type, int attach_size); +void rt_device_destroy(rt_device_t device); + +rt_err_t rt_device_init_all(void); + +rt_err_t +rt_device_set_rx_indicate(rt_device_t dev, + rt_err_t (*rx_ind)(rt_device_t dev, rt_size_t size)); +rt_err_t +rt_device_set_tx_complete(rt_device_t dev, + rt_err_t (*tx_done)(rt_device_t dev, void *buffer)); + +rt_err_t rt_device_init (rt_device_t dev); +rt_err_t rt_device_open (rt_device_t dev, rt_uint16_t oflag); +rt_err_t rt_device_close(rt_device_t dev); +rt_size_t rt_device_read (rt_device_t dev, + rt_off_t pos, + void *buffer, + rt_size_t size); +rt_size_t rt_device_write(rt_device_t dev, + rt_off_t pos, + const void *buffer, + rt_size_t size); +rt_err_t rt_device_control(rt_device_t dev, int cmd, void *arg); + +/**@}*/ +#endif + +/* + * interrupt service + */ + +/* + * rt_interrupt_enter and rt_interrupt_leave only can be called by BSP + */ +void rt_interrupt_enter(void); +void rt_interrupt_leave(void); + +/* + * the number of nested interrupts. + */ +rt_uint8_t rt_interrupt_get_nest(void); + +#ifdef RT_USING_HOOK +void rt_interrupt_enter_sethook(void (*hook)(void)); +void rt_interrupt_leave_sethook(void (*hook)(void)); +#endif + +#ifdef RT_USING_COMPONENTS_INIT +void rt_components_init(void); +void rt_components_board_init(void); +#endif + +/** + * @addtogroup KernelService + */ + +/**@{*/ + +/* + * general kernel service + */ +#ifndef RT_USING_CONSOLE +#define rt_kprintf(...) +#define rt_kputs(str) +#else +void rt_kprintf(const char *fmt, ...); +void rt_kputs(const char *str); +#endif +rt_int32_t rt_vsprintf(char *dest, const char *format, va_list arg_ptr); +rt_int32_t rt_vsnprintf(char *buf, rt_size_t size, const char *fmt, va_list args); +rt_int32_t rt_sprintf(char *buf, const char *format, ...); +rt_int32_t rt_snprintf(char *buf, rt_size_t size, const char *format, ...); + +#if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) +rt_device_t rt_console_set_device(const char *name); +rt_device_t rt_console_get_device(void); +#endif + +rt_err_t rt_get_errno(void); +void rt_set_errno(rt_err_t no); +int *_rt_errno(void); +#if !defined(RT_USING_NEWLIB) && !defined(_WIN32) +#ifndef errno +#define errno *_rt_errno() +#endif +#endif + +int __rt_ffs(int value); + +void *rt_memset(void *src, int c, rt_ubase_t n); +void *rt_memcpy(void *dest, const void *src, rt_ubase_t n); + +rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count); +rt_int32_t rt_strcmp(const char *cs, const char *ct); +rt_size_t rt_strlen(const char *src); +rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen); +char *rt_strdup(const char *s); +#if defined(__CC_ARM) || defined(__CLANG_ARM) +/* leak strdup interface */ +char* strdup(const char* str); +#endif + +char *rt_strstr(const char *str1, const char *str2); +rt_int32_t rt_sscanf(const char *buf, const char *fmt, ...); +char *rt_strncpy(char *dest, const char *src, rt_ubase_t n); +void *rt_memmove(void *dest, const void *src, rt_ubase_t n); +rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count); +rt_uint32_t rt_strcasecmp(const char *a, const char *b); + +void rt_show_version(void); + +#ifdef RT_DEBUG +extern void (*rt_assert_hook)(const char *ex, const char *func, rt_size_t line); +void rt_assert_set_hook(void (*hook)(const char *ex, const char *func, rt_size_t line)); + +void rt_assert_handler(const char *ex, const char *func, rt_size_t line); +#endif /* RT_DEBUG */ + +#ifdef RT_USING_FINSH +#include +#endif + +/**@}*/ + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_gcc.S new file mode 100644 index 0000000000..b6b7863679 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_gcc.S @@ -0,0 +1,78 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2011-08-14 weety copy from mini2440 +; */ + +#define NOINT 0xC0 + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + .globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS R0, CPSR + ORR R1, R0, #NOINT + MSR CPSR_c, R1 + BX LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR CPSR, R0 + BX LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * r0 --> from + * r1 --> to + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + STMFD SP!, {LR} @; push pc (lr should be pushed in place of pc) + STMFD SP!, {R0-R12, LR} @; push lr & register file + MRS R4, CPSR + STMFD SP!, {R4} @; push cpsr + STR SP, [R0] @; store sp in preempted tasks tcb + LDR SP, [R1] @; get new task stack pointer + LDMFD SP!, {R4} @; pop new task spsr + MSR SPSR_cxsf, R4 + LDMFD SP!, {R0-R12, LR, PC}^ @; pop new task r0-r12, lr & pc + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR SP, [R0] @; get new task stack pointer + LDMFD SP!, {R4} @; pop new task cpsr + MSR SPSR_cxsf, R4 + LDMFD SP!, {R0-R12, LR, PC}^ @; pop new task r0-r12, lr & pc + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); + */ + .globl rt_thread_switch_interrupt_flag + .globl rt_interrupt_from_thread + .globl rt_interrupt_to_thread + .globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + LDR R2, =rt_thread_switch_interrupt_flag + LDR R3, [R2] + CMP R3, #1 + BEQ _reswitch + MOV R3, #1 @; set flag to 1 + STR R3, [R2] + LDR R2, =rt_interrupt_from_thread @; set rt_interrupt_from_thread + STR R0, [R2] +_reswitch: + LDR R2, =rt_interrupt_to_thread @; set rt_interrupt_to_thread + STR R1, [R2] + BX LR diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_iar.S new file mode 100644 index 0000000000..902552734e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_iar.S @@ -0,0 +1,82 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-08-14 weety copy from mini2440 + * 2015-04-15 ArdaFu convert from context_gcc.s + */ + +#define NOINT 0xc0 + + SECTION .text:CODE(6) +/* + * rt_base_t rt_hw_interrupt_disable(); + */ + PUBLIC rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS R0, CPSR + ORR R1, R0, #NOINT + MSR CPSR_C, R1 + MOV PC, LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + PUBLIC rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR CPSR_CXSF, R0 + MOV PC, LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * r0 --> from + * r1 --> to + */ + PUBLIC rt_hw_context_switch +rt_hw_context_switch: + STMFD SP!, {LR} ; push pc (lr should be pushed in place of PC) + STMFD SP!, {R0-R12, LR} ; push lr & register file + MRS R4, CPSR + STMFD SP!, {R4} ; push cpsr + STR SP, [R0] ; store sp in preempted tasks TCB + LDR SP, [R1] ; get new task stack pointer + LDMFD SP!, {R4} ; pop new task spsr + MSR SPSR_cxsf, R4 + LDMFD SP!, {R0-R12, LR, PC}^ ; pop new task r0-r12, lr & pc + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ + PUBLIC rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR SP, [R0] ; get new task stack pointer + LDMFD SP!, {R4} ; pop new task spsr + MSR SPSR_cxsf, R4 + LDMFD SP!, {R0-R12, LR, PC}^ ; pop new task r0-r12, lr & pc + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); + */ + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + PUBLIC rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + LDR R2, =rt_thread_switch_interrupt_flag + LDR R3, [R2] + CMP R3, #1 + BEQ _reswitch + MOV R3, #1 ; set flag to 1 + STR R3, [R2] + LDR R2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR R0, [R2] +_reswitch: + LDR R2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR R1, [R2] + MOV PC, LR + END + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_rvds.S new file mode 100644 index 0000000000..03eff68d4c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/context_rvds.S @@ -0,0 +1,91 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2011-08-14 weety copy from mini2440 +; */ + +NOINT EQU 0XC0 ; disable interrupt in psr + + AREA |.TEXT|, CODE, READONLY, ALIGN=2 + ARM + REQUIRE8 + PRESERVE8 + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ +rt_hw_interrupt_disable PROC + EXPORT rt_hw_interrupt_disable + MRS R0, CPSR + ORR R1, R0, #NOINT + MSR CPSR_C, R1 + BX LR + ENDP + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ +rt_hw_interrupt_enable proc + export rt_hw_interrupt_enable + msr cpsr_c, r0 + bx lr + endp + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ +rt_hw_context_switch proc + export rt_hw_context_switch + stmfd sp!, {lr} ; push pc (lr should be pushed in place of pc) + stmfd sp!, {r0-r12, lr} ; push lr & register file + mrs r4, cpsr + stmfd sp!, {r4} ; push cpsr + str sp, [r0] ; store sp in preempted tasks tcb + ldr sp, [r1] ; get new task stack pointer + ldmfd sp!, {r4} ; pop new task spsr + msr spsr_cxsf, r4 + ldmfd sp!, {r0-r12, lr, pc}^ ; pop new task r0-r12, lr & pc + endp + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; */ +rt_hw_context_switch_to proc + export rt_hw_context_switch_to + ldr sp, [r0] ; get new task stack pointer + ldmfd sp!, {r4} ; pop new task spsr + msr spsr_cxsf, r4 + ldmfd sp!, {r0-r12, lr, pc}^ ; pop new task r0-r12, lr & pc + endp + +;/* +; * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); +; */ + import rt_thread_switch_interrupt_flag + import rt_interrupt_from_thread + import rt_interrupt_to_thread + +rt_hw_context_switch_interrupt proc + export rt_hw_context_switch_interrupt + ldr r2, =rt_thread_switch_interrupt_flag + ldr r3, [r2] + cmp r3, #1 + beq _reswitch + mov r3, #1 ; set flag to 1 + str r3, [r2] + ldr r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + str r0, [r2] +_reswitch + ldr r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + str r1, [r2] + bx lr + endp + + end diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/cpuport.c new file mode 100644 index 0000000000..1efb23e896 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/cpuport.c @@ -0,0 +1,230 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety modified from mini2440 + * 2015-04-15 ArdaFu Add code for IAR + */ + +#include +#include + +#define ICACHE_MASK (rt_uint32_t)(1 << 12) +#define DCACHE_MASK (rt_uint32_t)(1 << 2) + +extern void machine_reset(void); +extern void machine_shutdown(void); + +#if defined(__GNUC__) || defined(__ICCARM__) +rt_inline rt_uint32_t cp15_rd(void) +{ + rt_uint32_t i; + + __asm volatile("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + return i; +} + +rt_inline void cache_enable(rt_uint32_t bit) +{ + __asm volatile(\ + "mrc p15,0,r0,c1,c0,0\n\t" \ + "orr r0,r0,%0\n\t" \ + "mcr p15,0,r0,c1,c0,0" \ + : \ + :"r" (bit) \ + :"memory"); +} + +rt_inline void cache_disable(rt_uint32_t bit) +{ + __asm volatile(\ + "mrc p15,0,r0,c1,c0,0\n\t" \ + "bic r0,r0,%0\n\t" \ + "mcr p15,0,r0,c1,c0,0" \ + : \ + :"r" (bit) \ + :"memory"); +} +#endif + +#if defined(__CC_ARM) +rt_inline rt_uint32_t cp15_rd(void) +{ + rt_uint32_t i; + + __asm volatile + { + mrc p15, 0, i, c1, c0, 0 + } + + return i; +} + +rt_inline void cache_enable(rt_uint32_t bit) +{ + rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, bit + mcr p15, 0, value, c1, c0, 0 + } +} + +rt_inline void cache_disable(rt_uint32_t bit) +{ + rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, bit + mcr p15, 0, value, c1, c0, 0 + } +} +#endif + +/** + * enable I-Cache + * + */ +void rt_hw_cpu_icache_enable() +{ + cache_enable(ICACHE_MASK); +} + +/** + * disable I-Cache + * + */ +void rt_hw_cpu_icache_disable() +{ + cache_disable(ICACHE_MASK); +} + +/** + * return the status of I-Cache + * + */ +rt_base_t rt_hw_cpu_icache_status() +{ + return (cp15_rd() & ICACHE_MASK); +} + +/** + * enable D-Cache + * + */ +void rt_hw_cpu_dcache_enable() +{ + cache_enable(DCACHE_MASK); +} + +/** + * disable D-Cache + * + */ +void rt_hw_cpu_dcache_disable() +{ + cache_disable(DCACHE_MASK); +} + +/** + * return the status of D-Cache + * + */ +rt_base_t rt_hw_cpu_dcache_status() +{ + return (cp15_rd() & DCACHE_MASK); +} + +/** + * reset cpu by dog's time-out + * + */ +void rt_hw_cpu_reset() +{ + + rt_kprintf("Restarting system...\n"); + machine_reset(); + + while(1); /* loop forever and wait for reset to happen */ + + /* NEVER REACHED */ +} + +/** + * shutdown CPU + * + */ +void rt_hw_cpu_shutdown() +{ + rt_uint32_t level; + rt_kprintf("shutdown...\n"); + + level = rt_hw_interrupt_disable(); + machine_shutdown(); + while (level) + { + RT_ASSERT(0); + } +} + +#ifdef RT_USING_CPU_FFS +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +#if defined(__CC_ARM) +int __rt_ffs(int value) +{ + register rt_uint32_t x; + + if (value == 0) + return value; + + __asm + { + rsb x, value, #0 + and x, x, value + clz x, x + rsb x, x, #32 + } + + return x; +} +#elif defined(__GNUC__) || defined(__ICCARM__) +int __rt_ffs(int value) +{ + register rt_uint32_t x; + + if (value == 0) + return value; + + __asm + ( + "rsb %[temp], %[val], #0\n" + "and %[temp], %[temp], %[val]\n" + "clz %[temp], %[temp]\n" + "rsb %[temp], %[temp], #32\n" + :[temp] "=r"(x) + :[val] "r"(value) + ); + return x; +} +#endif + +#endif + + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.c new file mode 100644 index 0000000000..f1e475189b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.c @@ -0,0 +1,443 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2015-04-15 ArdaFu Add code for IAR + */ + +#include "mmu.h" + +/*----- Keil -----------------------------------------------------------------*/ +#ifdef __CC_ARM +void mmu_setttbase(rt_uint32_t i) +{ + register rt_uint32_t value; + + /* Invalidates all TLBs.Domain access is selected as + * client by configuring domain access register, + * in that case access controlled by permission value + * set by page table entry + */ + value = 0; + __asm volatile{ mcr p15, 0, value, c8, c7, 0 } + value = 0x55555555; + __asm volatile { mcr p15, 0, value, c3, c0, 0 } + __asm volatile { mcr p15, 0, i, c2, c0, 0 } +} + +void mmu_set_domain(rt_uint32_t i) +{ + __asm volatile { mcr p15, 0, i, c3, c0, 0 } +} + +void mmu_enable() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x01 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x01 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_icache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x1000 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_dcache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x04 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_icache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x1000 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_dcache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x04 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_alignfault() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x02 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_alignfault() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x02 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_clean_invalidated_cache_index(int index) +{ + __asm volatile { mcr p15, 0, index, c7, c14, 2 } +} + +void mmu_clean_invalidated_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while(ptr < buffer + size) + { + __asm volatile { MCR p15, 0, ptr, c7, c14, 1 } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_clean_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + __asm volatile { MCR p15, 0, ptr, c7, c10, 1 } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + __asm volatile { MCR p15, 0, ptr, c7, c6, 1 } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_tlb() +{ + register rt_uint32_t value; + + value = 0; + __asm volatile { mcr p15, 0, value, c8, c7, 0 } +} + +void mmu_invalidate_icache() +{ + register rt_uint32_t value; + + value = 0; + + __asm volatile { mcr p15, 0, value, c7, c5, 0 } +} + + +void mmu_invalidate_dcache_all() +{ + register rt_uint32_t value; + + value = 0; + + __asm volatile { mcr p15, 0, value, c7, c6, 0 } +} +/*----- GNU ------------------------------------------------------------------*/ +#elif defined(__GNUC__) || defined(__ICCARM__) +void mmu_setttbase(register rt_uint32_t i) +{ + register rt_uint32_t value; + + /* Invalidates all TLBs.Domain access is selected as + * client by configuring domain access register, + * in that case access controlled by permission value + * set by page table entry + */ + value = 0; + asm volatile ("mcr p15, 0, %0, c8, c7, 0"::"r"(value)); + + value = 0x55555555; + asm volatile ("mcr p15, 0, %0, c3, c0, 0"::"r"(value)); + + asm volatile ("mcr p15, 0, %0, c2, c0, 0"::"r"(i)); + +} + +void mmu_set_domain(register rt_uint32_t i) +{ + asm volatile ("mcr p15,0, %0, c3, c0, 0": :"r" (i)); +} + +void mmu_enable() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "orr r0, r0, #0x1 \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); +} + +void mmu_disable() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "bic r0, r0, #0x1 \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_enable_icache() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "orr r0, r0, #(1<<12) \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); +} + +void mmu_enable_dcache() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "orr r0, r0, #(1<<2) \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_disable_icache() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "bic r0, r0, #(1<<12) \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_disable_dcache() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "bic r0, r0, #(1<<2) \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_enable_alignfault() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "orr r0, r0, #1 \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_disable_alignfault() +{ + asm volatile + ( + "mrc p15, 0, r0, c1, c0, 0 \n" + "bic r0, r0, #1 \n" + "mcr p15, 0, r0, c1, c0, 0 \n" + :::"r0" + ); + +} + +void mmu_clean_invalidated_cache_index(int index) +{ + asm volatile ("mcr p15, 0, %0, c7, c14, 2": :"r" (index)); +} + +void mmu_clean_invalidated_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while(ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c14, 1": :"r" (ptr)); + + ptr += CACHE_LINE_SIZE; + } +} + + +void mmu_clean_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c10, 1": :"r" (ptr)); + + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c6, 1": :"r" (ptr)); + + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_tlb() +{ + asm volatile ("mcr p15, 0, %0, c8, c7, 0": :"r" (0)); + +} + +void mmu_invalidate_icache() +{ + asm volatile ("mcr p15, 0, %0, c7, c5, 0": :"r" (0)); + +} + +void mmu_invalidate_dcache_all() +{ + asm volatile ("mcr p15, 0, %0, c7, c6, 0": :"r" (0)); + +} +#endif + +/* level1 page table */ +#if defined(__ICCARM__) +#pragma data_alignment=(16*1024) +static volatile rt_uint32_t _page_table[4*1024]; +#else +static volatile rt_uint32_t _page_table[4*1024] \ + __attribute__((aligned(16*1024))); +#endif + +void mmu_setmtt(rt_uint32_t vaddrStart, rt_uint32_t vaddrEnd, + rt_uint32_t paddrStart, rt_uint32_t attr) +{ + volatile rt_uint32_t *pTT; + volatile int nSec; + int i = 0; + pTT=(rt_uint32_t *)_page_table+(vaddrStart>>20); + nSec=(vaddrEnd>>20)-(vaddrStart>>20); + for(i=0; i<=nSec; i++) + { + *pTT = attr |(((paddrStart>>20)+i)<<20); + pTT++; + } +} + +void rt_hw_mmu_init(struct mem_desc *mdesc, rt_uint32_t size) +{ + /* disable I/D cache */ + mmu_disable_dcache(); + mmu_disable_icache(); + mmu_disable(); + mmu_invalidate_tlb(); + + /* set page table */ + for (; size > 0; size--) + { + mmu_setmtt(mdesc->vaddr_start, mdesc->vaddr_end, + mdesc->paddr_start, mdesc->attr); + mdesc++; + } + + /* set MMU table address */ + mmu_setttbase((rt_uint32_t)_page_table); + + /* enables MMU */ + mmu_enable(); + + /* enable Instruction Cache */ + mmu_enable_icache(); + + /* enable Data Cache */ + mmu_enable_dcache(); + + mmu_invalidate_icache(); + mmu_invalidate_dcache_all(); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.h new file mode 100644 index 0000000000..7b930f5358 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/mmu.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#ifndef __MMU_H__ +#define __MMU_H__ + +#include + +#define CACHE_LINE_SIZE 32 + +#define DESC_SEC (0x2|(1<<4)) +#define CB (3<<2) //cache_on, write_back +#define CNB (2<<2) //cache_on, write_through +#define NCB (1<<2) //cache_off,WR_BUF on +#define NCNB (0<<2) //cache_off,WR_BUF off +#define AP_RW (3<<10) //supervisor=RW, user=RW +#define AP_RO (2<<10) //supervisor=RW, user=RO + +#define DOMAIN_FAULT (0x0) +#define DOMAIN_CHK (0x1) +#define DOMAIN_NOTCHK (0x3) +#define DOMAIN0 (0x0<<5) +#define DOMAIN1 (0x1<<5) + +#define DOMAIN0_ATTR (DOMAIN_CHK<<0) +#define DOMAIN1_ATTR (DOMAIN_FAULT<<2) + +#define RW_CB (AP_RW|DOMAIN0|CB|DESC_SEC) /* Read/Write, cache, write back */ +#define RW_CNB (AP_RW|DOMAIN0|CNB|DESC_SEC) /* Read/Write, cache, write through */ +#define RW_NCNB (AP_RW|DOMAIN0|NCNB|DESC_SEC) /* Read/Write without cache and write buffer */ +#define RW_FAULT (AP_RW|DOMAIN1|NCNB|DESC_SEC) /* Read/Write without cache and write buffer */ + +struct mem_desc +{ + rt_uint32_t vaddr_start; + rt_uint32_t vaddr_end; + rt_uint32_t paddr_start; + rt_uint32_t attr; +}; + +void rt_hw_mmu_init(struct mem_desc *mdesc, rt_uint32_t size); + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/stack.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/stack.c new file mode 100644 index 0000000000..fa98feb824 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/stack.c @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety copy from mini2440 + */ +#include + +/*****************************/ +/* CPU Mode */ +/*****************************/ +#define USERMODE 0x10 +#define FIQMODE 0x11 +#define IRQMODE 0x12 +#define SVCMODE 0x13 +#define ABORTMODE 0x17 +#define UNDEFMODE 0x1b +#define MODEMASK 0x1f +#define NOINT 0xc0 + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + rt_uint32_t *stk; + + stack_addr += sizeof(rt_uint32_t); + stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); + stk = (rt_uint32_t *)stack_addr; + + *(--stk) = (rt_uint32_t)tentry; /* entry point */ + *(--stk) = (rt_uint32_t)texit; /* lr */ + *(--stk) = 0xdeadbeef; /* r12 */ + *(--stk) = 0xdeadbeef; /* r11 */ + *(--stk) = 0xdeadbeef; /* r10 */ + *(--stk) = 0xdeadbeef; /* r9 */ + *(--stk) = 0xdeadbeef; /* r8 */ + *(--stk) = 0xdeadbeef; /* r7 */ + *(--stk) = 0xdeadbeef; /* r6 */ + *(--stk) = 0xdeadbeef; /* r5 */ + *(--stk) = 0xdeadbeef; /* r4 */ + *(--stk) = 0xdeadbeef; /* r3 */ + *(--stk) = 0xdeadbeef; /* r2 */ + *(--stk) = 0xdeadbeef; /* r1 */ + *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ + /* cpsr */ + if ((rt_uint32_t)tentry & 0x01) + *(--stk) = SVCMODE | 0x20; /* thumb mode */ + else + *(--stk) = SVCMODE; /* arm mode */ + + /* return task's current stack address */ + return (rt_uint8_t *)stk; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_gcc.S new file mode 100644 index 0000000000..fee8e018cb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_gcc.S @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety first version + * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP + * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table + * 2015-06-04 aozima Align stack address to 8 byte. + */ + +#include "rt_low_level_init.h" + +#define S_FRAME_SIZE (18*4) //72 + +@#define S_SPSR (17*4) //SPSR +@#define S_CPSR (16*4) //CPSR +#define S_PC (15*4) //R15 +@#define S_LR (14*4) //R14 +@#define S_SP (13*4) //R13 + +@#define S_IP (12*4) //R12 +@#define S_FP (11*4) //R11 +@#define S_R10 (10*4) +@#define S_R9 (9*4) +@#define S_R8 (8*4) +@#define S_R7 (7*4) +@#define S_R6 (6*4) +@#define S_R5 (5*4) +@#define S_R4 (4*4) +@#define S_R3 (3*4) +@#define S_R2 (2*4) +@#define S_R1 (1*4) +@#define S_R0 (0*4) + +#define MODE_SYS 0x1F +#define MODE_FIQ 0x11 +#define MODE_IRQ 0x12 +#define MODE_SVC 0x13 +#define MODE_ABT 0x17 +#define MODE_UND 0x1B +#define MODEMASK 0x1F + +#define NOINT 0xC0 + +@;----------------------- Stack and Heap Definitions --------------------------- + .section .nobss, "w" + + .space UND_STK_SIZE + .align 3 + .global UND_STACK_START +UND_STACK_START: + + .space ABT_STK_SIZE + .align 3 + .global ABT_STACK_START +ABT_STACK_START: + + .space FIQ_STK_SIZE + .align 3 + .global FIQ_STACK_START +FIQ_STACK_START: + + .space IRQ_STK_SIZE + .align 3 + .global IRQ_STACK_START +IRQ_STACK_START: + + .skip SYS_STK_SIZE + .align 3 + .global SYS_STACK_START +SYS_STACK_START: + + .space SVC_STK_SIZE + .align 3 + .global SVC_STACK_START +SVC_STACK_START: + +@;--------------Jump vector table----------------------------------------------- + .section .init, "ax" + .arm + + .global start +start: + LDR PC, vector_reset + LDR PC, vector_undef + LDR PC, vector_swi + LDR PC, vector_pabt + LDR PC, vector_dabt + LDR PC, vector_resv + LDR PC, vector_irq + LDR PC, vector_fiq + +vector_reset: + .word Reset_Handler +vector_undef: + .word Undef_Handler +vector_swi: + .word SWI_Handler +vector_pabt: + .word PAbt_Handler +vector_dabt: + .word DAbt_Handler +vector_resv: + .word Resv_Handler +vector_irq: + .word IRQ_Handler +vector_fiq: + .word FIQ_Handler + + .balignl 16,0xdeadbeef + +@;----------------- Reset Handler --------------------------------------------- + .global rt_low_level_init + .global main + .global Reset_Handler +Reset_Handler: + @; Set the cpu to SVC32 mode + MRS R0, CPSR + BIC R0, R0, #MODEMASK + ORR R0, R0, #MODE_SVC|NOINT + MSR CPSR_cxsf, R0 + + @; Set CO-Processor + @; little-end锛宒isbale I/D Cache MMU, vector table is 0x00000000 + MRC P15, 0, R0, C1, C0, 0 @; Read CP15 + LDR R1, =0x00003085 @; set clear bits + BIC R0, R0, R1 + MCR P15, 0, R0, C1, C0, 0 @; Write CP15 + + @; Call low level init function, + @; disable and clear all IRQs, Init MMU, Init interrupt controller, etc. + LDR SP, =SVC_STACK_START + LDR R0, =rt_low_level_init + BLX R0 + +Setup_Stack: + @; Setup Stack for each mode + MRS R0, CPSR + BIC R0, R0, #MODEMASK + + ORR R1, R0, #MODE_UND|NOINT + MSR CPSR_cxsf, R1 @; Undef mode + LDR SP, =UND_STACK_START + + ORR R1, R0, #MODE_ABT|NOINT + MSR CPSR_cxsf, R1 @; Abort mode + LDR SP, =ABT_STACK_START + + ORR R1, R0, #MODE_IRQ|NOINT + MSR CPSR_cxsf, R1 @; IRQ mode + LDR SP, =IRQ_STACK_START + + ORR R1, R0, #MODE_FIQ|NOINT + MSR CPSR_cxsf, R1 @; FIQ mode + LDR SP, =FIQ_STACK_START + + ORR R1, R0, #MODE_SYS|NOINT + MSR CPSR_cxsf,R1 @; SYS/User mode + LDR SP, =SYS_STACK_START + + ORR R1, R0, #MODE_SVC|NOINT + MSR CPSR_cxsf, R1 @; SVC mode + LDR SP, =SVC_STACK_START + + @; clear .bss + MOV R0, #0 @; get a zero + LDR R1, =__bss_start__ @; bss start + LDR R2, =__bss_end__ @; bss end + +bss_clear_loop: + CMP R1, R2 @; check if data to clear + STRLO R0, [R1], #4 @; clear 4 bytes + BLO bss_clear_loop @; loop until done + + @; call C++ constructors of global objects + LDR R0, =__ctors_start__ + LDR R1, =__ctors_end__ + +ctor_loop: + CMP R0, R1 + BEQ ctor_end + LDR R2, [R0], #4 + STMFD SP!, {R0-R1} + MOV LR, PC + BX R2 + LDMFD SP!, {R0-R1} + B ctor_loop +ctor_end: + + @; Enter the C code + LDR R0, =rtthread_startup + BLX R0 + +@;----------------- Exception Handler ----------------------------------------- + .global rt_hw_trap_udef + .global rt_hw_trap_swi + .global rt_hw_trap_pabt + .global rt_hw_trap_dabt + .global rt_hw_trap_resv + .global rt_hw_trap_irq + .global rt_hw_trap_fiq + + .global rt_interrupt_enter + .global rt_interrupt_leave + .global rt_thread_switch_interrupt_flag + .global rt_interrupt_from_thread + .global rt_interrupt_to_thread + + .align 5 +Undef_Handler: + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} @; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} @; Calling SP, LR + STR LR, [R8, #0] @; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] @; Save CPSR + STR R0, [R8, #8] @; Save SPSR + MOV R0, SP + BL rt_hw_trap_udef + + .align 5 +SWI_Handler: + BL rt_hw_trap_swi + + .align 5 +PAbt_Handler: + BL rt_hw_trap_pabt + + .align 5 +DAbt_Handler: + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} @; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} @; Calling SP, LR + STR LR, [R8, #0] @; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] @; Save CPSR + STR R0, [R8, #8] @; Save SPSR + MOV R0, SP + BL rt_hw_trap_dabt + + .align 5 +Resv_Handler: + BL rt_hw_trap_resv + + .align 5 +FIQ_Handler: + STMFD SP!, {R0-R7,LR} + BL rt_hw_trap_fiq + LDMFD SP!, {R0-R7,LR} + SUBS PC, LR, #4 + + .align 5 +IRQ_Handler: + STMFD SP!, {R0-R12,LR} + BL rt_interrupt_enter + BL rt_hw_trap_irq + BL rt_interrupt_leave + + @; If rt_thread_switch_interrupt_flag set, + @; jump to rt_hw_context_switch_interrupt_do and don't return + LDR R0, =rt_thread_switch_interrupt_flag + LDR R1, [R0] + CMP R1, #1 + BEQ rt_hw_context_switch_interrupt_do + + LDMFD SP!, {R0-R12,LR} + SUBS PC, LR, #4 + +@;------ void rt_hw_context_switch_interrupt_do(rt_base_t flag) ----------------- +rt_hw_context_switch_interrupt_do: + MOV R1, #0 @; Clear flag + STR R1, [R0] @; Save to flag variable + + LDMFD SP!, {R0-R12,LR} @; Reload saved registers + STMFD SP, {R0-R2} @; Save R0-R2 + SUB R1, SP, #4*3 @; Save old task's SP to R1 + SUB R2, LR, #4 @; Save old task's PC to R2 + + MRS R0, SPSR @; Get CPSR of interrupt thread + + MSR CPSR_c, #MODE_SVC|NOINT @; Switch to SVC mode and no interrupt + + STMFD SP!, {R2} @; Push old task's PC + STMFD SP!, {R3-R12,LR} @; Push old task's LR,R12-R3 + LDMFD R1, {R1-R3} + STMFD SP!, {R1-R3} @; Push old task's R2-R0 + STMFD SP!, {R0} @; Push old task's CPSR + + LDR R4, =rt_interrupt_from_thread + LDR R5, [R4] @; R5 = stack ptr in old tasks's TCB + STR SP, [R5] @; Store SP in preempted tasks's TCB + + LDR R6, =rt_interrupt_to_thread + LDR R6, [R6] @; R6 = stack ptr in new tasks's TCB + LDR SP, [R6] @; Get new task's stack pointer + + LDMFD SP!, {R4} @; Pop new task's SPSR + MSR SPSR_cxsf, R4 + + LDMFD SP!, {R0-R12,LR,PC}^ @; pop new task's R0-R12,LR & PC SPSR 2 CPSR diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_iar.S new file mode 100644 index 0000000000..080acd57b6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_iar.S @@ -0,0 +1,278 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2011-01-13 weety first version +; * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP +; * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table +; * 2015-06-04 aozima Align stack address to 8 byte. +; */ + +#include "rt_low_level_init.h" + +#define S_FRAME_SIZE (18*4) ;72 + +;#define S_SPSR (17*4) ;SPSR +;#define S_CPSR (16*4) ;CPSR +#define S_PC (15*4) ;R15 +;#define S_LR (14*4) ;R14 +;#define S_SP (13*4) ;R13 + +;#define S_IP (12*4) ;R12 +;#define S_FP (11*4) ;R11 +;#define S_R10 (10*4) +;#define S_R9 (9*4) +;#define S_R8 (8*4) +;#define S_R7 (7*4) +;#define S_R6 (6*4) +;#define S_R5 (5*4) +;#define S_R4 (4*4) +;#define S_R3 (3*4) +;#define S_R2 (2*4) +;#define S_R1 (1*4) +;#define S_R0 (0*4) + +#define MODE_SYS 0x1F +#define MODE_FIQ 0x11 +#define MODE_IRQ 0x12 +#define MODE_SVC 0x13 +#define MODE_ABT 0x17 +#define MODE_UND 0x1B +#define MODEMASK 0x1F + +#define NOINT 0xC0 + +;----------------------- Stack and Heap Definitions ---------------------------- + MODULE ?cstartup + SECTION .noinit:DATA:NOROOT(3) + DATA + + ALIGNRAM 3 + DS8 UND_STK_SIZE + PUBLIC UND_STACK_START +UND_STACK_START: + + ALIGNRAM 3 + DS8 ABT_STK_SIZE + PUBLIC ABT_STACK_START +ABT_STACK_START: + + ALIGNRAM 3 + DS8 FIQ_STK_SIZE + PUBLIC FIQ_STACK_START +FIQ_STACK_START: + + ALIGNRAM 3 + DS8 IRQ_STK_SIZE + PUBLIC IRQ_STACK_START +IRQ_STACK_START: + + ALIGNRAM 3 + DS8 SYS_STK_SIZE + PUBLIC SYS_STACK_START +SYS_STACK_START: + + ALIGNRAM 3 + DS8 SVC_STK_SIZE + PUBLIC SVC_STACK_START +SVC_STACK_START: + +;--------------Jump vector table------------------------------------------------ + SECTION .intvec:CODE:ROOT(2) + ARM + PUBLIC Entry_Point +Entry_Point: +__iar_init$$done: ; The interrupt vector is not needed + ; until after copy initialization is done + LDR PC, vector_reset + LDR PC, vector_undef + LDR PC, vector_swi + LDR PC, vector_pabt + LDR PC, vector_dabt + LDR PC, vector_resv + LDR PC, vector_irq + LDR PC, vector_fiq + +vector_reset: + DC32 Reset_Handler +vector_undef: + DC32 Undef_Handler +vector_swi: + DC32 SWI_Handler +vector_pabt: + DC32 PAbt_Handler +vector_dabt: + DC32 DAbt_Handler +vector_resv: + DC32 Resv_Handler +vector_irq: + DC32 IRQ_Handler +vector_fiq: + DC32 FIQ_Handler + +;----------------- Reset Handler ----------------------------------------------- + EXTERN rt_low_level_init + EXTERN ?main + PUBLIC __iar_program_start +__iar_program_start: +Reset_Handler: + ; Set the cpu to SVC32 mode + MRS R0, CPSR + BIC R0, R0, #MODEMASK + ORR R0, R0, #MODE_SVC|NOINT + MSR CPSR_cxsf, R0 + + ; Set CO-Processor + ; little-end,disbale I/D Cache MMU, vector table is 0x00000000 + MRC P15, 0, R0, C1, C0, 0 ; Read CP15 + LDR R1, =0x00003085 ; set clear bits + BIC R0, R0, R1 + MCR P15, 0, R0, C1, C0, 0 ; Write CP15 + + ; Call low level init function, + ; disable and clear all IRQs, Init MMU, Init interrupt controller, etc. + LDR SP, =SVC_STACK_START + LDR R0, =rt_low_level_init + BLX R0 + +Setup_Stack: + ; Setup Stack for each mode + MRS R0, CPSR + BIC R0, R0, #MODEMASK + + ORR R1, R0, #MODE_UND|NOINT + MSR CPSR_cxsf, R1 ; Undef mode + LDR SP, =UND_STACK_START + + ORR R1,R0,#MODE_ABT|NOINT + MSR CPSR_cxsf,R1 ; Abort mode + LDR SP, =ABT_STACK_START + + ORR R1,R0,#MODE_IRQ|NOINT + MSR CPSR_cxsf,R1 ; IRQ mode + LDR SP, =IRQ_STACK_START + + ORR R1,R0,#MODE_FIQ|NOINT + MSR CPSR_cxsf,R1 ; FIQ mode + LDR SP, =FIQ_STACK_START + + ORR R1,R0,#MODE_SYS|NOINT + MSR CPSR_cxsf,R1 ; SYS/User mode + LDR SP, =SYS_STACK_START + + ORR R1,R0,#MODE_SVC|NOINT + MSR CPSR_cxsf,R1 ; SVC mode + LDR SP, =SVC_STACK_START + + ; Enter the C code + LDR R0, =?main + BLX R0 + +;----------------- Exception Handler ------------------------------------------- + IMPORT rt_hw_trap_udef + IMPORT rt_hw_trap_swi + IMPORT rt_hw_trap_pabt + IMPORT rt_hw_trap_dabt + IMPORT rt_hw_trap_resv + IMPORT rt_hw_trap_irq + IMPORT rt_hw_trap_fiq + + IMPORT rt_interrupt_enter + IMPORT rt_interrupt_leave + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + + SECTION .text:CODE:ROOT(2) + ARM +Undef_Handler: + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} ; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} ; Calling SP, LR + STR LR, [R8, #0] ; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] ; Save CPSR + STR R0, [R8, #8] ; Save SPSR + MOV R0, SP + BL rt_hw_trap_udef + +SWI_Handler: + BL rt_hw_trap_swi + +PAbt_Handler: + BL rt_hw_trap_pabt + +DAbt_Handler: + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} ; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} ; Calling SP, LR + STR LR, [R8, #0] ; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] ; Save CPSR + STR R0, [R8, #8] ; Save SPSR + MOV R0, SP + BL rt_hw_trap_dabt + +Resv_Handler: + BL rt_hw_trap_resv + +IRQ_Handler: + STMFD SP!, {R0-R12,LR} + BL rt_interrupt_enter + BL rt_hw_trap_irq + BL rt_interrupt_leave + + ; If rt_thread_switch_interrupt_flag set, + ; jump to rt_hw_context_switch_interrupt_do and don't return + LDR R0, =rt_thread_switch_interrupt_flag + LDR R1, [R0] + CMP R1, #1 + BEQ rt_hw_context_switch_interrupt_do + + LDMFD SP!, {R0-R12,LR} + SUBS PC, LR, #4 + +FIQ_Handler: + STMFD SP!, {R0-R7,LR} + BL rt_hw_trap_fiq + LDMFD SP!, {R0-R7,LR} + SUBS PC, LR, #4 + +;------ void rt_hw_context_switch_interrupt_do(rt_base_t flag) ----------------- +rt_hw_context_switch_interrupt_do: + MOV R1, #0 ; Clear flag + STR R1, [R0] ; Save to flag variable + + LDMFD SP!, {R0-R12,LR} ; Reload saved registers + STMFD SP, {R0-R2} ; Save R0-R2 + SUB R1, SP, #4*3 ; Save old task's SP to R1 + SUB R2, LR, #4 ; Save old task's PC to R2 + + MRS R0, SPSR ; Get CPSR of interrupt thread + + MSR CPSR_c, #MODE_SVC|NOINT ; Switch to SVC mode and no interrupt + + STMFD SP!, {R2} ; Push old task's PC + STMFD SP!, {R3-R12,LR} ; Push old task's LR,R12-R3 + LDMFD R1, {R1-R3} + STMFD SP!, {R1-R3} ; Push old task's R2-R0 + STMFD SP!, {R0} ; Push old task's CPSR + + LDR R4, =rt_interrupt_from_thread + LDR R5, [R4] ; R5 = stack ptr in old tasks's TCB + STR SP, [R5] ; Store SP in preempted tasks's TCB + + LDR R6, =rt_interrupt_to_thread + LDR R6, [R6] ; R6 = stack ptr in new tasks's TCB + LDR SP, [R6] ; Get new task's stack pointer + + LDMFD SP!, {R4} ; Pop new task's SPSR + MSR SPSR_cxsf, R4 + + LDMFD SP!, {R0-R12,LR,PC}^ ; pop new task's R0-R12,LR & PC SPSR to CPSR + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_rvds.S new file mode 100644 index 0000000000..fc7e84ffaa --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/start_rvds.S @@ -0,0 +1,301 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2011-08-14 weety first version +; * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP +; * 2015-04-21 ArdaFu Remove remap code. Using mmu to map vector table +; * 2015-06-04 aozima Align stack address to 8 byte. +; */ + +UND_STK_SIZE EQU 512 +SVC_STK_SIZE EQU 4096 +ABT_STK_SIZE EQU 512 +IRQ_STK_SIZE EQU 1024 +FIQ_STK_SIZE EQU 1024 +SYS_STK_SIZE EQU 512 +Heap_Size EQU 512 + +S_FRAME_SIZE EQU (18*4) ;72 +S_PC EQU (15*4) ;R15 + +MODE_USR EQU 0X10 +MODE_FIQ EQU 0X11 +MODE_IRQ EQU 0X12 +MODE_SVC EQU 0X13 +MODE_ABT EQU 0X17 +MODE_UND EQU 0X1B +MODE_SYS EQU 0X1F +MODEMASK EQU 0X1F + +NOINT EQU 0xC0 + +;----------------------- Stack and Heap Definitions ---------------------------- + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem + + SPACE UND_STK_SIZE + EXPORT UND_STACK_START +UND_STACK_START + + ALIGN 8 + SPACE ABT_STK_SIZE + EXPORT ABT_STACK_START +ABT_STACK_START + + ALIGN 8 + SPACE FIQ_STK_SIZE + EXPORT FIQ_STACK_START +FIQ_STACK_START + + ALIGN 8 + SPACE IRQ_STK_SIZE + EXPORT IRQ_STACK_START +IRQ_STACK_START + + ALIGN 8 + SPACE SYS_STK_SIZE + EXPORT SYS_STACK_START +SYS_STACK_START + + ALIGN 8 + SPACE SVC_STK_SIZE + EXPORT SVC_STACK_START +SVC_STACK_START +Stack_Top +__initial_sp + +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + PRESERVE8 +;--------------Jump vector table------------------------------------------------ + EXPORT Entry_Point + AREA RESET, CODE, READONLY + ARM +Entry_Point + LDR PC, vector_reset + LDR PC, vector_undef + LDR PC, vector_swi + LDR PC, vector_pabt + LDR PC, vector_dabt + LDR PC, vector_resv + LDR PC, vector_irq + LDR PC, vector_fiq + +vector_reset + DCD Reset_Handler +vector_undef + DCD Undef_Handler +vector_swi + DCD SWI_Handler +vector_pabt + DCD PAbt_Handler +vector_dabt + DCD DAbt_Handler +vector_resv + DCD Resv_Handler +vector_irq + DCD IRQ_Handler +vector_fiq + DCD FIQ_Handler + +;----------------- Reset Handler ----------------------------------------------- + IMPORT rt_low_level_init + IMPORT __main + EXPORT Reset_Handler +Reset_Handler + ; set the cpu to SVC32 mode + MRS R0,CPSR + BIC R0,R0,#MODEMASK + ORR R0,R0,#MODE_SVC:OR:NOINT + MSR CPSR_cxsf,R0 + + ; Set CO-Processor + ; little-end,disbale I/D Cache MMU, vector table is 0x00000000 + MRC p15, 0, R0, c1, c0, 0 ; Read CP15 + LDR R1, =0x00003085 ; set clear bits + BIC R0, R0, R1 + MCR p15, 0, R0, c1, c0, 0 ; Write CP15 + + ; Call low level init function, + ; disable and clear all IRQs, Init MMU, Init interrupt controller, etc. + LDR SP, =SVC_STACK_START + LDR R0, =rt_low_level_init + BLX R0 + +Setup_Stack + ; Setup Stack for each mode + MRS R0, CPSR + BIC R0, R0, #MODEMASK + + ORR R1, R0, #MODE_UND:OR:NOINT + MSR CPSR_cxsf, R1 ; Undef mode + LDR SP, =UND_STACK_START + + ORR R1,R0,#MODE_ABT:OR:NOINT + MSR CPSR_cxsf,R1 ; Abort mode + LDR SP, =ABT_STACK_START + + ORR R1,R0,#MODE_IRQ:OR:NOINT + MSR CPSR_cxsf,R1 ; IRQ mode + LDR SP, =IRQ_STACK_START + + ORR R1,R0,#MODE_FIQ:OR:NOINT + MSR CPSR_cxsf,R1 ; FIQ mode + LDR SP, =FIQ_STACK_START + + ORR R1,R0,#MODE_SYS:OR:NOINT + MSR CPSR_cxsf,R1 ; SYS/User mode + LDR SP, =SYS_STACK_START + + ORR R1,R0,#MODE_SVC:OR:NOINT + MSR CPSR_cxsf,R1 ; SVC mode + LDR SP, =SVC_STACK_START + + ; Enter the C code + LDR R0, =__main + BLX R0 + +;----------------- Exception Handler ------------------------------------------- + IMPORT rt_hw_trap_udef + IMPORT rt_hw_trap_swi + IMPORT rt_hw_trap_pabt + IMPORT rt_hw_trap_dabt + IMPORT rt_hw_trap_resv + IMPORT rt_hw_trap_irq + IMPORT rt_hw_trap_fiq + + IMPORT rt_interrupt_enter + IMPORT rt_interrupt_leave + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +Undef_Handler PROC + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} ; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} ; Calling SP, LR + STR LR, [R8, #0] ; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] ; Save CPSR + STR R0, [R8, #8] ; Save SPSR + MOV R0, SP + BL rt_hw_trap_udef + ENDP + +SWI_Handler PROC + BL rt_hw_trap_swi + ENDP + +PAbt_Handler PROC + BL rt_hw_trap_pabt + ENDP + +DAbt_Handler PROC + SUB SP, SP, #S_FRAME_SIZE + STMIA SP, {R0 - R12} ; Calling R0-R12 + ADD R8, SP, #S_PC + STMDB R8, {SP, LR} ; Calling SP, LR + STR LR, [R8, #0] ; Save calling PC + MRS R6, SPSR + STR R6, [R8, #4] ; Save CPSR + STR R0, [R8, #8] ; Save SPSR + MOV R0, SP + BL rt_hw_trap_dabt + ENDP + +Resv_Handler PROC + BL rt_hw_trap_resv + ENDP + +FIQ_Handler PROC + STMFD SP!, {R0-R7,LR} + BL rt_hw_trap_fiq + LDMFD SP!, {R0-R7,LR} + SUBS PC, LR, #4 + ENDP + +IRQ_Handler PROC + STMFD SP!, {R0-R12,LR} + BL rt_interrupt_enter + BL rt_hw_trap_irq + BL rt_interrupt_leave + + ; If rt_thread_switch_interrupt_flag set, + ; jump to rt_hw_context_switch_interrupt_do and don't return + LDR R0, =rt_thread_switch_interrupt_flag + LDR R1, [R0] + CMP R1, #1 + BEQ rt_hw_context_switch_interrupt_do + + LDMFD SP!, {R0-R12,LR} + SUBS PC, LR, #4 + ENDP + +;------ void rt_hw_context_switch_interrupt_do(rt_base_t flag) ----------------- +rt_hw_context_switch_interrupt_do PROC + MOV R1, #0 ; Clear flag + STR R1, [R0] ; Save to flag variable + + LDMFD SP!, {R0-R12,LR} ; Reload saved registers + STMFD SP, {R0-R2} ; Save R0-R2 + SUB R1, SP, #4*3 ; Save old task's SP to R1 + SUB R2, LR, #4 ; Save old task's PC to R2 + + MRS R0, SPSR ; Get CPSR of interrupt thread + + MSR CPSR_c, #MODE_SVC:OR:NOINT ; Switch to SVC mode and no interrupt + + STMFD SP!, {R2} ; Push old task's PC + STMFD SP!, {R3-R12,LR} ; Push old task's LR,R12-R3 + LDMFD R1, {R1-R3} + STMFD SP!, {R1-R3} ; Push old task's R2-R0 + STMFD SP!, {R0} ; Push old task's CPSR + + LDR R4, =rt_interrupt_from_thread + LDR R5, [R4] ; R5 = stack ptr in old tasks's TCB + STR SP, [R5] ; Store SP in preempted tasks's TCB + + LDR R6, =rt_interrupt_to_thread + LDR R6, [R6] ; R6 = stack ptr in new tasks's TCB + LDR SP, [R6] ; Get new task's stack pointer + + LDMFD SP!, {R4} ; Pop new task's SPSR + MSR SPSR_cxsf, R4 + + LDMFD SP!, {R0-R12,LR,PC}^ ; pop new task's R0-R12,LR & PC SPSR to CPSR + ENDP + +;******************************************************************************* +; User Stack and Heap initialization +;******************************************************************************* + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap + + LDR R0, = Heap_Mem ; heap base + LDR R1, = SVC_STACK_START ; stack base (top-address) + LDR R2, = (Heap_Mem + Heap_Size) ; heap limit + LDR R3, = (SVC_STACK_START - SVC_STK_SIZE) ; stack limit (low-address) + BX LR + + ALIGN + + ENDIF + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/trap.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/trap.c new file mode 100644 index 0000000000..054cc2741a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/arm926/trap.c @@ -0,0 +1,207 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety modified from mini2440 + * 2015-04-15 ArdaFu Split from AT91SAM9260 BSP + */ + +#include +#include + +#define INT_IRQ 0x00 +#define INT_FIQ 0x01 + +extern struct rt_thread *rt_current_thread; +#ifdef RT_USING_FINSH +extern long list_thread(void); +#endif + +struct rt_hw_register +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t fp; + rt_uint32_t ip; + rt_uint32_t sp; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t cpsr; + rt_uint32_t ORIG_r0; +}; + +/** + * this function will show registers of CPU + * + * @param regs the registers point + */ + +void rt_hw_show_register (struct rt_hw_register *regs) +{ + rt_kprintf("Execption:\n"); + rt_kprintf("r00:0x%08x r01:0x%08x r02:0x%08x r03:0x%08x\n", + regs->r0, regs->r1, regs->r2, regs->r3); + rt_kprintf("r04:0x%08x r05:0x%08x r06:0x%08x r07:0x%08x\n", + regs->r4, regs->r5, regs->r6, regs->r7); + rt_kprintf("r08:0x%08x r09:0x%08x r10:0x%08x\n", + regs->r8, regs->r9, regs->r10); + rt_kprintf("fp :0x%08x ip :0x%08x\n", + regs->fp, regs->ip); + rt_kprintf("sp :0x%08x lr :0x%08x pc :0x%08x\n", + regs->sp, regs->lr, regs->pc); + rt_kprintf("cpsr:0x%08x\n", regs->cpsr); +} + +/** + * When ARM7TDMI comes across an instruction which it cannot handle, + * it takes the undefined instruction trap. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_udef(struct rt_hw_register *regs) +{ + rt_hw_show_register(regs); + + rt_kprintf("undefined instruction\n"); + rt_kprintf("thread - %s stack:\n", rt_current_thread->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * The software interrupt instruction (SWI) is used for entering + * Supervisor mode, usually to request a particular supervisor + * function. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_swi(struct rt_hw_register *regs) +{ + rt_hw_show_register(regs); + + rt_kprintf("software interrupt\n"); + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during an instruction prefetch. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_pabt(struct rt_hw_register *regs) +{ + rt_hw_show_register(regs); + + rt_kprintf("prefetch abort\n"); + rt_kprintf("thread - %s stack:\n", RT_NAME_MAX, rt_current_thread->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during a data access. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_dabt(struct rt_hw_register *regs) +{ + rt_hw_show_register(regs); + + rt_kprintf("data abort\n"); + rt_kprintf("thread - %s stack:\n", RT_NAME_MAX, rt_current_thread->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * Normally, system will never reach here + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_resv(struct rt_hw_register *regs) +{ + rt_kprintf("not used\n"); + rt_hw_show_register(regs); + rt_hw_cpu_shutdown(); +} + +extern struct rt_irq_desc irq_desc[]; +extern rt_uint32_t rt_hw_interrupt_get_active(rt_uint32_t fiq_irq); +extern void rt_hw_interrupt_ack(rt_uint32_t fiq_irq, rt_uint32_t id); + +void rt_hw_trap_irq() +{ + rt_isr_handler_t isr_func; + rt_uint32_t irq; + void *param; + + /* get irq number */ + irq = rt_hw_interrupt_get_active(INT_IRQ); + + /* get interrupt service routine */ + isr_func = irq_desc[irq].handler; + param = irq_desc[irq].param; + + /* turn to interrupt service routine */ + isr_func(irq, param); + + rt_hw_interrupt_ack(INT_IRQ, irq); +#ifdef RT_USING_INTERRUPT_INFO + irq_desc[irq].counter ++; +#endif +} + +void rt_hw_trap_fiq() +{ + rt_isr_handler_t isr_func; + rt_uint32_t irq; + void *param; + + /* get irq number */ + irq = rt_hw_interrupt_get_active(INT_FIQ); + + /* get interrupt service routine */ + isr_func = irq_desc[irq].handler; + param = irq_desc[irq].param; + + /* turn to interrupt service routine */ + isr_func(irq, param); + + rt_hw_interrupt_ack(INT_FIQ, irq); +#ifdef RT_USING_INTERRUPT_INFO + irq_desc[irq].counter ++; +#endif +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/arm_entry_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/arm_entry_gcc.S new file mode 100644 index 0000000000..6d4ac111d0 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/arm_entry_gcc.S @@ -0,0 +1,126 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2014-11-07 weety first version + */ + +#include + +#include "armv6.h" + +//#define DEBUG + +.macro PRINT, str +#ifdef DEBUG + stmfd sp!, {r0-r3, ip, lr} + add r0, pc, #4 + bl rt_kprintf + b 1f + .asciz "UNDEF: \str\n" + .balign 4 +1: ldmfd sp!, {r0-r3, ip, lr} +#endif + .endm + +.macro PRINT1, str, arg +#ifdef DEBUG + stmfd sp!, {r0-r3, ip, lr} + mov r1, \arg + add r0, pc, #4 + bl rt_kprintf + b 1f + .asciz "UNDEF: \str\n" + .balign 4 +1: ldmfd sp!, {r0-r3, ip, lr} +#endif + .endm + +.macro PRINT3, str, arg1, arg2, arg3 +#ifdef DEBUG + stmfd sp!, {r0-r3, ip, lr} + mov r3, \arg3 + mov r2, \arg2 + mov r1, \arg1 + add r0, pc, #4 + bl rt_kprintf + b 1f + .asciz "UNDEF: \str\n" + .balign 4 +1: ldmfd sp!, {r0-r3, ip, lr} +#endif + .endm + +.macro get_current_thread, rd + ldr \rd, .current_thread + ldr \rd, [\rd] + .endm + +.current_thread: + .word rt_current_thread + +#ifdef RT_USING_NEON + .align 6 + +/* is the neon instuction on arm mode? */ +.neon_opcode: + .word 0xfe000000 @ mask + .word 0xf2000000 @ opcode + + .word 0xff100000 @ mask + .word 0xf4000000 @ opcode + + .word 0x00000000 @ end mask + .word 0x00000000 @ end opcode +#endif + +/* undefined instruction exception processing */ +.globl undef_entry +undef_entry: + PRINT1 "r0=0x%08x", r0 + PRINT1 "r2=0x%08x", r2 + PRINT1 "r9=0x%08x", r9 + PRINT1 "sp=0x%08x", sp + +#ifdef RT_USING_NEON + ldr r6, .neon_opcode +__check_neon_instruction: + ldr r7, [r6], #4 @ load mask value + cmp r7, #0 @ end mask? + beq __check_vfp_instruction + and r8, r0, r7 + ldr r7, [r6], #4 @ load opcode value + cmp r8, r7 @ is NEON instruction? + bne __check_neon_instruction + b vfp_entry +__check_vfp_instruction: +#endif + tst r0, #0x08000000 @ only CDP/CPRT/LDC/STC instruction has bit 27 + tstne r0, #0x04000000 @ bit 26 set on both ARM and Thumb-2 instruction + moveq pc, lr @ no vfp coprocessor instruction, return + get_current_thread r10 + and r8, r0, #0x00000f00 @ get coprocessor number + PRINT1 "CP=0x%08x", r8 + add pc, pc, r8, lsr #6 + nop + mov pc, lr @ CP0 + mov pc, lr @ CP1 + mov pc, lr @ CP2 + mov pc, lr @ CP3 + mov pc, lr @ CP4 + mov pc, lr @ CP5 + mov pc, lr @ CP6 + mov pc, lr @ CP7 + mov pc, lr @ CP8 + mov pc, lr @ CP9 + mov pc, lr @ CP10 VFP + mov pc, lr @ CP11 VFP + mov pc, lr @ CP12 + mov pc, lr @ CP13 + mov pc, lr @ CP14 DEBUG + mov pc, lr @ CP15 SYS CONTROL + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/armv6.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/armv6.h new file mode 100644 index 0000000000..659ce90721 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/armv6.h @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#ifndef __ARMV6_H__ +#define __ARMV6_H__ + + +/*****************************/ +/* CPU Mode */ +/*****************************/ +#define USERMODE 0x10 +#define FIQMODE 0x11 +#define IRQMODE 0x12 +#define SVCMODE 0x13 +#define ABORTMODE 0x17 +#define UNDEFMODE 0x1b +#define MODEMASK 0x1f +#define NOINT 0xc0 + +#ifndef __ASSEMBLY__ +struct rt_hw_register +{ + rt_uint32_t cpsr; + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t fp; + rt_uint32_t ip; + rt_uint32_t sp; + rt_uint32_t lr; + rt_uint32_t pc; +}; +#if(0) +struct rt_hw_register{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t fp; + rt_uint32_t ip; + rt_uint32_t sp; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t cpsr; + rt_uint32_t ORIG_r0; +}; +#endif +#endif + +/* rt_hw_register offset */ +#define S_FRAME_SIZE 68 + +#define S_PC 64 +#define S_LR 60 +#define S_SP 56 +#define S_IP 52 +#define S_FP 48 +#define S_R10 44 +#define S_R9 40 +#define S_R8 36 +#define S_R7 32 +#define S_R6 28 +#define S_R5 24 +#define S_R4 20 +#define S_R3 16 +#define S_R2 12 +#define S_R1 8 +#define S_R0 4 +#define S_CPSR 0 + + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/context_gcc.S new file mode 100644 index 0000000000..0446109c92 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/context_gcc.S @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety copy from mini2440 + */ + +/*! + * \addtogroup ARMv6 + */ +/*@{*/ + +#include + +#define NOINT 0xc0 +#define FPEXC_EN (1 << 30) /* VFP enable bit */ + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ +.globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + mrs r0, cpsr + cpsid if + bx lr + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ +.globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + msr cpsr_c, r0 + bx lr + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * r0 --> from + * r1 --> to + */ +.globl rt_hw_context_switch +rt_hw_context_switch: + stmfd sp!, {lr} @ push pc (lr should be pushed in place of PC) + stmfd sp!, {r0-r12, lr} @ push lr & register file + + mrs r4, cpsr + tst lr, #0x01 + orrne r4, r4, #0x20 @ it's thumb code + + stmfd sp!, {r4} @ push cpsr + + str sp, [r0] @ store sp in preempted tasks TCB + ldr sp, [r1] @ get new task stack pointer + + ldmfd sp!, {r4} @ pop new task cpsr to spsr + msr spsr_cxsf, r4 +_do_switch: + ldmfd sp!, {r0-r12, lr, pc}^ @ pop new task r0-r12, lr & pc, copy spsr to cpsr + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ +.globl rt_hw_context_switch_to +rt_hw_context_switch_to: + ldr sp, [r0] @ get new task stack pointer + + ldmfd sp!, {r4} @ pop new task spsr + msr spsr_cxsf, r4 + + bic r4, r4, #0x20 @ must be ARM mode + msr cpsr_cxsf, r4 + ldmfd sp!, {r0-r12, lr, pc}^ @ pop new task r0-r12, lr & pc + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); + */ +.globl rt_thread_switch_interrupt_flag +.globl rt_interrupt_from_thread +.globl rt_interrupt_to_thread +.globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + ldr r2, =rt_thread_switch_interrupt_flag + ldr r3, [r2] + cmp r3, #1 + beq _reswitch + mov r3, #1 @ set rt_thread_switch_interrupt_flag to 1 + str r3, [r2] + ldr r2, =rt_interrupt_from_thread @ set rt_interrupt_from_thread + str r0, [r2] +_reswitch: + ldr r2, =rt_interrupt_to_thread @ set rt_interrupt_to_thread + str r1, [r2] + bx lr diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/cpuport.c new file mode 100644 index 0000000000..c8e9201722 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/cpuport.c @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety modified from mini2440 + */ + +#include +#include + +#define ICACHE_MASK (rt_uint32_t)(1 << 12) +#define DCACHE_MASK (rt_uint32_t)(1 << 2) + +extern void machine_reset(void); +extern void machine_shutdown(void); + +#ifdef __GNUC__ +rt_inline rt_uint32_t cp15_rd(void) +{ + rt_uint32_t i; + + asm ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + return i; +} + +rt_inline void cache_enable(rt_uint32_t bit) +{ + __asm__ __volatile__( \ + "mrc p15,0,r0,c1,c0,0\n\t" \ + "orr r0,r0,%0\n\t" \ + "mcr p15,0,r0,c1,c0,0" \ + : \ + :"r" (bit) \ + :"memory"); +} + +rt_inline void cache_disable(rt_uint32_t bit) +{ + __asm__ __volatile__( \ + "mrc p15,0,r0,c1,c0,0\n\t" \ + "bic r0,r0,%0\n\t" \ + "mcr p15,0,r0,c1,c0,0" \ + : \ + :"r" (bit) \ + :"memory"); +} + + +#endif + +#ifdef __CC_ARM +rt_inline rt_uint32_t cp15_rd(void) +{ + rt_uint32_t i; + + __asm + { + mrc p15, 0, i, c1, c0, 0 + } + + return i; +} + +rt_inline void cache_enable(rt_uint32_t bit) +{ + rt_uint32_t value; + + __asm + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, bit + mcr p15, 0, value, c1, c0, 0 + } +} + +rt_inline void cache_disable(rt_uint32_t bit) +{ + rt_uint32_t value; + + __asm + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, bit + mcr p15, 0, value, c1, c0, 0 + } +} +#endif + +/** + * enable I-Cache + * + */ +void rt_hw_cpu_icache_enable() +{ + cache_enable(ICACHE_MASK); +} + +/** + * disable I-Cache + * + */ +void rt_hw_cpu_icache_disable() +{ + cache_disable(ICACHE_MASK); +} + +/** + * return the status of I-Cache + * + */ +rt_base_t rt_hw_cpu_icache_status() +{ + return (cp15_rd() & ICACHE_MASK); +} + +/** + * enable D-Cache + * + */ +void rt_hw_cpu_dcache_enable() +{ + cache_enable(DCACHE_MASK); +} + +/** + * disable D-Cache + * + */ +void rt_hw_cpu_dcache_disable() +{ + cache_disable(DCACHE_MASK); +} + +/** + * return the status of D-Cache + * + */ +rt_base_t rt_hw_cpu_dcache_status() +{ + return (cp15_rd() & DCACHE_MASK); +} + +/** + * reset cpu by dog's time-out + * + */ +void rt_hw_cpu_reset() +{ + + rt_kprintf("Restarting system...\n"); + machine_reset(); + + while(1); /* loop forever and wait for reset to happen */ + + /* NEVER REACHED */ +} + +/** + * shutdown CPU + * + */ +void rt_hw_cpu_shutdown() +{ + rt_uint32_t level; + rt_kprintf("shutdown...\n"); + + level = rt_hw_interrupt_disable(); + machine_shutdown(); + while (level) + { + RT_ASSERT(0); + } +} + +#ifdef RT_USING_CPU_FFS +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +#if defined(__CC_ARM) +int __rt_ffs(int value) +{ + register rt_uint32_t x; + + if (value == 0) + return value; + + __asm + { + rsb x, value, #0 + and x, x, value + clz x, x + rsb x, x, #32 + } + + return x; +} +#elif defined(__IAR_SYSTEMS_ICC__) +int __rt_ffs(int value) +{ + if (value == 0) + return value; + + __ASM("RSB r4, r0, #0"); + __ASM("AND r4, r4, r0"); + __ASM("CLZ r4, r4"); + __ASM("RSB r0, r4, #32"); +} +#elif defined(__GNUC__) +int __rt_ffs(int value) +{ + if (value == 0) + return value; + + value &= (-value); + asm ("clz %0, %1": "=r"(value) :"r"(value)); + + return (32 - value); +} +#endif + +#endif + + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.c new file mode 100644 index 0000000000..ae3cf73559 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.c @@ -0,0 +1,548 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#include "mmu.h" + +#ifdef __CC_ARM +void mmu_setttbase(rt_uint32_t i) +{ + register rt_uint32_t value; + + /* Invalidates all TLBs.Domain access is selected as + * client by configuring domain access register, + * in that case access controlled by permission value + * set by page table entry + */ + value = 0; + __asm volatile + { + mcr p15, 0, value, c8, c7, 0 + } + + value = 0x55555555; + __asm volatile + { + mcr p15, 0, value, c3, c0, 0 + mcr p15, 0, i, c2, c0, 0 + } +} + +void mmu_set_domain(rt_uint32_t i) +{ + __asm volatile + { + mcr p15,0, i, c3, c0, 0 + } +} + +void mmu_enable() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x01 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x01 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_icache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x1000 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_dcache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x04 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_icache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x1000 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_dcache() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x04 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_enable_alignfault() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + orr value, value, #0x02 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_disable_alignfault() +{ + register rt_uint32_t value; + + __asm volatile + { + mrc p15, 0, value, c1, c0, 0 + bic value, value, #0x02 + mcr p15, 0, value, c1, c0, 0 + } +} + +void mmu_clean_invalidated_cache_index(int index) +{ + __asm volatile + { + mcr p15, 0, index, c7, c14, 2 + } +} + +void mmu_clean_invalidated_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while(ptr < buffer + size) + { + __asm volatile + { + MCR p15, 0, ptr, c7, c14, 1 + } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_clean_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + __asm volatile + { + MCR p15, 0, ptr, c7, c10, 1 + } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + __asm volatile + { + MCR p15, 0, ptr, c7, c6, 1 + } + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_tlb() +{ + register rt_uint32_t value; + + value = 0; + __asm volatile + { + mcr p15, 0, value, c8, c7, 0 + } +} + +void mmu_invalidate_icache() +{ + register rt_uint32_t value; + + value = 0; + + __asm volatile + { + mcr p15, 0, value, c7, c5, 0 + } +} + + +void mmu_invalidate_dcache_all() +{ + register rt_uint32_t value; + + value = 0; + + __asm volatile + { + mcr p15, 0, value, c7, c6, 0 + } +} +#elif defined(__GNUC__) +void mmu_setttbase(register rt_uint32_t i) +{ + register rt_uint32_t value; + + /* Invalidates all TLBs.Domain access is selected as + * client by configuring domain access register, + * in that case access controlled by permission value + * set by page table entry + */ + value = 0; + asm volatile ("mcr p15, 0, %0, c8, c7, 0"::"r"(value)); + + value = 0x55555555; + asm volatile ("mcr p15, 0, %0, c3, c0, 0"::"r"(value)); + asm volatile ("mcr p15, 0, %0, c2, c0, 0"::"r"(i)); +} + +void mmu_set_domain(register rt_uint32_t i) +{ + asm volatile ("mcr p15,0, %0, c3, c0, 0": :"r" (i)); +} + +void mmu_enable() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i |= 0x1; + /* Enables the extended page tables to be configured for + the hardware page translation mechanism, Subpage AP bits disabled */ + i |= (1 << 23); /* support for ARMv6 MMU features */ + i |= (1 << 13); /* High exception vectors selected, address range = 0xFFFF0000-0xFFFF001C */ + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_disable() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i &= ~0x1; + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_enable_icache() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i |= (1 << 12); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_enable_dcache() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i |= (1 << 2); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_disable_icache() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i &= ~(1 << 12); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_disable_dcache() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i &= ~(1 << 2); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_enable_alignfault() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i |= (1 << 1); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_disable_alignfault() +{ + register rt_uint32_t i; + + /* read control register */ + asm volatile ("mrc p15, 0, %0, c1, c0, 0":"=r" (i)); + + i &= ~(1 << 1); + + /* write back to control register */ + asm volatile ("mcr p15, 0, %0, c1, c0, 0": :"r" (i)); +} + +void mmu_clean_invalidated_cache_index(int index) +{ + asm volatile ("mcr p15, 0, %0, c7, c14, 2": :"r" (index)); +} + +void mmu_clean_invalidated_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while(ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c14, 1": :"r" (ptr)); + ptr += CACHE_LINE_SIZE; + } +} + + +void mmu_clean_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c10, 1": :"r" (ptr)); + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_dcache(rt_uint32_t buffer, rt_uint32_t size) +{ + unsigned int ptr; + + ptr = buffer & ~(CACHE_LINE_SIZE - 1); + + while (ptr < buffer + size) + { + asm volatile ("mcr p15, 0, %0, c7, c6, 1": :"r" (ptr)); + ptr += CACHE_LINE_SIZE; + } +} + +void mmu_invalidate_tlb() +{ + asm volatile ("mcr p15, 0, %0, c8, c7, 0": :"r" (0)); +} + +void mmu_invalidate_icache() +{ + asm volatile ("mcr p15, 0, %0, c7, c5, 0": :"r" (0)); +} + +void mmu_invalidate_dcache_all() +{ + asm volatile ("mcr p15, 0, %0, c7, c6, 0": :"r" (0)); +} +#endif + +/* level1 page table */ +static volatile unsigned int _pgd_table[4*1024] ALIGN(16*1024); +/* + * level2 page table + * RT_MMU_PTE_SIZE must be 1024*n + */ +#define RT_MMU_PTE_SIZE 4096 +static volatile unsigned int _pte_table[RT_MMU_PTE_SIZE] ALIGN(1*1024); + +void mmu_create_pgd(struct mem_desc *mdesc) +{ + volatile rt_uint32_t *pTT; + volatile int i, nSec; + pTT = (rt_uint32_t *)_pgd_table + (mdesc->vaddr_start >> 20); + nSec = (mdesc->vaddr_end >> 20) - (mdesc->vaddr_start >> 20); + for(i = 0; i <= nSec; i++) + { + *pTT = mdesc->sect_attr | (((mdesc->paddr_start >> 20) + i) << 20); + pTT++; + } +} + +void mmu_create_pte(struct mem_desc *mdesc) +{ + volatile rt_uint32_t *pTT; + volatile rt_uint32_t *p_pteentry; + int i; + rt_uint32_t vaddr; + rt_uint32_t total_page = 0; + rt_uint32_t pte_offset = 0; + rt_uint32_t sect_attr = 0; + + total_page = (mdesc->vaddr_end >> 12) - (mdesc->vaddr_start >> 12) + 1; + pte_offset = mdesc->sect_attr & 0xfffffc00; + sect_attr = mdesc->sect_attr & 0x3ff; + vaddr = mdesc->vaddr_start; + + for(i = 0; i < total_page; i++) + { + pTT = (rt_uint32_t *)_pgd_table + (vaddr >> 20); + if (*pTT == 0) /* Level 1 page table item not used, now update pgd item */ + { + *pTT = pte_offset | sect_attr; + p_pteentry = (rt_uint32_t *)pte_offset + + ((vaddr & 0x000ff000) >> 12); + pte_offset += 1024; + } + else /* using old Level 1 page table item */ + { + p_pteentry = (rt_uint32_t *)(*pTT & 0xfffffc00) + + ((vaddr & 0x000ff000) >> 12); + } + + + *p_pteentry = mdesc->page_attr | (((mdesc->paddr_start >> 12) + i) << 12); + vaddr += 0x1000; + } +} + +static void build_pte_mem_desc(struct mem_desc *mdesc, rt_uint32_t size) +{ + rt_uint32_t pte_offset = 0; + rt_uint32_t nsec = 0; + /* set page table */ + for (; size > 0; size--) + { + if (mdesc->mapped_mode == PAGE_MAPPED) + { + nsec = (RT_ALIGN(mdesc->vaddr_end, 0x100000) - RT_ALIGN_DOWN(mdesc->vaddr_start, 0x100000)) >> 20; + mdesc->sect_attr |= (((rt_uint32_t)_pte_table)& 0xfffffc00) + pte_offset; + pte_offset += nsec << 10; + } + if (pte_offset >= RT_MMU_PTE_SIZE) + { + rt_kprintf("PTE table size too little\n"); + RT_ASSERT(0); + } + + mdesc++; + } +} + + +void rt_hw_mmu_init(struct mem_desc *mdesc, rt_uint32_t size) +{ + /* disable I/D cache */ + mmu_disable_dcache(); + mmu_disable_icache(); + mmu_disable(); + mmu_invalidate_tlb(); + + /* clear pgd and pte table */ + rt_memset((void *)_pgd_table, 0, 16*1024); + rt_memset((void *)_pte_table, 0, RT_MMU_PTE_SIZE); + build_pte_mem_desc(mdesc, size); + /* set page table */ + for (; size > 0; size--) + { + if (mdesc->mapped_mode == SECT_MAPPED) + { + mmu_create_pgd(mdesc); + } + else + { + mmu_create_pte(mdesc); + } + + mdesc++; + } + + /* set MMU table address */ + mmu_setttbase((rt_uint32_t)_pgd_table); + + /* enables MMU */ + mmu_enable(); + + /* enable Instruction Cache */ + mmu_enable_icache(); + + /* enable Data Cache */ + mmu_enable_dcache(); + + mmu_invalidate_icache(); + mmu_invalidate_dcache_all(); +} + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.h new file mode 100644 index 0000000000..4df61ac21d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/mmu.h @@ -0,0 +1,194 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#ifndef __MMU_H__ +#define __MMU_H__ + +#include + +#define CACHE_LINE_SIZE 32 + +/* + * Hardware page table definitions. + * + * + Level 1 descriptor (PGD) + * - common + */ +#define PGD_TYPE_MASK (3 << 0) +#define PGD_TYPE_FAULT (0 << 0) +#define PGD_TYPE_TABLE (1 << 0) +#define PGD_TYPE_SECT (2 << 0) +#define PGD_BIT4 (1 << 4) +#define PGD_DOMAIN(x) ((x) << 5) +#define PGD_PROTECTION (1 << 9) /* ARMv5 */ +/* + * - section + */ +#define PGD_SECT_BUFFERABLE (1 << 2) +#define PGD_SECT_CACHEABLE (1 << 3) +#define PGD_SECT_XN (1 << 4) /* ARMv6 */ +#define PGD_SECT_AP0 (1 << 10) +#define PGD_SECT_AP1 (1 << 11) +#define PGD_SECT_TEX(x) ((x) << 12) /* ARMv5 */ +#define PGD_SECT_APX (1 << 15) /* ARMv6 */ +#define PGD_SECT_S (1 << 16) /* ARMv6 */ +#define PGD_SECT_nG (1 << 17) /* ARMv6 */ +#define PGD_SECT_SUPER (1 << 18) /* ARMv6 */ + +#define PGD_SECT_UNCACHED (0) +#define PGD_SECT_BUFFERED (PGD_SECT_BUFFERABLE) +#define PGD_SECT_WT (PGD_SECT_CACHEABLE) +#define PGD_SECT_WB (PGD_SECT_CACHEABLE | PGD_SECT_BUFFERABLE) +#define PGD_SECT_MINICACHE (PGD_SECT_TEX(1) | PGD_SECT_CACHEABLE) +#define PGD_SECT_WBWA (PGD_SECT_TEX(1) | PGD_SECT_CACHEABLE | PGD_SECT_BUFFERABLE) +#define PGD_SECT_NONSHARED_DEV (PGD_SECT_TEX(2)) + + +/* + * + Level 2 descriptor (PTE) + * - common + */ +#define PTE_TYPE_MASK (3 << 0) +#define PTE_TYPE_FAULT (0 << 0) +#define PTE_TYPE_LARGE (1 << 0) +#define PTE_TYPE_SMALL (2 << 0) +#define PTE_TYPE_EXT (3 << 0) /* ARMv5 */ +#define PTE_BUFFERABLE (1 << 2) +#define PTE_CACHEABLE (1 << 3) + +/* + * - extended small page/tiny page + */ +#define PTE_EXT_XN (1 << 0) /* ARMv6 */ +#define PTE_EXT_AP_MASK (3 << 4) +#define PTE_EXT_AP0 (1 << 4) +#define PTE_EXT_AP1 (2 << 4) +#define PTE_EXT_AP_UNO_SRO (0 << 4) +#define PTE_EXT_AP_UNO_SRW (PTE_EXT_AP0) +#define PTE_EXT_AP_URO_SRW (PTE_EXT_AP1) +#define PTE_EXT_AP_URW_SRW (PTE_EXT_AP1|PTE_EXT_AP0) +#define PTE_EXT_TEX(x) ((x) << 6) /* ARMv5 */ +#define PTE_EXT_APX (1 << 9) /* ARMv6 */ +#define PTE_EXT_SHARED (1 << 10) /* ARMv6 */ +#define PTE_EXT_NG (1 << 11) /* ARMv6 */ + +/* + * - small page + */ +#define PTE_SMALL_AP_MASK (0xff << 4) +#define PTE_SMALL_AP_UNO_SRO (0x00 << 4) +#define PTE_SMALL_AP_UNO_SRW (0x55 << 4) +#define PTE_SMALL_AP_URO_SRW (0xaa << 4) +#define PTE_SMALL_AP_URW_SRW (0xff << 4) + + +/* + * sector table properities + */ +#define SECT_CB (PGD_SECT_CACHEABLE|PGD_SECT_BUFFERABLE) //cache_on, write_back +#define SECT_CNB (PGD_SECT_CACHEABLE) //cache_on, write_through +#define SECT_NCB (PGD_SECT_BUFFERABLE) //cache_off,WR_BUF on +#define SECT_NCNB (0 << 2) //cache_off,WR_BUF off + +#define SECT_AP_RW (PGD_SECT_AP0|PGD_SECT_AP1) //supervisor=RW, user=RW +#define SECT_AP_RO (PGD_SECT_AP0|PGD_SECT_AP1|PGD_SECT_APX) //supervisor=RO, user=RO + +#define SECT_RWX_CB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_SECT_WB|PGD_TYPE_SECT) /* Read/Write/executable, cache, write back */ +#define SECT_RWX_CNB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_SECT_WT|PGD_TYPE_SECT) /* Read/Write/executable, cache, write through */ +#define SECT_RWX_NCNB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_TYPE_SECT) /* Read/Write/executable without cache and write buffer */ +#define SECT_RWX_FAULT (SECT_AP_RW|PGD_DOMAIN(1)|PGD_TYPE_SECT) /* Read/Write without cache and write buffer */ + +#define SECT_RWNX_CB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_SECT_WB|PGD_TYPE_SECT|PGD_SECT_XN) /* Read/Write, cache, write back */ +#define SECT_RWNX_CNB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_SECT_WT|PGD_TYPE_SECT|PGD_SECT_XN) /* Read/Write, cache, write through */ +#define SECT_RWNX_NCNB (SECT_AP_RW|PGD_DOMAIN(0)|PGD_TYPE_SECT|PGD_SECT_XN) /* Read/Write without cache and write buffer */ +#define SECT_RWNX_FAULT (SECT_AP_RW|PGD_DOMAIN(1)|PGD_TYPE_SECT|PGD_SECT_XN) /* Read/Write without cache and write buffer */ + + +#define SECT_ROX_CB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_SECT_WB|PGD_TYPE_SECT) /* Read Only/executable, cache, write back */ +#define SECT_ROX_CNB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_SECT_WT|PGD_TYPE_SECT) /* Read Only/executable, cache, write through */ +#define SECT_ROX_NCNB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_TYPE_SECT) /* Read Only/executable without cache and write buffer */ +#define SECT_ROX_FAULT (SECT_AP_RO|PGD_DOMAIN(1)|PGD_TYPE_SECT) /* Read Only without cache and write buffer */ + +#define SECT_RONX_CB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_SECT_WB|PGD_TYPE_SECT|PGD_SECT_XN) /* Read Only, cache, write back */ +#define SECT_RONX_CNB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_SECT_WT|PGD_TYPE_SECT|PGD_SECT_XN) /* Read Only, cache, write through */ +#define SECT_RONX_NCNB (SECT_AP_RO|PGD_DOMAIN(0)|PGD_TYPE_SECT|PGD_SECT_XN) /* Read Only without cache and write buffer */ +#define SECT_RONX_FAULT (SECT_AP_RO|PGD_DOMAIN(1)|PGD_TYPE_SECT|PGD_SECT_XN) /* Read Only without cache and write buffer */ + +#define SECT_TO_PAGE (PGD_DOMAIN(0)|PGD_TYPE_TABLE) /* Level 2 descriptor (PTE) entry properity */ + +/* + * page table properities + */ +#define PAGE_CB (PTE_BUFFERABLE|PTE_CACHEABLE) //cache_on, write_back +#define PAGE_CNB (PTE_CACHEABLE) //cache_on, write_through +#define PAGE_NCB (PTE_BUFFERABLE) //cache_off,WR_BUF on +#define PAGE_NCNB (0 << 2) //cache_off,WR_BUF off + +#define PAGE_AP_RW (PTE_EXT_AP0|PTE_EXT_AP1) //supervisor=RW, user=RW +#define PAGE_AP_RO (PTE_EXT_AP0|PTE_EXT_AP1|PTE_EXT_APX) //supervisor=RO, user=RO + +#define PAGE_RWX_CB (PAGE_AP_RW|PAGE_CB|PTE_TYPE_SMALL) /* Read/Write/executable, cache, write back */ +#define PAGE_RWX_CNB (PAGE_AP_RW|PAGE_CNB|PTE_TYPE_SMALL) /* Read/Write/executable, cache, write through */ +#define PAGE_RWX_NCNB (PAGE_AP_RW|PTE_TYPE_SMALL) /* Read/Write/executable without cache and write buffer */ +#define PAGE_RWX_FAULT (PAGE_AP_RW|PTE_TYPE_SMALL) /* Read/Write without cache and write buffer */ + +#define PAGE_RWNX_CB (PAGE_AP_RW|PAGE_CB|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read/Write, cache, write back */ +#define PAGE_RWNX_CNB (PAGE_AP_RW|PAGE_CNB|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read/Write, cache, write through */ +#define PAGE_RWNX_NCNB (PAGE_AP_RW|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read/Write without cache and write buffer */ +#define PAGE_RWNX_FAULT (PAGE_AP_RW|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read/Write without cache and write buffer */ + + +#define PAGE_ROX_CB (PAGE_AP_RO|PAGE_CB|PTE_TYPE_SMALL) /* Read Only/executable, cache, write back */ +#define PAGE_ROX_CNB (PAGE_AP_RO|PAGE_CNB|PTE_TYPE_SMALL) /* Read Only/executable, cache, write through */ +#define PAGE_ROX_NCNB (PAGE_AP_RO|PTE_TYPE_SMALL) /* Read Only/executable without cache and write buffer */ +#define PAGE_ROX_FAULT (PAGE_AP_RO|PTE_TYPE_SMALL) /* Read Only without cache and write buffer */ + +#define PAGE_RONX_CB (PAGE_AP_RO|PAGE_CB|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read Only, cache, write back */ +#define PAGE_RONX_CNB (PAGE_AP_RO|PAGE_CNB|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read Only, cache, write through */ +#define PAGE_RONX_NCNB (PAGE_AP_RO|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read Only without cache and write buffer */ +#define PAGE_RONX_FAULT (PAGE_AP_RO|PTE_TYPE_SMALL|PTE_EXT_XN) /* Read Only without cache and write buffer */ + + +#define DESC_SEC (0x2|(1<<4)) +#define CB (3<<2) //cache_on, write_back +#define CNB (2<<2) //cache_on, write_through +#define NCB (1<<2) //cache_off,WR_BUF on +#define NCNB (0<<2) //cache_off,WR_BUF off +#define AP_RW (3<<10) //supervisor=RW, user=RW +#define AP_RO (2<<10) //supervisor=RW, user=RO + +#define DOMAIN_FAULT (0x0) +#define DOMAIN_CHK (0x1) +#define DOMAIN_NOTCHK (0x3) +#define DOMAIN0 (0x0<<5) +#define DOMAIN1 (0x1<<5) + +#define DOMAIN0_ATTR (DOMAIN_CHK<<0) +#define DOMAIN1_ATTR (DOMAIN_FAULT<<2) + +#define RW_CB (AP_RW|DOMAIN0|CB|DESC_SEC) /* Read/Write, cache, write back */ +#define RW_CNB (AP_RW|DOMAIN0|CNB|DESC_SEC) /* Read/Write, cache, write through */ +#define RW_NCNB (AP_RW|DOMAIN0|NCNB|DESC_SEC) /* Read/Write without cache and write buffer */ +#define RW_FAULT (AP_RW|DOMAIN1|NCNB|DESC_SEC) /* Read/Write without cache and write buffer */ + +struct mem_desc { + rt_uint32_t vaddr_start; + rt_uint32_t vaddr_end; + rt_uint32_t paddr_start; + rt_uint32_t sect_attr; /* when page mapped */ + rt_uint32_t page_attr; /* only sector mapped valid */ + rt_uint32_t mapped_mode; +#define SECT_MAPPED 0 +#define PAGE_MAPPED 1 +}; + +void rt_hw_mmu_init(struct mem_desc *mdesc, rt_uint32_t size); + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/stack.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/stack.c new file mode 100644 index 0000000000..52de999fc2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/stack.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-01-13 weety copy from mini2440 + */ +#include + +/*****************************/ +/* CPU Mode */ +/*****************************/ +#define USERMODE 0x10 +#define FIQMODE 0x11 +#define IRQMODE 0x12 +#define SVCMODE 0x13 +#define ABORTMODE 0x17 +#define UNDEFMODE 0x1b +#define MODEMASK 0x1f +#define NOINT 0xc0 + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + rt_uint32_t *stk; + + stack_addr += sizeof(rt_uint32_t); + stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); + stk = (rt_uint32_t *)stack_addr; + + *(--stk) = (rt_uint32_t)tentry; /* entry point */ + *(--stk) = (rt_uint32_t)texit; /* lr */ + *(--stk) = 0xdeadbeef; /* r12 */ + *(--stk) = 0xdeadbeef; /* r11 */ + *(--stk) = 0xdeadbeef; /* r10 */ + *(--stk) = 0xdeadbeef; /* r9 */ + *(--stk) = 0xdeadbeef; /* r8 */ + *(--stk) = 0xdeadbeef; /* r7 */ + *(--stk) = 0xdeadbeef; /* r6 */ + *(--stk) = 0xdeadbeef; /* r5 */ + *(--stk) = 0xdeadbeef; /* r4 */ + *(--stk) = 0xdeadbeef; /* r3 */ + *(--stk) = 0xdeadbeef; /* r2 */ + *(--stk) = 0xdeadbeef; /* r1 */ + *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ + + /* cpsr */ + if ((rt_uint32_t)tentry & 0x01) + *(--stk) = SVCMODE | 0x20; /* thumb mode */ + else + *(--stk) = SVCMODE; /* arm mode */ + + /* return task's current stack address */ + return (rt_uint8_t *)stk; +} + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.c new file mode 100644 index 0000000000..9aa8d34fcc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2014-11-07 weety first version + */ + +#include +#include +#include "vfp.h" + +#ifdef RT_USING_VFP + +void vfp_init(void) +{ + int ret = 0; + unsigned int value; + asm volatile ("mrc p15, 0, %0, c1, c0, 2" + :"=r"(value) + :); + value |= 0xf00000;/*enable CP10, CP11 user access*/ + asm volatile("mcr p15, 0, %0, c1, c0, 2" + : + :"r"(value)); + + asm volatile("fmrx %0, fpexc" + :"=r"(value)); + value |=(1<<30); + asm volatile("fmxr fpexc, %0" + : + :"r"(value)); + +} + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.h new file mode 100644 index 0000000000..c347dbe0a6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/armv6/vfp.h @@ -0,0 +1,96 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2014-11-07 weety first version + */ + +#ifndef __VFP_H__ +#define __VFP_H__ + +/* FPSID register bits */ +#define FPSID_IMPLEMENTER_BIT (24) +#define FPSID_IMPLEMENTER_MASK (0xff << FPSID_IMPLEMENTER_BIT) +#define FPSID_SW (1 << 23) +#define FPSID_FORMAT_BIT (21) +#define FPSID_FORMAT_MASK (0x3 << FPSID_FORMAT_BIT) +#define FPSID_NODOUBLE (1 << 20) +#define FPSID_ARCH_BIT (16) +#define FPSID_ARCH_MASK (0xF << FPSID_ARCH_BIT) +#define FPSID_PART_BIT (8) +#define FPSID_PART_MASK (0xFF << FPSID_PART_BIT) +#define FPSID_VARIANT_BIT (4) +#define FPSID_VARIANT_MASK (0xF << FPSID_VARIANT_BIT) +#define FPSID_REVISION_BIT (0) +#define FPSID_REVISION_MASK (0xF << FPSID_REVISION_BIT) + +/* FPSCR register bits */ +#define FPSCR_DN (1<<25) /* Default NaN mode enable bit */ +#define FPSCR_FZ (1<<24) /* Flush-to-zero mode enable bit */ +#define FPSCR_RN (0<<22) /* Round to nearest (RN) mode */ +#define FPSCR_RP (1<<22) /* Round towards plus infinity (RP) mode */ +#define FPSCR_RM (2<<22) /* Round towards minus infinity (RM) mode */ +#define FPSCR_RZ (3<<22) /* Round towards zero (RZ) mode */ +#define FPSCR_RMODE_BIT (22) +#define FPSCR_RMODE_MASK (3 << FPSCR_RMODE_BIT) +#define FPSCR_STRIDE_BIT (20) +#define FPSCR_STRIDE_MASK (3 << FPSCR_STRIDE_BIT) +#define FPSCR_LENGTH_BIT (16) +#define FPSCR_LENGTH_MASK (7 << FPSCR_LENGTH_BIT) +#define FPSCR_IDE (1<<15) /* Input Subnormal exception trap enable bit */ +#define FPSCR_IXE (1<<12) /* Inexact exception trap enable bit */ +#define FPSCR_UFE (1<<11) /* Underflow exception trap enable bit */ +#define FPSCR_OFE (1<<10) /* Overflow exception trap enable bit */ +#define FPSCR_DZE (1<<9) /* Division by Zero exception trap enable bit */ +#define FPSCR_IOE (1<<8) /* Invalid Operation exception trap enable bit */ +#define FPSCR_IDC (1<<7) /* Input Subnormal cumulative exception flag */ +#define FPSCR_IXC (1<<4) /* Inexact cumulative exception flag */ +#define FPSCR_UFC (1<<3) /* Underflow cumulative exception flag */ +#define FPSCR_OFC (1<<2) /* Overflow cumulative exception flag */ +#define FPSCR_DZC (1<<1) /* Division by Zero cumulative exception flag */ +#define FPSCR_IOC (1<<0) /* Invalid Operation cumulative exception flag */ + +/* FPEXC register bits */ +#define FPEXC_EX (1 << 31) /* When EX is set, the VFP coprocessor is in the exceptional state */ +#define FPEXC_EN (1 << 30) /* VFP enable bit */ +#define FPEXC_DEX (1 << 29) /* Defined synchronous instruction exceptional flag */ +#define FPEXC_FP2V (1 << 28) /* FPINST2 instruction valid flag */ +#define FPEXC_LENGTH_BIT (8) +#define FPEXC_LENGTH_MASK (7 << FPEXC_LENGTH_BIT) +#define FPEXC_INV (1 << 7) /* Input exception flag */ +#define FPEXC_UFC (1 << 3) /* Potential underflow flag */ +#define FPEXC_OFC (1 << 2) /* Potential overflow flag */ +#define FPEXC_IOC (1 << 0) /* Potential invalid operation flag */ +#define FPEXC_TRAP_MASK (FPEXC_INV|FPEXC_UFC|FPEXC_OFC|FPEXC_IOC) + + +/* MVFR0 register bits */ +#define MVFR0_A_SIMD_BIT (0) +#define MVFR0_A_SIMD_MASK (0xf << MVFR0_A_SIMD_BIT) + + +/* thread switch micro */ +#define THREAD_INIT 0 +#define THREAD_EXIT 1 + +/* + * get VFP register + */ + +#define vmrs(vfp) ({ \ + rt_uint32_t var; \ + asm("vmrs %0, "#vfp"" : "=r" (var) : : "cc"); \ + var; \ + }) + +#define vmsr(vfp, var) \ + asm("vmsr "#vfp", %0" \ + : : "r" (var) : "cc") + + +#endif + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/backtrace.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/backtrace.c new file mode 100644 index 0000000000..4fc87b20d1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/backtrace.c @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-07-29 Bernard first version from QiuYi implementation + */ + +#include + +#ifdef __GNUC__ +/* +-->High Address,Stack Top +PC<------| +LR | +IP | +FP | +...... | +PC <-| | +LR | | +IP | | +FP---|-- | +...... | +PC | +LR | +IP | +FP--- +-->Low Address,Stack Bottom +*/ +void rt_hw_backtrace(rt_uint32_t *fp, rt_uint32_t thread_entry) +{ + rt_uint32_t i, pc, func_entry; + + pc = *fp; + rt_kprintf("[0x%x]\n", pc-0xC); + + for(i=0; i<10; i++) + { + fp = (rt_uint32_t *)*(fp - 3); + pc = *fp ; + + func_entry = pc - 0xC; + + if(func_entry <= 0x30000000) break; + + if(func_entry == thread_entry) + { + rt_kprintf("EntryPoint:0x%x\n", func_entry); + + break; + } + + rt_kprintf("[0x%x]\n", func_entry); + } +} +#else +void rt_hw_backtrace(rt_uint32_t *fp, rt_uint32_t thread_entry) +{ + /* old compiler implementation */ +} +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/div0.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/div0.c new file mode 100644 index 0000000000..0cb3e09b54 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/div0.c @@ -0,0 +1,12 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +void __div0 (void) +{ + while (1) ; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/divsi3.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/divsi3.S new file mode 100644 index 0000000000..3941bfc476 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/divsi3.S @@ -0,0 +1,401 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +/* $NetBSD: divsi3.S,v 1.5 2005/02/26 22:58:56 perry Exp $ */ + +/* + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR 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 AUTHOR 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. + */ + +/* + * stack is aligned as there's a possibility of branching to L_overflow + * which makes a C call + */ + .text + .align 0 + .globl __umodsi3 + .type __umodsi3 , function +__umodsi3: + stmfd sp!, {lr} + sub sp, sp, #4 /* align stack */ + bl .L_udivide + add sp, sp, #4 /* unalign stack */ + mov r0, r1 + ldmfd sp!, {pc} + + .text + .align 0 + .globl __modsi3 + .type __modsi3 , function +__modsi3: + stmfd sp!, {lr} + sub sp, sp, #4 /* align stack */ + bl .L_divide + add sp, sp, #4 /* unalign stack */ + mov r0, r1 + ldmfd sp!, {pc} + +.L_overflow: + /* XXX should cause a fatal error */ + mvn r0, #0 + mov pc, lr + + .text + .align 0 + .globl __udivsi3 + .type __udivsi3 , function +__udivsi3: +.L_udivide: /* r0 = r0 / r1; r1 = r0 % r1 */ + eor r0, r1, r0 + eor r1, r0, r1 + eor r0, r1, r0 + /* r0 = r1 / r0; r1 = r1 % r0 */ + cmp r0, #1 + bcc .L_overflow + beq .L_divide_l0 + mov ip, #0 + movs r1, r1 + bpl .L_divide_l1 + orr ip, ip, #0x20000000 /* ip bit 0x20000000 = -ve r1 */ + movs r1, r1, lsr #1 + orrcs ip, ip, #0x10000000 /* ip bit 0x10000000 = bit 0 of r1 */ + b .L_divide_l1 + +.L_divide_l0: /* r0 == 1 */ + mov r0, r1 + mov r1, #0 + mov pc, lr + + .text + .align 0 + .globl __divsi3 + .type __divsi3 , function +__divsi3: +.L_divide: /* r0 = r0 / r1; r1 = r0 % r1 */ + eor r0, r1, r0 + eor r1, r0, r1 + eor r0, r1, r0 + /* r0 = r1 / r0; r1 = r1 % r0 */ + cmp r0, #1 + bcc .L_overflow + beq .L_divide_l0 + ands ip, r0, #0x80000000 + rsbmi r0, r0, #0 + ands r2, r1, #0x80000000 + eor ip, ip, r2 + rsbmi r1, r1, #0 + orr ip, r2, ip, lsr #1 /* ip bit 0x40000000 = -ve division */ + /* ip bit 0x80000000 = -ve remainder */ + +.L_divide_l1: + mov r2, #1 + mov r3, #0 + + /* + * If the highest bit of the dividend is set, we have to be + * careful when shifting the divisor. Test this. + */ + movs r1,r1 + bpl .L_old_code + + /* + * At this point, the highest bit of r1 is known to be set. + * We abuse this below in the tst instructions. + */ + tst r1, r0 /*, lsl #0 */ + bmi .L_divide_b1 + tst r1, r0, lsl #1 + bmi .L_divide_b2 + tst r1, r0, lsl #2 + bmi .L_divide_b3 + tst r1, r0, lsl #3 + bmi .L_divide_b4 + tst r1, r0, lsl #4 + bmi .L_divide_b5 + tst r1, r0, lsl #5 + bmi .L_divide_b6 + tst r1, r0, lsl #6 + bmi .L_divide_b7 + tst r1, r0, lsl #7 + bmi .L_divide_b8 + tst r1, r0, lsl #8 + bmi .L_divide_b9 + tst r1, r0, lsl #9 + bmi .L_divide_b10 + tst r1, r0, lsl #10 + bmi .L_divide_b11 + tst r1, r0, lsl #11 + bmi .L_divide_b12 + tst r1, r0, lsl #12 + bmi .L_divide_b13 + tst r1, r0, lsl #13 + bmi .L_divide_b14 + tst r1, r0, lsl #14 + bmi .L_divide_b15 + tst r1, r0, lsl #15 + bmi .L_divide_b16 + tst r1, r0, lsl #16 + bmi .L_divide_b17 + tst r1, r0, lsl #17 + bmi .L_divide_b18 + tst r1, r0, lsl #18 + bmi .L_divide_b19 + tst r1, r0, lsl #19 + bmi .L_divide_b20 + tst r1, r0, lsl #20 + bmi .L_divide_b21 + tst r1, r0, lsl #21 + bmi .L_divide_b22 + tst r1, r0, lsl #22 + bmi .L_divide_b23 + tst r1, r0, lsl #23 + bmi .L_divide_b24 + tst r1, r0, lsl #24 + bmi .L_divide_b25 + tst r1, r0, lsl #25 + bmi .L_divide_b26 + tst r1, r0, lsl #26 + bmi .L_divide_b27 + tst r1, r0, lsl #27 + bmi .L_divide_b28 + tst r1, r0, lsl #28 + bmi .L_divide_b29 + tst r1, r0, lsl #29 + bmi .L_divide_b30 + tst r1, r0, lsl #30 + bmi .L_divide_b31 +/* + * instead of: + * tst r1, r0, lsl #31 + * bmi .L_divide_b32 + */ + b .L_divide_b32 + +.L_old_code: + cmp r1, r0 + bcc .L_divide_b0 + cmp r1, r0, lsl #1 + bcc .L_divide_b1 + cmp r1, r0, lsl #2 + bcc .L_divide_b2 + cmp r1, r0, lsl #3 + bcc .L_divide_b3 + cmp r1, r0, lsl #4 + bcc .L_divide_b4 + cmp r1, r0, lsl #5 + bcc .L_divide_b5 + cmp r1, r0, lsl #6 + bcc .L_divide_b6 + cmp r1, r0, lsl #7 + bcc .L_divide_b7 + cmp r1, r0, lsl #8 + bcc .L_divide_b8 + cmp r1, r0, lsl #9 + bcc .L_divide_b9 + cmp r1, r0, lsl #10 + bcc .L_divide_b10 + cmp r1, r0, lsl #11 + bcc .L_divide_b11 + cmp r1, r0, lsl #12 + bcc .L_divide_b12 + cmp r1, r0, lsl #13 + bcc .L_divide_b13 + cmp r1, r0, lsl #14 + bcc .L_divide_b14 + cmp r1, r0, lsl #15 + bcc .L_divide_b15 + cmp r1, r0, lsl #16 + bcc .L_divide_b16 + cmp r1, r0, lsl #17 + bcc .L_divide_b17 + cmp r1, r0, lsl #18 + bcc .L_divide_b18 + cmp r1, r0, lsl #19 + bcc .L_divide_b19 + cmp r1, r0, lsl #20 + bcc .L_divide_b20 + cmp r1, r0, lsl #21 + bcc .L_divide_b21 + cmp r1, r0, lsl #22 + bcc .L_divide_b22 + cmp r1, r0, lsl #23 + bcc .L_divide_b23 + cmp r1, r0, lsl #24 + bcc .L_divide_b24 + cmp r1, r0, lsl #25 + bcc .L_divide_b25 + cmp r1, r0, lsl #26 + bcc .L_divide_b26 + cmp r1, r0, lsl #27 + bcc .L_divide_b27 + cmp r1, r0, lsl #28 + bcc .L_divide_b28 + cmp r1, r0, lsl #29 + bcc .L_divide_b29 + cmp r1, r0, lsl #30 + bcc .L_divide_b30 +.L_divide_b32: + cmp r1, r0, lsl #31 + subhs r1, r1,r0, lsl #31 + addhs r3, r3,r2, lsl #31 +.L_divide_b31: + cmp r1, r0, lsl #30 + subhs r1, r1,r0, lsl #30 + addhs r3, r3,r2, lsl #30 +.L_divide_b30: + cmp r1, r0, lsl #29 + subhs r1, r1,r0, lsl #29 + addhs r3, r3,r2, lsl #29 +.L_divide_b29: + cmp r1, r0, lsl #28 + subhs r1, r1,r0, lsl #28 + addhs r3, r3,r2, lsl #28 +.L_divide_b28: + cmp r1, r0, lsl #27 + subhs r1, r1,r0, lsl #27 + addhs r3, r3,r2, lsl #27 +.L_divide_b27: + cmp r1, r0, lsl #26 + subhs r1, r1,r0, lsl #26 + addhs r3, r3,r2, lsl #26 +.L_divide_b26: + cmp r1, r0, lsl #25 + subhs r1, r1,r0, lsl #25 + addhs r3, r3,r2, lsl #25 +.L_divide_b25: + cmp r1, r0, lsl #24 + subhs r1, r1,r0, lsl #24 + addhs r3, r3,r2, lsl #24 +.L_divide_b24: + cmp r1, r0, lsl #23 + subhs r1, r1,r0, lsl #23 + addhs r3, r3,r2, lsl #23 +.L_divide_b23: + cmp r1, r0, lsl #22 + subhs r1, r1,r0, lsl #22 + addhs r3, r3,r2, lsl #22 +.L_divide_b22: + cmp r1, r0, lsl #21 + subhs r1, r1,r0, lsl #21 + addhs r3, r3,r2, lsl #21 +.L_divide_b21: + cmp r1, r0, lsl #20 + subhs r1, r1,r0, lsl #20 + addhs r3, r3,r2, lsl #20 +.L_divide_b20: + cmp r1, r0, lsl #19 + subhs r1, r1,r0, lsl #19 + addhs r3, r3,r2, lsl #19 +.L_divide_b19: + cmp r1, r0, lsl #18 + subhs r1, r1,r0, lsl #18 + addhs r3, r3,r2, lsl #18 +.L_divide_b18: + cmp r1, r0, lsl #17 + subhs r1, r1,r0, lsl #17 + addhs r3, r3,r2, lsl #17 +.L_divide_b17: + cmp r1, r0, lsl #16 + subhs r1, r1,r0, lsl #16 + addhs r3, r3,r2, lsl #16 +.L_divide_b16: + cmp r1, r0, lsl #15 + subhs r1, r1,r0, lsl #15 + addhs r3, r3,r2, lsl #15 +.L_divide_b15: + cmp r1, r0, lsl #14 + subhs r1, r1,r0, lsl #14 + addhs r3, r3,r2, lsl #14 +.L_divide_b14: + cmp r1, r0, lsl #13 + subhs r1, r1,r0, lsl #13 + addhs r3, r3,r2, lsl #13 +.L_divide_b13: + cmp r1, r0, lsl #12 + subhs r1, r1,r0, lsl #12 + addhs r3, r3,r2, lsl #12 +.L_divide_b12: + cmp r1, r0, lsl #11 + subhs r1, r1,r0, lsl #11 + addhs r3, r3,r2, lsl #11 +.L_divide_b11: + cmp r1, r0, lsl #10 + subhs r1, r1,r0, lsl #10 + addhs r3, r3,r2, lsl #10 +.L_divide_b10: + cmp r1, r0, lsl #9 + subhs r1, r1,r0, lsl #9 + addhs r3, r3,r2, lsl #9 +.L_divide_b9: + cmp r1, r0, lsl #8 + subhs r1, r1,r0, lsl #8 + addhs r3, r3,r2, lsl #8 +.L_divide_b8: + cmp r1, r0, lsl #7 + subhs r1, r1,r0, lsl #7 + addhs r3, r3,r2, lsl #7 +.L_divide_b7: + cmp r1, r0, lsl #6 + subhs r1, r1,r0, lsl #6 + addhs r3, r3,r2, lsl #6 +.L_divide_b6: + cmp r1, r0, lsl #5 + subhs r1, r1,r0, lsl #5 + addhs r3, r3,r2, lsl #5 +.L_divide_b5: + cmp r1, r0, lsl #4 + subhs r1, r1,r0, lsl #4 + addhs r3, r3,r2, lsl #4 +.L_divide_b4: + cmp r1, r0, lsl #3 + subhs r1, r1,r0, lsl #3 + addhs r3, r3,r2, lsl #3 +.L_divide_b3: + cmp r1, r0, lsl #2 + subhs r1, r1,r0, lsl #2 + addhs r3, r3,r2, lsl #2 +.L_divide_b2: + cmp r1, r0, lsl #1 + subhs r1, r1,r0, lsl #1 + addhs r3, r3,r2, lsl #1 +.L_divide_b1: + cmp r1, r0 + subhs r1, r1, r0 + addhs r3, r3, r2 +.L_divide_b0: + + tst ip, #0x20000000 + bne .L_udivide_l1 + mov r0, r3 + cmp ip, #0 + rsbmi r1, r1, #0 + movs ip, ip, lsl #1 + bicmi r0, r0, #0x80000000 /* Fix incase we divided 0x80000000 */ + rsbmi r0, r0, #0 + mov pc, lr + +.L_udivide_l1: + tst ip, #0x10000000 + mov r1, r1, lsl #1 + orrne r1, r1, #1 + mov r3, r3, lsl #1 + cmp r1, r0 + subhs r1, r1, r0 + addhs r3, r3, r2 + mov r0, r3 + mov pc, lr diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/showmem.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/showmem.c new file mode 100644 index 0000000000..b770e4ce17 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/common/showmem.c @@ -0,0 +1,38 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-07-29 Bernard first version from QiuYi implementation + */ + +#include + +void rt_hw_show_memory(rt_uint32_t addr, rt_uint32_t size) +{ + int i = 0, j =0; + + RT_ASSERT(addr); + + addr = addr & ~0xF; + size = 4*((size + 3)/4); + + while(i < size) + { + rt_kprintf("0x%08x: ", addr ); + + for(j=0; j<4; j++) + { + rt_kprintf("0x%08x ", *(rt_uint32_t *)addr); + + addr += 4; + i++; + } + + rt_kprintf("\n"); + } + + return; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/SConscript b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/SConscript new file mode 100644 index 0000000000..9ff30a796b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/SConscript @@ -0,0 +1,23 @@ +# RT-Thread building script for component + +from building import * + +Import('rtconfig') + +cwd = GetCurrentDir() +src = Glob('*.c') + Glob('*.cpp') +CPPPATH = [cwd] + +if rtconfig.PLATFORM == 'armcc': + src += Glob('*_rvds.S') + +if rtconfig.PLATFORM == 'gcc': + src += Glob('*_init.S') + src += Glob('*_gcc.S') + +if rtconfig.PLATFORM == 'iar': + src += Glob('*_iar.S') + +group = DefineGroup('cpu', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/armv7.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/armv7.h new file mode 100644 index 0000000000..d22f72fa68 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/armv7.h @@ -0,0 +1,72 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#ifndef __ARMV7_H__ +#define __ARMV7_H__ + +/* the exception stack without VFP registers */ +struct rt_hw_exp_stack +{ + unsigned long r0; + unsigned long r1; + unsigned long r2; + unsigned long r3; + unsigned long r4; + unsigned long r5; + unsigned long r6; + unsigned long r7; + unsigned long r8; + unsigned long r9; + unsigned long r10; + unsigned long fp; + unsigned long ip; + unsigned long sp; + unsigned long lr; + unsigned long pc; + unsigned long cpsr; +}; + +struct rt_hw_stack +{ + unsigned long cpsr; + unsigned long r0; + unsigned long r1; + unsigned long r2; + unsigned long r3; + unsigned long r4; + unsigned long r5; + unsigned long r6; + unsigned long r7; + unsigned long r8; + unsigned long r9; + unsigned long r10; + unsigned long fp; + unsigned long ip; + unsigned long lr; + unsigned long pc; +}; + +#define USERMODE 0x10 +#define FIQMODE 0x11 +#define IRQMODE 0x12 +#define SVCMODE 0x13 +#define MONITORMODE 0x16 +#define ABORTMODE 0x17 +#define HYPMODE 0x1b +#define UNDEFMODE 0x1b +#define MODEMASK 0x1f +#define NOINT 0xc0 + +#define T_Bit (1<<5) +#define F_Bit (1<<6) +#define I_Bit (1<<7) +#define A_Bit (1<<8) +#define E_Bit (1<<9) +#define J_Bit (1<<24) + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cache.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cache.c new file mode 100644 index 0000000000..6d28d9e9f9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cache.c @@ -0,0 +1,94 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-29 quanzhao the first version + */ +#include +#include + +rt_inline rt_uint32_t rt_cpu_icache_line_size(void) +{ + rt_uint32_t ctr; + asm volatile ("mrc p15, 0, %0, c0, c0, 1" : "=r"(ctr)); + return 4 << (ctr & 0xF); +} + +rt_inline rt_uint32_t rt_cpu_dcache_line_size(void) +{ + rt_uint32_t ctr; + asm volatile ("mrc p15, 0, %0, c0, c0, 1" : "=r"(ctr)); + return 4 << ((ctr >> 16) & 0xF); +} + +void rt_hw_cpu_icache_invalidate(void *addr, int size) +{ + rt_uint32_t line_size = rt_cpu_icache_line_size(); + rt_uint32_t start_addr = (rt_uint32_t)addr; + rt_uint32_t end_addr = (rt_uint32_t) addr + size + line_size - 1; + + start_addr &= ~(line_size-1); + end_addr &= ~(line_size-1); + while (start_addr < end_addr) + { + asm volatile ("mcr p15, 0, %0, c7, c5, 1" :: "r"(start_addr)); /* icimvau */ + start_addr += line_size; + } +} + +void rt_hw_cpu_dcache_invalidate(void *addr, int size) +{ + rt_uint32_t line_size = rt_cpu_dcache_line_size(); + rt_uint32_t start_addr = (rt_uint32_t)addr; + rt_uint32_t end_addr = (rt_uint32_t) addr + size + line_size - 1; + + start_addr &= ~(line_size-1); + end_addr &= ~(line_size-1); + while (start_addr < end_addr) + { + asm volatile ("mcr p15, 0, %0, c7, c6, 1" :: "r"(start_addr)); /* dcimvac */ + start_addr += line_size; + } +} + +void rt_hw_cpu_dcache_clean(void *addr, int size) +{ + rt_uint32_t line_size = rt_cpu_dcache_line_size(); + rt_uint32_t start_addr = (rt_uint32_t)addr; + rt_uint32_t end_addr = (rt_uint32_t) addr + size + line_size - 1; + + start_addr &= ~(line_size-1); + end_addr &= ~(line_size-1); + while (start_addr < end_addr) + { + asm volatile ("mcr p15, 0, %0, c7, c10, 1" :: "r"(start_addr)); /* dccmvac */ + start_addr += line_size; + } +} + +void rt_hw_cpu_icache_ops(int ops, void *addr, int size) +{ + if (ops == RT_HW_CACHE_INVALIDATE) + rt_hw_cpu_icache_invalidate(addr, size); +} + +void rt_hw_cpu_dcache_ops(int ops, void *addr, int size) +{ + if (ops == RT_HW_CACHE_FLUSH) + rt_hw_cpu_dcache_clean(addr, size); + else if (ops == RT_HW_CACHE_INVALIDATE) + rt_hw_cpu_dcache_invalidate(addr, size); +} + +rt_base_t rt_hw_cpu_icache_status(void) +{ + return 0; +} + +rt_base_t rt_hw_cpu_dcache_status(void) +{ + return 0; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/context_gcc.S new file mode 100644 index 0000000000..dff7a1de68 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/context_gcc.S @@ -0,0 +1,158 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-05 Bernard the first version + */ + +#include "rtconfig.h" +.section .text, "ax" + +#ifdef RT_USING_SMP +#define rt_hw_interrupt_disable rt_hw_local_irq_disable +#define rt_hw_interrupt_enable rt_hw_local_irq_enable +#endif + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ +.globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + mrs r0, cpsr + cpsid i + bx lr + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ +.globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + msr cpsr, r0 + bx lr + +/* + * void rt_hw_context_switch_to(rt_uint32 to, struct rt_thread *to_thread); + * r0 --> to (thread stack) + * r1 --> to_thread + */ +.globl rt_hw_context_switch_to +rt_hw_context_switch_to: + ldr sp, [r0] @ get new task stack pointer + +#ifdef RT_USING_SMP + mov r0, r1 + bl rt_cpus_lock_status_restore +#endif /*RT_USING_SMP*/ + b rt_hw_context_switch_exit + +.section .bss.share.isr +_guest_switch_lvl: + .word 0 + +.globl vmm_virq_update + +.section .text.isr, "ax" +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to, struct rt_thread *to_thread); + * r0 --> from (from_thread stack) + * r1 --> to (to_thread stack) + * r2 --> to_thread + */ +.globl rt_hw_context_switch +rt_hw_context_switch: + stmfd sp!, {lr} @ push pc (lr should be pushed in place of PC) + stmfd sp!, {r0-r12, lr} @ push lr & register file + + mrs r4, cpsr + tst lr, #0x01 + orrne r4, r4, #0x20 @ it's thumb code + + stmfd sp!, {r4} @ push cpsr + +#ifdef RT_USING_LWP + stmfd sp, {r13, r14}^ @ push usr_sp usr_lr + sub sp, #8 +#endif + + str sp, [r0] @ store sp in preempted tasks TCB + ldr sp, [r1] @ get new task stack pointer + +#ifdef RT_USING_SMP + mov r0, r2 + bl rt_cpus_lock_status_restore +#endif /*RT_USING_SMP*/ + b rt_hw_context_switch_exit + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); + */ +.equ Mode_USR, 0x10 +.equ Mode_FIQ, 0x11 +.equ Mode_IRQ, 0x12 +.equ Mode_SVC, 0x13 +.equ Mode_ABT, 0x17 +.equ Mode_UND, 0x1B +.equ Mode_SYS, 0x1F + +.equ I_Bit, 0x80 @ when I bit is set, IRQ is disabled +.equ F_Bit, 0x40 @ when F bit is set, FIQ is disabled + +.globl rt_thread_switch_interrupt_flag +.globl rt_interrupt_from_thread +.globl rt_interrupt_to_thread +.globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: +#ifdef RT_USING_SMP + /* r0 :svc_mod context + * r1 :addr of from_thread's sp + * r2 :addr of to_thread's sp + * r3 :to_thread's tcb + */ + + str r0, [r1] + + ldr sp, [r2] + mov r0, r3 + bl rt_cpus_lock_status_restore + + b rt_hw_context_switch_exit + +#else /*RT_USING_SMP*/ + ldr r2, =rt_thread_switch_interrupt_flag + ldr r3, [r2] + cmp r3, #1 + beq _reswitch + ldr ip, =rt_interrupt_from_thread @ set rt_interrupt_from_thread + mov r3, #1 @ set rt_thread_switch_interrupt_flag to 1 + str r0, [ip] + str r3, [r2] +_reswitch: + ldr r2, =rt_interrupt_to_thread @ set rt_interrupt_to_thread + str r1, [r2] + bx lr +#endif /*RT_USING_SMP*/ + +.global rt_hw_context_switch_exit +rt_hw_context_switch_exit: + +#ifdef RT_USING_SMP +#ifdef RT_USING_SIGNALS + mov r0, sp + cps #Mode_IRQ + bl rt_signal_check + cps #Mode_SVC + mov sp, r0 +#endif +#endif + +#ifdef RT_USING_LWP + ldmfd sp, {r13, r14}^ /* usr_sp, usr_lr */ + add sp, #8 +#endif + ldmfd sp!, {r1} + msr spsr_cxsf, r1 /* original mode */ + ldmfd sp!, {r0-r12,lr,pc}^ /* irq return */ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15.h new file mode 100644 index 0000000000..97c5b93ad2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15.h @@ -0,0 +1,24 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-03-25 quanzhao the first version + */ +#ifndef __CP15_H__ +#define __CP15_H__ + +unsigned long rt_cpu_get_smp_id(void); + +void rt_cpu_mmu_disable(void); +void rt_cpu_mmu_enable(void); +void rt_cpu_tlb_set(volatile unsigned long*); + +void rt_cpu_dcache_clean_flush(void); +void rt_cpu_icache_flush(void); + +void rt_cpu_vector_set_base(unsigned int addr); + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15_gcc.S new file mode 100644 index 0000000000..dd2436ffee --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cp15_gcc.S @@ -0,0 +1,138 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-05 Bernard the first version + */ + +.globl rt_cpu_get_smp_id +rt_cpu_get_smp_id: + mrc p15, #0, r0, c0, c0, #5 + bx lr + +.globl rt_cpu_vector_set_base +rt_cpu_vector_set_base: + /* clear SCTRL.V to customize the vector address */ + mrc p15, #0, r1, c1, c0, #0 + bic r1, #(1 << 13) + mcr p15, #0, r1, c1, c0, #0 + /* set up the vector address */ + mcr p15, #0, r0, c12, c0, #0 + dsb + bx lr + +.globl rt_hw_cpu_dcache_enable +rt_hw_cpu_dcache_enable: + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x00000004 + mcr p15, #0, r0, c1, c0, #0 + bx lr + +.globl rt_hw_cpu_icache_enable +rt_hw_cpu_icache_enable: + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x00001000 + mcr p15, #0, r0, c1, c0, #0 + bx lr + +_FLD_MAX_WAY: + .word 0x3ff +_FLD_MAX_IDX: + .word 0x7fff + +.globl rt_cpu_dcache_clean_flush +rt_cpu_dcache_clean_flush: + push {r4-r11} + dmb + mrc p15, #1, r0, c0, c0, #1 @ read clid register + ands r3, r0, #0x7000000 @ get level of coherency + mov r3, r3, lsr #23 + beq finished + mov r10, #0 +loop1: + add r2, r10, r10, lsr #1 + mov r1, r0, lsr r2 + and r1, r1, #7 + cmp r1, #2 + blt skip + mcr p15, #2, r10, c0, c0, #0 + isb + mrc p15, #1, r1, c0, c0, #0 + and r2, r1, #7 + add r2, r2, #4 + ldr r4, _FLD_MAX_WAY + ands r4, r4, r1, lsr #3 + clz r5, r4 + ldr r7, _FLD_MAX_IDX + ands r7, r7, r1, lsr #13 +loop2: + mov r9, r4 +loop3: + orr r11, r10, r9, lsl r5 + orr r11, r11, r7, lsl r2 + mcr p15, #0, r11, c7, c14, #2 + subs r9, r9, #1 + bge loop3 + subs r7, r7, #1 + bge loop2 +skip: + add r10, r10, #2 + cmp r3, r10 + bgt loop1 + +finished: + dsb + isb + pop {r4-r11} + bx lr + +.globl rt_cpu_icache_flush +rt_cpu_icache_flush: + mov r0, #0 + mcr p15, 0, r0, c7, c5, 0 @ I+BTB cache invalidate + dsb + isb + bx lr + +.globl rt_hw_cpu_dcache_disable +rt_hw_cpu_dcache_disable: + push {r4-r11, lr} + bl rt_cpu_dcache_clean_flush + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #0x00000004 + mcr p15, #0, r0, c1, c0, #0 + pop {r4-r11, lr} + bx lr + +.globl rt_hw_cpu_icache_disable +rt_hw_cpu_icache_disable: + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #0x00001000 + mcr p15, #0, r0, c1, c0, #0 + bx lr + +.globl rt_cpu_mmu_disable +rt_cpu_mmu_disable: + mcr p15, #0, r0, c8, c7, #0 @ invalidate tlb + mrc p15, #0, r0, c1, c0, #0 + bic r0, r0, #1 + mcr p15, #0, r0, c1, c0, #0 @ clear mmu bit + dsb + bx lr + +.globl rt_cpu_mmu_enable +rt_cpu_mmu_enable: + mrc p15, #0, r0, c1, c0, #0 + orr r0, r0, #0x001 + mcr p15, #0, r0, c1, c0, #0 @ set mmu enable bit + dsb + bx lr + +.globl rt_cpu_tlb_set +rt_cpu_tlb_set: + mcr p15, #0, r0, c2, c0, #0 + dmb + bx lr diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cpu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cpu.c new file mode 100644 index 0000000000..6b129f89ee --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/cpu.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-09-15 Bernard first version + * 2018-11-22 Jesven add rt_hw_cpu_id() + */ + +#include +#include +#include + +#ifdef RT_USING_SMP +int rt_hw_cpu_id(void) +{ + int cpu_id; + __asm__ volatile ( + "mrc p15, 0, %0, c0, c0, 5" + :"=r"(cpu_id) + ); + cpu_id &= 0xf; + return cpu_id; +}; + +void rt_hw_spin_lock(rt_hw_spinlock_t *lock) +{ + unsigned long tmp; + unsigned long newval; + rt_hw_spinlock_t lockval; + + __asm__ __volatile__( + "pld [%0]" + ::"r"(&lock->slock) + ); + + __asm__ __volatile__( + "1: ldrex %0, [%3]\n" + " add %1, %0, %4\n" + " strex %2, %1, [%3]\n" + " teq %2, #0\n" + " bne 1b" + : "=&r" (lockval), "=&r" (newval), "=&r" (tmp) + : "r" (&lock->slock), "I" (1 << 16) + : "cc"); + + while (lockval.tickets.next != lockval.tickets.owner) { + __asm__ __volatile__("wfe":::"memory"); + lockval.tickets.owner = *(volatile unsigned short *)(&lock->tickets.owner); + } + + __asm__ volatile ("dmb":::"memory"); +} + +void rt_hw_spin_unlock(rt_hw_spinlock_t *lock) +{ + __asm__ volatile ("dmb":::"memory"); + lock->tickets.owner++; + __asm__ volatile ("dsb ishst\nsev":::"memory"); +} +#endif /*RT_USING_SMP*/ + +/** + * @addtogroup ARM CPU + */ +/*@{*/ + +/** shutdown CPU */ +void rt_hw_cpu_shutdown() +{ + rt_uint32_t level; + rt_kprintf("shutdown...\n"); + + level = rt_hw_interrupt_disable(); + while (level) + { + RT_ASSERT(0); + } +} + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.c new file mode 100644 index 0000000000..2a46142b54 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.c @@ -0,0 +1,301 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-20 Bernard first version + * 2014-04-03 Grissiom many enhancements + * 2018-11-22 Jesven add rt_hw_ipi_send() + * add rt_hw_ipi_handler_install() + */ + +#include +#include + +#include "gic.h" +#include "cp15.h" + +struct arm_gic +{ + rt_uint32_t offset; /* the first interrupt index in the vector table */ + + rt_uint32_t dist_hw_base; /* the base address of the gic distributor */ + rt_uint32_t cpu_hw_base; /* the base addrees of the gic cpu interface */ +}; + +/* 'ARM_GIC_MAX_NR' is the number of cores */ +static struct arm_gic _gic_table[ARM_GIC_MAX_NR]; + +#define GIC_CPU_CTRL(hw_base) __REG32((hw_base) + 0x00) +#define GIC_CPU_PRIMASK(hw_base) __REG32((hw_base) + 0x04) +#define GIC_CPU_BINPOINT(hw_base) __REG32((hw_base) + 0x08) +#define GIC_CPU_INTACK(hw_base) __REG32((hw_base) + 0x0c) +#define GIC_CPU_EOI(hw_base) __REG32((hw_base) + 0x10) +#define GIC_CPU_RUNNINGPRI(hw_base) __REG32((hw_base) + 0x14) +#define GIC_CPU_HIGHPRI(hw_base) __REG32((hw_base) + 0x18) + +#define GIC_DIST_CTRL(hw_base) __REG32((hw_base) + 0x000) +#define GIC_DIST_TYPE(hw_base) __REG32((hw_base) + 0x004) +#define GIC_DIST_IGROUP(hw_base, n) __REG32((hw_base) + 0x080 + ((n)/32) * 4) +#define GIC_DIST_ENABLE_SET(hw_base, n) __REG32((hw_base) + 0x100 + ((n)/32) * 4) +#define GIC_DIST_ENABLE_CLEAR(hw_base, n) __REG32((hw_base) + 0x180 + ((n)/32) * 4) +#define GIC_DIST_PENDING_SET(hw_base, n) __REG32((hw_base) + 0x200 + ((n)/32) * 4) +#define GIC_DIST_PENDING_CLEAR(hw_base, n) __REG32((hw_base) + 0x280 + ((n)/32) * 4) +#define GIC_DIST_ACTIVE_SET(hw_base, n) __REG32((hw_base) + 0x300 + ((n)/32) * 4) +#define GIC_DIST_ACTIVE_CLEAR(hw_base, n) __REG32((hw_base) + 0x380 + ((n)/32) * 4) +#define GIC_DIST_PRI(hw_base, n) __REG32((hw_base) + 0x400 + ((n)/4) * 4) +#define GIC_DIST_TARGET(hw_base, n) __REG32((hw_base) + 0x800 + ((n)/4) * 4) +#define GIC_DIST_CONFIG(hw_base, n) __REG32((hw_base) + 0xc00 + ((n)/16) * 4) +#define GIC_DIST_SOFTINT(hw_base) __REG32((hw_base) + 0xf00) +#define GIC_DIST_CPENDSGI(hw_base, n) __REG32((hw_base) + 0xf10 + ((n)/4) * 4) +#define GIC_DIST_ICPIDR2(hw_base) __REG32((hw_base) + 0xfe8) + +static unsigned int _gic_max_irq; + +int arm_gic_get_active_irq(rt_uint32_t index) +{ + int irq; + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = GIC_CPU_INTACK(_gic_table[index].cpu_hw_base); + irq += _gic_table[index].offset; + return irq; +} + +void arm_gic_ack(rt_uint32_t index, int irq) +{ + rt_uint32_t mask = 1 << (irq % 32); + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + GIC_DIST_ENABLE_CLEAR(_gic_table[index].dist_hw_base, irq) = mask; + GIC_CPU_EOI(_gic_table[index].cpu_hw_base) = irq; + GIC_DIST_ENABLE_SET(_gic_table[index].dist_hw_base, irq) = mask; +} + +void arm_gic_mask(rt_uint32_t index, int irq) +{ + rt_uint32_t mask = 1 << (irq % 32); + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + GIC_DIST_ENABLE_CLEAR(_gic_table[index].dist_hw_base, irq) = mask; +} + +void arm_gic_clear_pending(rt_uint32_t index, int irq) +{ + rt_uint32_t mask = 1 << (irq % 32); + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + GIC_DIST_PENDING_CLEAR(_gic_table[index].dist_hw_base, irq) = mask; +} + +void arm_gic_clear_active(rt_uint32_t index, int irq) +{ + rt_uint32_t mask = 1 << (irq % 32); + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + GIC_DIST_ACTIVE_CLEAR(_gic_table[index].dist_hw_base, irq) = mask; +} + +/* Set up the cpu mask for the specific interrupt */ +void arm_gic_set_cpu(rt_uint32_t index, int irq, unsigned int cpumask) +{ + rt_uint32_t old_tgt; + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + old_tgt = GIC_DIST_TARGET(_gic_table[index].dist_hw_base, irq); + + old_tgt &= ~(0x0FFUL << ((irq % 4)*8)); + old_tgt |= cpumask << ((irq % 4)*8); + + GIC_DIST_TARGET(_gic_table[index].dist_hw_base, irq) = old_tgt; +} + +void arm_gic_umask(rt_uint32_t index, int irq) +{ + rt_uint32_t mask = 1 << (irq % 32); + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + irq = irq - _gic_table[index].offset; + RT_ASSERT(irq >= 0); + + GIC_DIST_ENABLE_SET(_gic_table[index].dist_hw_base, irq) = mask; +} + +void arm_gic_dump_type(rt_uint32_t index) +{ + unsigned int gic_type; + + gic_type = GIC_DIST_TYPE(_gic_table[index].dist_hw_base); + rt_kprintf("GICv%d on %p, max IRQs: %d, %s security extension(%08x)\n", + (GIC_DIST_ICPIDR2(_gic_table[index].dist_hw_base) >> 4) & 0xf, + _gic_table[index].dist_hw_base, + _gic_max_irq, + gic_type & (1 << 10) ? "has" : "no", + gic_type); +} + +void arm_gic_dump(rt_uint32_t index) +{ + unsigned int i, k; + + k = GIC_CPU_HIGHPRI(_gic_table[index].cpu_hw_base); + rt_kprintf("--- high pending priority: %d(%08x)\n", k, k); + rt_kprintf("--- hw mask ---\n"); + for (i = 0; i < _gic_max_irq / 32; i++) + { + rt_kprintf("0x%08x, ", + GIC_DIST_ENABLE_SET(_gic_table[index].dist_hw_base, + i * 32)); + } + rt_kprintf("\n--- hw pending ---\n"); + for (i = 0; i < _gic_max_irq / 32; i++) + { + rt_kprintf("0x%08x, ", + GIC_DIST_PENDING_SET(_gic_table[index].dist_hw_base, + i * 32)); + } + rt_kprintf("\n--- hw active ---\n"); + for (i = 0; i < _gic_max_irq / 32; i++) + { + rt_kprintf("0x%08x, ", + GIC_DIST_ACTIVE_SET(_gic_table[index].dist_hw_base, + i * 32)); + } + rt_kprintf("\n"); +} +#ifdef RT_USING_FINSH +#include +FINSH_FUNCTION_EXPORT_ALIAS(arm_gic_dump, gic, show gic status); +#endif + +int arm_gic_dist_init(rt_uint32_t index, rt_uint32_t dist_base, int irq_start) +{ + unsigned int gic_type, i; + rt_uint32_t cpumask = 1 << 0; + + RT_ASSERT(index < ARM_GIC_MAX_NR); + + _gic_table[index].dist_hw_base = dist_base; + _gic_table[index].offset = irq_start; + + /* Find out how many interrupts are supported. */ + gic_type = GIC_DIST_TYPE(dist_base); + _gic_max_irq = ((gic_type & 0x1f) + 1) * 32; + + /* + * The GIC only supports up to 1020 interrupt sources. + * Limit this to either the architected maximum, or the + * platform maximum. + */ + if (_gic_max_irq > 1020) + _gic_max_irq = 1020; + if (_gic_max_irq > ARM_GIC_NR_IRQS) /* the platform maximum interrupts */ + _gic_max_irq = ARM_GIC_NR_IRQS; + + cpumask |= cpumask << 8; + cpumask |= cpumask << 16; + cpumask |= cpumask << 24; + + GIC_DIST_CTRL(dist_base) = 0x0; + + /* Set all global interrupts to be level triggered, active low. */ + for (i = 32; i < _gic_max_irq; i += 16) + GIC_DIST_CONFIG(dist_base, i) = 0x0; + + /* Set all global interrupts to this CPU only. */ + for (i = 32; i < _gic_max_irq; i += 4) + GIC_DIST_TARGET(dist_base, i) = cpumask; + + /* Set priority on all interrupts. */ + for (i = 0; i < _gic_max_irq; i += 4) + GIC_DIST_PRI(dist_base, i) = 0xa0a0a0a0; + + /* Disable all interrupts. */ + for (i = 0; i < _gic_max_irq; i += 32) + GIC_DIST_ENABLE_CLEAR(dist_base, i) = 0xffffffff; + +#if 0 + /* All interrupts defaults to IGROUP1(IRQ). */ + for (i = 0; i < _gic_max_irq; i += 32) + GIC_DIST_IGROUP(dist_base, i) = 0xffffffff; +#endif + for (i = 0; i < _gic_max_irq; i += 32) + GIC_DIST_IGROUP(dist_base, i) = 0; + + /* Enable group0 and group1 interrupt forwarding. */ + GIC_DIST_CTRL(dist_base) = 0x01; + + return 0; +} + +int arm_gic_cpu_init(rt_uint32_t index, rt_uint32_t cpu_base) +{ + RT_ASSERT(index < ARM_GIC_MAX_NR); + + _gic_table[index].cpu_hw_base = cpu_base; + + GIC_CPU_PRIMASK(cpu_base) = 0xf0; + GIC_CPU_BINPOINT(cpu_base) = 0x7; + /* Enable CPU interrupt */ + GIC_CPU_CTRL(cpu_base) = 0x01; + + return 0; +} + +void arm_gic_set_group(rt_uint32_t index, int vector, int group) +{ + /* As for GICv2, there are only group0 and group1. */ + RT_ASSERT(group <= 1); + RT_ASSERT(vector < _gic_max_irq); + + if (group == 0) + { + GIC_DIST_IGROUP(_gic_table[index].dist_hw_base, + vector) &= ~(1 << (vector % 32)); + } + else if (group == 1) + { + GIC_DIST_IGROUP(_gic_table[index].dist_hw_base, + vector) |= (1 << (vector % 32)); + } +} + +#ifdef RT_USING_SMP +void rt_hw_ipi_send(int ipi_vector, unsigned int cpu_mask) + { + /* note: ipi_vector maybe different with irq_vector */ + GIC_DIST_SOFTINT(_gic_table[0].dist_hw_base) = (cpu_mask << 16) | ipi_vector; +} +#endif + +#ifdef RT_USING_SMP +void rt_hw_ipi_handler_install(int ipi_vector, rt_isr_handler_t ipi_isr_handler) +{ + /* note: ipi_vector maybe different with irq_vector */ + rt_hw_interrupt_install(ipi_vector, ipi_isr_handler, 0, "IPI_HANDLER"); +} +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.h new file mode 100644 index 0000000000..a16d0467fb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/gic.h @@ -0,0 +1,35 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-20 Bernard first version + */ + +#ifndef __GIC_H__ +#define __GIC_H__ + +#include +#include + +int arm_gic_dist_init(rt_uint32_t index, rt_uint32_t dist_base, int irq_start); +int arm_gic_cpu_init(rt_uint32_t index, rt_uint32_t cpu_base); + +void arm_gic_mask(rt_uint32_t index, int irq); +void arm_gic_umask(rt_uint32_t index, int irq); +void arm_gic_set_cpu(rt_uint32_t index, int irq, unsigned int cpumask); +void arm_gic_set_group(rt_uint32_t index, int vector, int group); + +int arm_gic_get_active_irq(rt_uint32_t index); +void arm_gic_ack(rt_uint32_t index, int irq); + +void arm_gic_clear_active(rt_uint32_t index, int irq); +void arm_gic_clear_pending(rt_uint32_t index, int irq); + +void arm_gic_dump_type(rt_uint32_t index); +void arm_gic_dump(rt_uint32_t index); + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.c new file mode 100644 index 0000000000..b7a70719a9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.c @@ -0,0 +1,123 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-06 Bernard first version + * 2018-11-22 Jesven add smp support + */ + +#include +#include +#include "interrupt.h" +#include "gic.h" + + +/* exception and interrupt handler table */ +struct rt_irq_desc isr_table[MAX_HANDLERS]; + +#ifndef RT_USING_SMP +/* Those varibles will be accessed in ISR, so we need to share them. */ +rt_uint32_t rt_interrupt_from_thread = 0; +rt_uint32_t rt_interrupt_to_thread = 0; +rt_uint32_t rt_thread_switch_interrupt_flag = 0; +#endif + +const unsigned int VECTOR_BASE = 0x00; +extern void rt_cpu_vector_set_base(unsigned int addr); +extern int system_vectors; + +void rt_hw_vector_init(void) +{ + rt_cpu_vector_set_base((unsigned int)&system_vectors); +} + +/** + * This function will initialize hardware interrupt + */ +void rt_hw_interrupt_init(void) +{ + rt_uint32_t gic_cpu_base; + rt_uint32_t gic_dist_base; + rt_uint32_t gic_irq_start; + + /* initialize vector table */ + rt_hw_vector_init(); + + /* initialize exceptions table */ + rt_memset(isr_table, 0x00, sizeof(isr_table)); + + /* initialize ARM GIC */ + gic_dist_base = platform_get_gic_dist_base(); + gic_cpu_base = platform_get_gic_cpu_base(); + + gic_irq_start = GIC_IRQ_START; + + arm_gic_dist_init(0, gic_dist_base, gic_irq_start); + arm_gic_cpu_init(0, gic_cpu_base); +} + +/** + * This function will mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_mask(int vector) +{ + arm_gic_mask(0, vector); +} + +/** + * This function will un-mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_umask(int vector) +{ + arm_gic_umask(0, vector); +} + +/** + * This function returns the active interrupt number. + * @param none + */ +int rt_hw_interrupt_get_irq(void) +{ + return arm_gic_get_active_irq(0) & GIC_ACK_INTID_MASK; +} + +/** + * This function acknowledges the interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_ack(int vector) +{ + arm_gic_ack(0, vector); +} +/** + * This function will install a interrupt service routine to a interrupt. + * @param vector the interrupt number + * @param new_handler the interrupt service routine to be installed + * @param old_handler the old interrupt service routine + */ +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, + void *param, const char *name) +{ + rt_isr_handler_t old_handler = RT_NULL; + + if (vector < MAX_HANDLERS) + { + old_handler = isr_table[vector].handler; + + if (handler != RT_NULL) + { +#ifdef RT_USING_INTERRUPT_INFO + rt_strncpy(isr_table[vector].name, name, RT_NAME_MAX); +#endif /* RT_USING_INTERRUPT_INFO */ + isr_table[vector].handler = handler; + isr_table[vector].param = param; + } + } + + return old_handler; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.h new file mode 100644 index 0000000000..442187edee --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/interrupt.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-06 Bernard first version + */ + +#ifndef __INTERRUPT_H__ +#define __INTERRUPT_H__ + +#include +#include + +#define INT_IRQ 0x00 +#define INT_FIQ 0x01 + +void rt_hw_vector_init(void); + +void rt_hw_interrupt_control(int vector, int priority, int route); + +void rt_hw_interrupt_init(void); +void rt_hw_interrupt_mask(int vector); +void rt_hw_interrupt_umask(int vector); + +int rt_hw_interrupt_get_irq(void); +void rt_hw_interrupt_ack(int vector); + +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, + void *param, const char *name); + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.c new file mode 100644 index 0000000000..1260f41fe5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.c @@ -0,0 +1,182 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2012-01-10 bernard porting to AM1808 + */ + +#include +#include +#include + +#include "cp15.h" +#include "mmu.h" + +/* dump 2nd level page table */ +void rt_hw_cpu_dump_page_table_2nd(rt_uint32_t *ptb) +{ + int i; + int fcnt = 0; + + for (i = 0; i < 256; i++) + { + rt_uint32_t pte2 = ptb[i]; + if ((pte2 & 0x3) == 0) + { + if (fcnt == 0) + rt_kprintf(" "); + rt_kprintf("%04x: ", i); + fcnt++; + if (fcnt == 16) + { + rt_kprintf("fault\n"); + fcnt = 0; + } + continue; + } + if (fcnt != 0) + { + rt_kprintf("fault\n"); + fcnt = 0; + } + + rt_kprintf(" %04x: %x: ", i, pte2); + if ((pte2 & 0x3) == 0x1) + { + rt_kprintf("L,ap:%x,xn:%d,texcb:%02x\n", + ((pte2 >> 7) | (pte2 >> 4))& 0xf, + (pte2 >> 15) & 0x1, + ((pte2 >> 10) | (pte2 >> 2)) & 0x1f); + } + else + { + rt_kprintf("S,ap:%x,xn:%d,texcb:%02x\n", + ((pte2 >> 7) | (pte2 >> 4))& 0xf, pte2 & 0x1, + ((pte2 >> 4) | (pte2 >> 2)) & 0x1f); + } + } +} + +void rt_hw_cpu_dump_page_table(rt_uint32_t *ptb) +{ + int i; + int fcnt = 0; + + rt_kprintf("page table@%p\n", ptb); + for (i = 0; i < 1024*4; i++) + { + rt_uint32_t pte1 = ptb[i]; + if ((pte1 & 0x3) == 0) + { + rt_kprintf("%03x: ", i); + fcnt++; + if (fcnt == 16) + { + rt_kprintf("fault\n"); + fcnt = 0; + } + continue; + } + if (fcnt != 0) + { + rt_kprintf("fault\n"); + fcnt = 0; + } + + rt_kprintf("%03x: %08x: ", i, pte1); + if ((pte1 & 0x3) == 0x3) + { + rt_kprintf("LPAE\n"); + } + else if ((pte1 & 0x3) == 0x1) + { + rt_kprintf("pte,ns:%d,domain:%d\n", + (pte1 >> 3) & 0x1, (pte1 >> 5) & 0xf); + /* + *rt_hw_cpu_dump_page_table_2nd((void*)((pte1 & 0xfffffc000) + * - 0x80000000 + 0xC0000000)); + */ + } + else if (pte1 & (1 << 18)) + { + rt_kprintf("super section,ns:%d,ap:%x,xn:%d,texcb:%02x\n", + (pte1 >> 19) & 0x1, + ((pte1 >> 13) | (pte1 >> 10))& 0xf, + (pte1 >> 4) & 0x1, + ((pte1 >> 10) | (pte1 >> 2)) & 0x1f); + } + else + { + rt_kprintf("section,ns:%d,ap:%x," + "xn:%d,texcb:%02x,domain:%d\n", + (pte1 >> 19) & 0x1, + ((pte1 >> 13) | (pte1 >> 10))& 0xf, + (pte1 >> 4) & 0x1, + (((pte1 & (0x7 << 12)) >> 10) | + ((pte1 & 0x0c) >> 2)) & 0x1f, + (pte1 >> 5) & 0xf); + } + } +} + +/* level1 page table, each entry for 1MB memory. */ +volatile static unsigned long MMUTable[4*1024] __attribute__((aligned(16*1024))); +void rt_hw_mmu_setmtt(rt_uint32_t vaddrStart, + rt_uint32_t vaddrEnd, + rt_uint32_t paddrStart, + rt_uint32_t attr) +{ + volatile rt_uint32_t *pTT; + volatile int i, nSec; + pTT = (rt_uint32_t *)MMUTable + (vaddrStart >> 20); + nSec = (vaddrEnd >> 20) - (vaddrStart >> 20); + for(i = 0; i <= nSec; i++) + { + *pTT = attr | (((paddrStart >> 20) + i) << 20); + pTT++; + } +} + +unsigned long rt_hw_set_domain_register(unsigned long domain_val) +{ + unsigned long old_domain; + + asm volatile ("mrc p15, 0, %0, c3, c0\n" : "=r" (old_domain)); + asm volatile ("mcr p15, 0, %0, c3, c0\n" : :"r" (domain_val) : "memory"); + + return old_domain; +} + +void rt_hw_init_mmu_table(struct mem_desc *mdesc, rt_uint32_t size) +{ + /* set page table */ + for(; size > 0; size--) + { + rt_hw_mmu_setmtt(mdesc->vaddr_start, mdesc->vaddr_end, + mdesc->paddr_start, mdesc->attr); + mdesc++; + } +} + +void rt_hw_mmu_init(void) +{ + rt_cpu_dcache_clean_flush(); + rt_cpu_icache_flush(); + rt_hw_cpu_dcache_disable(); + rt_hw_cpu_icache_disable(); + rt_cpu_mmu_disable(); + + /*rt_hw_cpu_dump_page_table(MMUTable);*/ + rt_hw_set_domain_register(0x55555555); + + rt_cpu_tlb_set(MMUTable); + + rt_cpu_mmu_enable(); + + rt_hw_cpu_icache_enable(); + rt_hw_cpu_dcache_enable(); +} + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.h new file mode 100644 index 0000000000..fbce6df935 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/mmu.h @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2019-03-25 quanzhao the first version + */ +#ifndef __MMU_H_ +#define __MMU_H_ + +#include + +#define DESC_SEC (0x2) +#define MEMWBWA ((1<<12)|(3<<2)) /* write back, write allocate */ +#define MEMWB (3<<2) /* write back, no write allocate */ +#define MEMWT (2<<2) /* write through, no write allocate */ +#define SHAREDEVICE (1<<2) /* shared device */ +#define STRONGORDER (0<<2) /* strong ordered */ +#define XN (1<<4) /* eXecute Never */ +#define AP_RW (3<<10) /* supervisor=RW, user=RW */ +#define AP_RO (2<<10) /* supervisor=RW, user=RO */ +#define SHARED (1<<16) /* shareable */ + +#define DOMAIN_FAULT (0x0) +#define DOMAIN_CHK (0x1) +#define DOMAIN_NOTCHK (0x3) +#define DOMAIN0 (0x0<<5) +#define DOMAIN1 (0x1<<5) + +#define DOMAIN0_ATTR (DOMAIN_CHK<<0) +#define DOMAIN1_ATTR (DOMAIN_FAULT<<2) + +/* device mapping type */ +#define DEVICE_MEM (SHARED|AP_RW|DOMAIN0|SHAREDEVICE|DESC_SEC|XN) +/* normal memory mapping type */ +#define NORMAL_MEM (SHARED|AP_RW|DOMAIN0|MEMWBWA|DESC_SEC) + +struct mem_desc +{ + rt_uint32_t vaddr_start; + rt_uint32_t vaddr_end; + rt_uint32_t paddr_start; + rt_uint32_t attr; +}; + + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.c new file mode 100644 index 0000000000..8ffc1dede6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.c @@ -0,0 +1,20 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#include +#include "pmu.h" + +void rt_hw_pmu_dump_feature(void) +{ + unsigned long reg; + + reg = rt_hw_pmu_get_control(); + rt_kprintf("ARM PMU Implementor: %c, ID code: %02x, %d counters\n", + reg >> 24, (reg >> 16) & 0xff, (reg >> 11) & 0x1f); + RT_ASSERT(ARM_PMU_CNTER_NR == ((reg >> 11) & 0x1f)); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.h new file mode 100644 index 0000000000..fb8390133d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/pmu.h @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#ifndef __PMU_H__ +#define __PMU_H__ + +#include "board.h" + +/* Number of counters */ +#define ARM_PMU_CNTER_NR 4 + +enum rt_hw_pmu_event_type { + ARM_PMU_EVENT_PMNC_SW_INCR = 0x00, + ARM_PMU_EVENT_L1_ICACHE_REFILL = 0x01, + ARM_PMU_EVENT_ITLB_REFILL = 0x02, + ARM_PMU_EVENT_L1_DCACHE_REFILL = 0x03, + ARM_PMU_EVENT_L1_DCACHE_ACCESS = 0x04, + ARM_PMU_EVENT_DTLB_REFILL = 0x05, + ARM_PMU_EVENT_MEM_READ = 0x06, + ARM_PMU_EVENT_MEM_WRITE = 0x07, + ARM_PMU_EVENT_INSTR_EXECUTED = 0x08, + ARM_PMU_EVENT_EXC_TAKEN = 0x09, + ARM_PMU_EVENT_EXC_EXECUTED = 0x0A, + ARM_PMU_EVENT_CID_WRITE = 0x0B, +}; + +/* Enable bit */ +#define ARM_PMU_PMCR_E (0x01 << 0) +/* Event counter reset */ +#define ARM_PMU_PMCR_P (0x01 << 1) +/* Cycle counter reset */ +#define ARM_PMU_PMCR_C (0x01 << 2) +/* Cycle counter divider */ +#define ARM_PMU_PMCR_D (0x01 << 3) + +#ifdef __GNUC__ +rt_inline void rt_hw_pmu_enable_cnt(int divide64) +{ + unsigned long pmcr; + unsigned long pmcntenset; + + asm volatile ("mrc p15, 0, %0, c9, c12, 0" : "=r"(pmcr)); + pmcr |= ARM_PMU_PMCR_E | ARM_PMU_PMCR_P | ARM_PMU_PMCR_C; + if (divide64) + pmcr |= ARM_PMU_PMCR_D; + else + pmcr &= ~ARM_PMU_PMCR_D; + asm volatile ("mcr p15, 0, %0, c9, c12, 0" :: "r"(pmcr)); + + /* enable all the counters */ + pmcntenset = ~0; + asm volatile ("mcr p15, 0, %0, c9, c12, 1" :: "r"(pmcntenset)); + /* clear overflows(just in case) */ + asm volatile ("mcr p15, 0, %0, c9, c12, 3" :: "r"(pmcntenset)); +} + +rt_inline unsigned long rt_hw_pmu_get_control(void) +{ + unsigned long pmcr; + asm ("mrc p15, 0, %0, c9, c12, 0" : "=r"(pmcr)); + return pmcr; +} + +rt_inline unsigned long rt_hw_pmu_get_ceid(void) +{ + unsigned long reg; + /* only PMCEID0 is supported, PMCEID1 is RAZ. */ + asm ("mrc p15, 0, %0, c9, c12, 6" : "=r"(reg)); + return reg; +} + +rt_inline unsigned long rt_hw_pmu_get_cnten(void) +{ + unsigned long pmcnt; + asm ("mrc p15, 0, %0, c9, c12, 1" : "=r"(pmcnt)); + return pmcnt; +} + +rt_inline void rt_hw_pmu_reset_cycle(void) +{ + unsigned long pmcr; + + asm volatile ("mrc p15, 0, %0, c9, c12, 0" : "=r"(pmcr)); + pmcr |= ARM_PMU_PMCR_C; + asm volatile ("mcr p15, 0, %0, c9, c12, 0" :: "r"(pmcr)); + asm volatile ("isb"); +} + +rt_inline void rt_hw_pmu_reset_event(void) +{ + unsigned long pmcr; + + asm volatile ("mrc p15, 0, %0, c9, c12, 0" : "=r"(pmcr)); + pmcr |= ARM_PMU_PMCR_P; + asm volatile ("mcr p15, 0, %0, c9, c12, 0" :: "r"(pmcr)); + asm volatile ("isb"); +} + +rt_inline unsigned long rt_hw_pmu_get_cycle(void) +{ + unsigned long cyc; + asm volatile ("isb"); + asm volatile ("mrc p15, 0, %0, c9, c13, 0" : "=r"(cyc)); + return cyc; +} + +rt_inline void rt_hw_pmu_select_counter(int idx) +{ + RT_ASSERT(idx < ARM_PMU_CNTER_NR); + + asm volatile ("mcr p15, 0, %0, c9, c12, 5" : : "r"(idx)); + /* Linux add an isb here, don't know why here. */ + asm volatile ("isb"); +} + +rt_inline void rt_hw_pmu_select_event(int idx, + enum rt_hw_pmu_event_type eve) +{ + RT_ASSERT(idx < ARM_PMU_CNTER_NR); + + rt_hw_pmu_select_counter(idx); + asm volatile ("mcr p15, 0, %0, c9, c13, 1" : : "r"(eve)); +} + +rt_inline unsigned long rt_hw_pmu_read_counter(int idx) +{ + unsigned long reg; + + rt_hw_pmu_select_counter(idx); + asm volatile ("isb"); + asm volatile ("mrc p15, 0, %0, c9, c13, 2" : "=r"(reg)); + return reg; +} + +rt_inline unsigned long rt_hw_pmu_get_ovsr(void) +{ + unsigned long reg; + asm volatile ("isb"); + asm ("mrc p15, 0, %0, c9, c12, 3" : "=r"(reg)); + return reg; +} + +rt_inline void rt_hw_pmu_clear_ovsr(unsigned long reg) +{ + asm ("mcr p15, 0, %0, c9, c12, 3" : : "r"(reg)); + asm volatile ("isb"); +} + +#endif + +void rt_hw_pmu_dump_feature(void); + +#endif /* end of include guard: __PMU_H__ */ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/stack.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/stack.c new file mode 100644 index 0000000000..d76b8a428a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/stack.c @@ -0,0 +1,68 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-09-23 Bernard the first version + * 2011-10-05 Bernard add thumb mode + */ +#include +#include +#include + +/** + * @addtogroup AM33xx + */ +/*@{*/ + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + rt_uint32_t *stk; + + stack_addr += sizeof(rt_uint32_t); + stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); + stk = (rt_uint32_t *)stack_addr; + *(--stk) = (rt_uint32_t)tentry; /* entry point */ + *(--stk) = (rt_uint32_t)texit; /* lr */ + *(--stk) = 0xdeadbeef; /* r12 */ + *(--stk) = 0xdeadbeef; /* r11 */ + *(--stk) = 0xdeadbeef; /* r10 */ + *(--stk) = 0xdeadbeef; /* r9 */ + *(--stk) = 0xdeadbeef; /* r8 */ + *(--stk) = 0xdeadbeef; /* r7 */ + *(--stk) = 0xdeadbeef; /* r6 */ + *(--stk) = 0xdeadbeef; /* r5 */ + *(--stk) = 0xdeadbeef; /* r4 */ + *(--stk) = 0xdeadbeef; /* r3 */ + *(--stk) = 0xdeadbeef; /* r2 */ + *(--stk) = 0xdeadbeef; /* r1 */ + *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ + /* cpsr */ + if ((rt_uint32_t)tentry & 0x01) + *(--stk) = SVCMODE | 0x20; /* thumb mode */ + else + *(--stk) = SVCMODE; /* arm mode */ + +#ifdef RT_USING_LWP + *(--stk) = 0; /* user lr */ + *(--stk) = 0; /* user sp*/ +#endif + + /* return task's current stack address */ + return (rt_uint8_t *)stk; +} + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/start_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/start_gcc.S new file mode 100644 index 0000000000..014846f3aa --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/start_gcc.S @@ -0,0 +1,351 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-05 Bernard the first version + * 2018-11-22 Jesven in the interrupt context, use rt_scheduler_do_irq_switch checks + * and switches to a new thread + */ + +#include "rtconfig.h" +.equ Mode_USR, 0x10 +.equ Mode_FIQ, 0x11 +.equ Mode_IRQ, 0x12 +.equ Mode_SVC, 0x13 +.equ Mode_ABT, 0x17 +.equ Mode_UND, 0x1B +.equ Mode_SYS, 0x1F + +.equ I_Bit, 0x80 @ when I bit is set, IRQ is disabled +.equ F_Bit, 0x40 @ when F bit is set, FIQ is disabled + +.equ UND_Stack_Size, 0x00000000 +.equ SVC_Stack_Size, 0x00000400 +.equ ABT_Stack_Size, 0x00000000 +.equ RT_FIQ_STACK_PGSZ, 0x00000000 +.equ RT_IRQ_STACK_PGSZ, 0x00000800 +.equ USR_Stack_Size, 0x00000400 + +#define ISR_Stack_Size (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + \ + RT_FIQ_STACK_PGSZ + RT_IRQ_STACK_PGSZ) + +.section .data.share.isr +/* stack */ +.globl stack_start +.globl stack_top + +stack_start: +.rept ISR_Stack_Size +.byte 0 +.endr +stack_top: + +.text +/* reset entry */ +.globl _reset +_reset: + /* set the cpu to SVC32 mode and disable interrupt */ + cps #Mode_SVC + + /* disable the data alignment check */ + mrc p15, 0, r1, c1, c0, 0 + bic r1, #(1<<1) + mcr p15, 0, r1, c1, c0, 0 + + /* setup stack */ + bl stack_setup + + /* clear .bss */ + mov r0,#0 /* get a zero */ + ldr r1,=__bss_start /* bss start */ + ldr r2,=__bss_end /* bss end */ + +bss_loop: + cmp r1,r2 /* check if data to clear */ + strlo r0,[r1],#4 /* clear 4 bytes */ + blo bss_loop /* loop until done */ + +#ifdef RT_USING_SMP + mrc p15, 0, r1, c1, c0, 1 + mov r0, #(1<<6) + orr r1, r0 + mcr p15, 0, r1, c1, c0, 1 //enable smp +#endif + + /* initialize the mmu table and enable mmu */ + ldr r0, =platform_mem_desc + ldr r1, =platform_mem_desc_size + ldr r1, [r1] + bl rt_hw_init_mmu_table + bl rt_hw_mmu_init + + /* call C++ constructors of global objects */ + ldr r0, =__ctors_start__ + ldr r1, =__ctors_end__ + +ctor_loop: + cmp r0, r1 + beq ctor_end + ldr r2, [r0], #4 + stmfd sp!, {r0-r1} + mov lr, pc + bx r2 + ldmfd sp!, {r0-r1} + b ctor_loop +ctor_end: + + /* start RT-Thread Kernel */ + ldr pc, _rtthread_startup +_rtthread_startup: + .word rtthread_startup + +stack_setup: + ldr r0, =stack_top + + @ Set the startup stack for svc + mov sp, r0 + + @ Enter Undefined Instruction Mode and set its Stack Pointer + msr cpsr_c, #Mode_UND|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #UND_Stack_Size + + @ Enter Abort Mode and set its Stack Pointer + msr cpsr_c, #Mode_ABT|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #ABT_Stack_Size + + @ Enter FIQ Mode and set its Stack Pointer + msr cpsr_c, #Mode_FIQ|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #RT_FIQ_STACK_PGSZ + + @ Enter IRQ Mode and set its Stack Pointer + msr cpsr_c, #Mode_IRQ|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #RT_IRQ_STACK_PGSZ + + /* come back to SVC mode */ + msr cpsr_c, #Mode_SVC|I_Bit|F_Bit + bx lr + +/* exception handlers: undef, swi, padt, dabt, resv, irq, fiq */ +.section .text.isr, "ax" + .align 5 +.globl vector_fiq +vector_fiq: + stmfd sp!,{r0-r7,lr} + bl rt_hw_trap_fiq + ldmfd sp!,{r0-r7,lr} + subs pc, lr, #4 + +.globl rt_interrupt_enter +.globl rt_interrupt_leave +.globl rt_thread_switch_interrupt_flag +.globl rt_interrupt_from_thread +.globl rt_interrupt_to_thread + +.globl rt_current_thread +.globl vmm_thread +.globl vmm_virq_check + + .align 5 +.globl vector_irq +vector_irq: +#ifdef RT_USING_SMP + clrex + + stmfd sp!, {r0, r1} + cps #Mode_SVC + mov r0, sp /* svc_sp */ + mov r1, lr /* svc_lr */ + + cps #Mode_IRQ + sub lr, #4 + stmfd r0!, {r1, lr} /* svc_lr, svc_pc */ + stmfd r0!, {r2 - r12} + ldmfd sp!, {r1, r2} /* original r0, r1 */ + stmfd r0!, {r1 - r2} + mrs r1, spsr /* original mode */ + stmfd r0!, {r1} + +#ifdef RT_USING_LWP + stmfd r0, {r13, r14}^ /* usr_sp, usr_lr */ + sub r0, #8 +#endif + /* now irq stack is clean */ + /* r0 is task svc_sp */ + /* backup r0 -> r8 */ + mov r8, r0 + + bl rt_interrupt_enter + bl rt_hw_trap_irq + bl rt_interrupt_leave + + cps #Mode_SVC + mov sp, r8 + mov r0, r8 + bl rt_scheduler_do_irq_switch + + b rt_hw_context_switch_exit + +#else + stmfd sp!, {r0-r12,lr} + + bl rt_interrupt_enter + bl rt_hw_trap_irq + bl rt_interrupt_leave + + @ if rt_thread_switch_interrupt_flag set, jump to + @ rt_hw_context_switch_interrupt_do and don't return + ldr r0, =rt_thread_switch_interrupt_flag + ldr r1, [r0] + cmp r1, #1 + beq rt_hw_context_switch_interrupt_do + + ldmfd sp!, {r0-r12,lr} + subs pc, lr, #4 + +rt_hw_context_switch_interrupt_do: + mov r1, #0 @ clear flag + str r1, [r0] + + mov r1, sp @ r1 point to {r0-r3} in stack + add sp, sp, #4*4 + ldmfd sp!, {r4-r12,lr}@ reload saved registers + mrs r0, spsr @ get cpsr of interrupt thread + sub r2, lr, #4 @ save old task's pc to r2 + + @ Switch to SVC mode with no interrupt. If the usr mode guest is + @ interrupted, this will just switch to the stack of kernel space. + @ save the registers in kernel space won't trigger data abort. + msr cpsr_c, #I_Bit|F_Bit|Mode_SVC + + stmfd sp!, {r2} @ push old task's pc + stmfd sp!, {r4-r12,lr}@ push old task's lr,r12-r4 + ldmfd r1, {r1-r4} @ restore r0-r3 of the interrupt thread + stmfd sp!, {r1-r4} @ push old task's r0-r3 + stmfd sp!, {r0} @ push old task's cpsr + +#ifdef RT_USING_LWP + stmfd sp, {r13, r14}^ @push usr_sp, usr_lr + sub sp, #8 +#endif + + ldr r4, =rt_interrupt_from_thread + ldr r5, [r4] + str sp, [r5] @ store sp in preempted tasks's TCB + + ldr r6, =rt_interrupt_to_thread + ldr r6, [r6] + ldr sp, [r6] @ get new task's stack pointer + +#ifdef RT_USING_LWP + ldmfd sp, {r13, r14}^ @pop usr_sp, usr_lr + add sp, #8 +#endif + + ldmfd sp!, {r4} @ pop new task's cpsr to spsr + msr spsr_cxsf, r4 + + ldmfd sp!, {r0-r12,lr,pc}^ @ pop new task's r0-r12,lr & pc, copy spsr to cpsr + +#endif + +.macro push_svc_reg + sub sp, sp, #17 * 4 @/* Sizeof(struct rt_hw_exp_stack) */ + stmia sp, {r0 - r12} @/* Calling r0-r12 */ + mov r0, sp + mrs r6, spsr @/* Save CPSR */ + str lr, [r0, #15*4] @/* Push PC */ + str r6, [r0, #16*4] @/* Push CPSR */ + cps #Mode_SVC + str sp, [r0, #13*4] @/* Save calling SP */ + str lr, [r0, #14*4] @/* Save calling PC */ +.endm + + .align 5 +.weak vector_swi +vector_swi: + push_svc_reg + bl rt_hw_trap_swi + b . + + .align 5 + .globl vector_undef +vector_undef: + push_svc_reg + bl rt_hw_trap_undef + b . + + .align 5 + .globl vector_pabt +vector_pabt: + push_svc_reg + bl rt_hw_trap_pabt + b . + + .align 5 + .globl vector_dabt +vector_dabt: + push_svc_reg + bl rt_hw_trap_dabt + b . + + .align 5 + .globl vector_resv +vector_resv: + push_svc_reg + bl rt_hw_trap_resv + b . + +#ifdef RT_USING_SMP +.global set_secondary_cpu_boot_address +set_secondary_cpu_boot_address: + ldr r0, =secondary_cpu_start + + mvn r1, #0 //0xffffffff + ldr r2, =0x10000034 + str r1, [r2] + str r0, [r2, #-4] + mov pc, lr + +.global secondary_cpu_start +secondary_cpu_start: + mrc p15, 0, r1, c1, c0, 1 + mov r0, #(1<<6) + orr r1, r0 + mcr p15, 0, r1, c1, c0, 1 //enable smp + + mrc p15, 0, r0, c1, c0, 0 + bic r0, #(1<<13) + mcr p15, 0, r0, c1, c0, 0 + + cps #Mode_IRQ + ldr sp, =irq_stack_2_limit + + cps #Mode_FIQ + ldr sp, =irq_stack_2_limit + + cps #Mode_SVC + ldr sp, =svc_stack_2_limit + + /* initialize the mmu table and enable mmu */ + bl rt_hw_mmu_init + + b secondary_cpu_c_start +#endif + +.bss +.align 2 //align to 2~2=4 +svc_stack_2: + .space (1 << 10) +svc_stack_2_limit: + +irq_stack_2: + .space (1 << 10) +irq_stack_2_limit: + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/trap.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/trap.c new file mode 100644 index 0000000000..a25f6ac862 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/trap.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-20 Bernard first version + */ + +#include +#include +#include + +#include "armv7.h" +#include "interrupt.h" + +#ifdef RT_USING_FINSH +extern long list_thread(void); +#endif + +/** + * this function will show registers of CPU + * + * @param regs the registers point + */ +void rt_hw_show_register(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("Execption:\n"); + rt_kprintf("r00:0x%08x r01:0x%08x r02:0x%08x r03:0x%08x\n", regs->r0, regs->r1, regs->r2, regs->r3); + rt_kprintf("r04:0x%08x r05:0x%08x r06:0x%08x r07:0x%08x\n", regs->r4, regs->r5, regs->r6, regs->r7); + rt_kprintf("r08:0x%08x r09:0x%08x r10:0x%08x\n", regs->r8, regs->r9, regs->r10); + rt_kprintf("fp :0x%08x ip :0x%08x\n", regs->fp, regs->ip); + rt_kprintf("sp :0x%08x lr :0x%08x pc :0x%08x\n", regs->sp, regs->lr, regs->pc); + rt_kprintf("cpsr:0x%08x\n", regs->cpsr); +} + +/** + * When comes across an instruction which it cannot handle, + * it takes the undefined instruction trap. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_undef(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("undefined instruction:\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * The software interrupt instruction (SWI) is used for entering + * Supervisor mode, usually to request a particular supervisor + * function. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_swi(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("software interrupt:\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during an instruction prefetch. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_pabt(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("prefetch abort:\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during a data access. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_dabt(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("data abort:"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * Normally, system will never reach here + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_resv(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("reserved trap:\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +void rt_hw_trap_irq(void) +{ + void *param; + int ir; + rt_isr_handler_t isr_func; + extern struct rt_irq_desc isr_table[]; + + ir = rt_hw_interrupt_get_irq(); + + if (ir == 1023) + { + /* Spurious interrupt */ + return; + } + + /* get interrupt service routine */ + isr_func = isr_table[ir].handler; +#ifdef RT_USING_INTERRUPT_INFO + isr_table[ir].counter++; +#endif + if (isr_func) + { + /* Interrupt for myself. */ + param = isr_table[ir].param; + /* turn to interrupt service routine */ + isr_func(ir, param); + } + + /* end of interrupt */ + rt_hw_interrupt_ack(ir); +} + +void rt_hw_trap_fiq(void) +{ + void *param; + int ir; + rt_isr_handler_t isr_func; + extern struct rt_irq_desc isr_table[]; + + ir = rt_hw_interrupt_get_irq(); + + /* get interrupt service routine */ + isr_func = isr_table[ir].handler; + param = isr_table[ir].param; + + /* turn to interrupt service routine */ + isr_func(ir, param); + + /* end of interrupt */ + rt_hw_interrupt_ack(ir); +} + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/vector_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/vector_gcc.S new file mode 100644 index 0000000000..60d3c6cf1d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-a/vector_gcc.S @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2013-07-05 Bernard the first version + */ + +.section .vectors, "ax" +.code 32 + +.globl system_vectors +system_vectors: + ldr pc, _vector_reset + ldr pc, _vector_undef + ldr pc, _vector_swi + ldr pc, _vector_pabt + ldr pc, _vector_dabt + ldr pc, _vector_resv + ldr pc, _vector_irq + ldr pc, _vector_fiq + +.globl _reset +.globl vector_undef +.globl vector_swi +.globl vector_pabt +.globl vector_dabt +.globl vector_resv +.globl vector_irq +.globl vector_fiq + +_vector_reset: + .word _reset +_vector_undef: + .word vector_undef +_vector_swi: + .word vector_swi +_vector_pabt: + .word vector_pabt +_vector_dabt: + .word vector_dabt +_vector_resv: + .word vector_resv +_vector_irq: + .word vector_irq +_vector_fiq: + .word vector_fiq + +.balignl 16,0xdeadbeef diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_gcc.S new file mode 100644 index 0000000000..d9993247e2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_gcc.S @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2010-01-25 Bernard first version + * 2012-06-01 aozima set pendsv priority to 0xFF. + * 2012-08-17 aozima fixed bug: store r8 - r11. + * 2013-02-20 aozima port to gcc. + * 2013-06-18 aozima add restore MSP feature. + * 2013-11-04 bright fixed hardfault bug for gcc. + */ + + .cpu cortex-m0 + .fpu softvfp + .syntax unified + .thumb + .text + + .equ SCB_VTOR, 0xE000ED08 /* Vector Table Offset Register */ + .equ NVIC_INT_CTRL, 0xE000ED04 /* interrupt control state register */ + .equ NVIC_SHPR3, 0xE000ED20 /* system priority register (3) */ + .equ NVIC_PENDSV_PRI, 0x00FF0000 /* PendSV priority value (lowest) */ + .equ NVIC_PENDSVSET, 0x10000000 /* value to trigger PendSV exception */ + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ + .global rt_hw_interrupt_disable + .type rt_hw_interrupt_disable, %function +rt_hw_interrupt_disable: + MRS R0, PRIMASK + CPSID I + BX LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .global rt_hw_interrupt_enable + .type rt_hw_interrupt_enable, %function +rt_hw_interrupt_enable: + MSR PRIMASK, R0 + BX LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * R0 --> from + * R1 --> to + */ + .global rt_hw_context_switch_interrupt + .type rt_hw_context_switch_interrupt, %function + .global rt_hw_context_switch + .type rt_hw_context_switch, %function +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + /* set rt_thread_switch_interrupt_flag to 1 */ + LDR R2, =rt_thread_switch_interrupt_flag + LDR R3, [R2] + CMP R3, #1 + BEQ _reswitch + MOVS R3, #1 + STR R3, [R2] + + LDR R2, =rt_interrupt_from_thread /* set rt_interrupt_from_thread */ + STR R0, [R2] + +_reswitch: + LDR R2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ + STR R1, [R2] + + LDR R0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR R1, =NVIC_PENDSVSET + STR R1, [R0] + BX LR + +/* R0 --> switch from thread stack + * R1 --> switch to thread stack + * psr, pc, LR, R12, R3, R2, R1, R0 are pushed into [from] stack + */ + .global PendSV_Handler + .type PendSV_Handler, %function +PendSV_Handler: + /* disable interrupt to protect context switch */ + MRS R2, PRIMASK + CPSID I + + /* get rt_thread_switch_interrupt_flag */ + LDR R0, =rt_thread_switch_interrupt_flag + LDR R1, [R0] + CMP R1, #0x00 + BEQ pendsv_exit /* pendsv aLReady handled */ + + /* clear rt_thread_switch_interrupt_flag to 0 */ + MOVS R1, #0 + STR R1, [R0] + + LDR R0, =rt_interrupt_from_thread + LDR R1, [R0] + CMP R1, #0x00 + BEQ switch_to_thread /* skip register save at the first time */ + + MRS R1, PSP /* get from thread stack pointer */ + + SUBS R1, R1, #0x20 /* space for {R4 - R7} and {R8 - R11} */ + LDR R0, [R0] + STR R1, [R0] /* update from thread stack pointer */ + + STMIA R1!, {R4 - R7} /* push thread {R4 - R7} register to thread stack */ + + MOV R4, R8 /* mov thread {R8 - R11} to {R4 - R7} */ + MOV R5, R9 + MOV R6, R10 + MOV R7, R11 + STMIA R1!, {R4 - R7} /* push thread {R8 - R11} high register to thread stack */ +switch_to_thread: + LDR R1, =rt_interrupt_to_thread + LDR R1, [R1] + LDR R1, [R1] /* load thread stack pointer */ + + LDMIA R1!, {R4 - R7} /* pop thread {R4 - R7} register from thread stack */ + PUSH {R4 - R7} /* push {R4 - R7} to MSP for copy {R8 - R11} */ + + LDMIA R1!, {R4 - R7} /* pop thread {R8 - R11} high register from thread stack to {R4 - R7} */ + MOV R8, R4 /* mov {R4 - R7} to {R8 - R11} */ + MOV R9, R5 + MOV R10, R6 + MOV R11, R7 + + POP {R4 - R7} /* pop {R4 - R7} from MSP */ + + MSR PSP, R1 /* update stack pointer */ + +pendsv_exit: + /* restore interrupt */ + MSR PRIMASK, R2 + + MOVS R0, #0x04 + RSBS R0, R0, #0x00 + BX R0 +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * R0 --> to + */ + .global rt_hw_context_switch_to + .type rt_hw_context_switch_to, %function +rt_hw_context_switch_to: + LDR R1, =rt_interrupt_to_thread + STR R0, [R1] + + /* set from thread to 0 */ + LDR R1, =rt_interrupt_from_thread + MOVS R0, #0 + STR R0, [R1] + + /* set interrupt flag to 1 */ + LDR R1, =rt_thread_switch_interrupt_flag + MOVS R0, #1 + STR R0, [R1] + + /* set the PendSV exception priority */ + LDR R0, =NVIC_SHPR3 + LDR R1, =NVIC_PENDSV_PRI + LDR R2, [R0,#0x00] /* read */ + ORRS R1, R1, R2 /* modify */ + STR R1, [R0] /* write-back */ + + LDR R0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR R1, =NVIC_PENDSVSET + STR R1, [R0] + NOP + /* restore MSP */ + LDR R0, =SCB_VTOR + LDR R0, [R0] + LDR R0, [R0] + NOP + MSR MSP, R0 + + /* enable interrupts at processor level */ + CPSIE I + + /* never reach here! */ + +/* compatible with old version */ + .global rt_hw_interrupt_thread_switch + .type rt_hw_interrupt_thread_switch, %function +rt_hw_interrupt_thread_switch: + BX LR + NOP + + .global HardFault_Handler + .type HardFault_Handler, %function +HardFault_Handler: + /* get current context */ + MRS R0, PSP /* get fault thread stack pointer */ + PUSH {LR} + BL rt_hw_hard_fault_exception + POP {PC} + + +/* + * rt_uint32_t rt_hw_interrupt_check(void); + * R0 --> state + */ + .global rt_hw_interrupt_check + .type rt_hw_interrupt_check, %function +rt_hw_interrupt_check: + MRS R0, IPSR + BX LR diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_iar.S new file mode 100644 index 0000000000..50d3781359 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_iar.S @@ -0,0 +1,206 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2010-01-25 Bernard first version +; * 2012-06-01 aozima set pendsv priority to 0xFF. +; * 2012-08-17 aozima fixed bug: store r8 - r11. +; * 2013-06-18 aozima add restore MSP feature. +; */ + +;/** +; * @addtogroup CORTEX-M0 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SHPR3 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + SECTION .text:CODE(2) + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + EXPORT rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + EXPORT rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ + EXPORT rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOVS r3, #0x1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + EXPORT PendSV_Handler +PendSV_Handler: + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CMP r1, #0x00 + BEQ pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOVS r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CMP r1, #0x00 + BEQ switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + + SUBS r1, r1, #0x20 ; space for {r4 - r7} and {r8 - r11} + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + + STMIA r1!, {r4 - r7} ; push thread {r4 - r7} register to thread stack + + MOV r4, r8 ; mov thread {r8 - r11} to {r4 - r7} + MOV r5, r9 + MOV r6, r10 + MOV r7, r11 + STMIA r1!, {r4 - r7} ; push thread {r8 - r11} high register to thread stack + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + LDMIA r1!, {r4 - r7} ; pop thread {r4 - r7} register from thread stack + PUSH {r4 - r7} ; push {r4 - r7} to MSP for copy {r8 - r11} + + LDMIA r1!, {r4 - r7} ; pop thread {r8 - r11} high register from thread stack to {r4 - r7} + MOV r8, r4 ; mov {r4 - r7} to {r8 - r11} + MOV r9, r5 + MOV r10, r6 + MOV r11, r7 + + POP {r4 - r7} ; pop {r4 - r7} from MSP + + MSR psp, r1 ; update stack pointer + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + MOVS r0, #0x04 + RSBS r0, r0, #0x00 + BX r0 + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; * this fucntion is used to perform the first thread switch +; */ + EXPORT rt_hw_context_switch_to +rt_hw_context_switch_to: + ; set to thread + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOVS r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOVS r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SHPR3 + LDR r1, =NVIC_PENDSV_PRI + LDR r2, [r0,#0x00] ; read + ORRS r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + ; trigger the PendSV exception (causes context switch) + LDR r0, =NVIC_INT_CTRL + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + NOP + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE I + + ; never reach here! + +; compatible with old version + EXPORT rt_hw_interrupt_thread_switch +rt_hw_interrupt_thread_switch: + BX lr + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler: + + ; get current context + MRS r0, psp ; get fault thread stack pointer + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {pc} + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_rvds.S new file mode 100644 index 0000000000..fb9ce9b4bf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/context_rvds.S @@ -0,0 +1,215 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2010-01-25 Bernard first version +; * 2012-06-01 aozima set pendsv priority to 0xFF. +; * 2012-08-17 aozima fixed bug: store r8 - r11. +; * 2013-06-18 aozima add restore MSP feature. +; */ + +;/** +; * @addtogroup CORTEX-M0 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SHPR3 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + AREA |.text|, CODE, READONLY, ALIGN=2 + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ +rt_hw_interrupt_disable PROC + EXPORT rt_hw_interrupt_disable + MRS r0, PRIMASK + CPSID I + BX LR + ENDP + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ +rt_hw_interrupt_enable PROC + EXPORT rt_hw_interrupt_enable + MSR PRIMASK, r0 + BX LR + ENDP + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ +rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch_interrupt +rt_hw_context_switch PROC + EXPORT rt_hw_context_switch + + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOVS r3, #0x01 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + ENDP + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack +PendSV_Handler PROC + EXPORT PendSV_Handler + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CMP r1, #0x00 + BEQ pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOVS r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CMP r1, #0x00 + BEQ switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + + SUBS r1, r1, #0x20 ; space for {r4 - r7} and {r8 - r11} + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + + STMIA r1!, {r4 - r7} ; push thread {r4 - r7} register to thread stack + + MOV r4, r8 ; mov thread {r8 - r11} to {r4 - r7} + MOV r5, r9 + MOV r6, r10 + MOV r7, r11 + STMIA r1!, {r4 - r7} ; push thread {r8 - r11} high register to thread stack + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + LDMIA r1!, {r4 - r7} ; pop thread {r4 - r7} register from thread stack + PUSH {r4 - r7} ; push {r4 - r7} to MSP for copy {r8 - r11} + + LDMIA r1!, {r4 - r7} ; pop thread {r8 - r11} high register from thread stack to {r4 - r7} + MOV r8, r4 ; mov {r4 - r7} to {r8 - r11} + MOV r9, r5 + MOV r10, r6 + MOV r11, r7 + + POP {r4 - r7} ; pop {r4 - r7} from MSP + + MSR psp, r1 ; update stack pointer + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + MOVS r0, #0x04 + RSBS r0, r0, #0x00 + BX r0 + ENDP + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; * this fucntion is used to perform the first thread switch +; */ +rt_hw_context_switch_to PROC + EXPORT rt_hw_context_switch_to + ; set to thread + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOVS r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOVS r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SHPR3 + LDR r1, =NVIC_PENDSV_PRI + LDR r2, [r0,#0x00] ; read + ORRS r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + ; trigger the PendSV exception (causes context switch) + LDR r0, =NVIC_INT_CTRL + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE I + + ; never reach here! + ENDP + +; compatible with old version +rt_hw_interrupt_thread_switch PROC + EXPORT rt_hw_interrupt_thread_switch + BX lr + ENDP + + IMPORT rt_hw_hard_fault_exception + +HardFault_Handler PROC + EXPORT HardFault_Handler + + ; get current context + MRS r0, psp ; get fault thread stack pointer + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {pc} + ENDP + + ALIGN 4 + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/cpuport.c new file mode 100644 index 0000000000..5d36fa11fe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m0/cpuport.c @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2010-01-25 Bernard first version + * 2012-05-31 aozima Merge all of the C source code into cpuport.c + * 2012-08-17 aozima fixed bug: store r8 - r11. + * 2012-12-23 aozima stack addr align to 8byte. + */ + +#include + +struct exception_stack_frame +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; +}; + +struct stack_frame +{ + /* r4 ~ r7 low register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + + /* r8 ~ r11 high register */ + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + + struct exception_stack_frame exception_stack_frame; +}; + +/* flag in interrupt handling */ +rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct stack_frame *stack_frame; + rt_uint8_t *stk; + unsigned long i; + + stk = stack_addr + sizeof(rt_uint32_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8); + stk -= sizeof(struct stack_frame); + + stack_frame = (struct stack_frame *)stk; + + /* init all register */ + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) + { + ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->exception_stack_frame.r0 = (unsigned long)parameter; /* r0 : argument */ + stack_frame->exception_stack_frame.r1 = 0; /* r1 */ + stack_frame->exception_stack_frame.r2 = 0; /* r2 */ + stack_frame->exception_stack_frame.r3 = 0; /* r3 */ + stack_frame->exception_stack_frame.r12 = 0; /* r12 */ + stack_frame->exception_stack_frame.lr = (unsigned long)texit; /* lr */ + stack_frame->exception_stack_frame.pc = (unsigned long)tentry; /* entry point, pc */ + stack_frame->exception_stack_frame.psr = 0x01000000L; /* PSR */ + + /* return task's current stack address */ + return stk; +} + +extern long list_thread(void); +extern rt_thread_t rt_current_thread; +/** + * fault exception handling + */ +void rt_hw_hard_fault_exception(struct exception_stack_frame *contex) +{ + rt_kprintf("psr: 0x%08x\n", contex->psr); + rt_kprintf(" pc: 0x%08x\n", contex->pc); + rt_kprintf(" lr: 0x%08x\n", contex->lr); + rt_kprintf("r12: 0x%08x\n", contex->r12); + rt_kprintf("r03: 0x%08x\n", contex->r3); + rt_kprintf("r02: 0x%08x\n", contex->r2); + rt_kprintf("r01: 0x%08x\n", contex->r1); + rt_kprintf("r00: 0x%08x\n", contex->r0); + + rt_kprintf("hard fault on thread: %s\n", rt_current_thread->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + + while (1); +} + +#define SCB_CFSR (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */ +#define SCB_HFSR (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */ +#define SCB_MMAR (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */ +#define SCB_BFAR (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */ +#define SCB_AIRCR (*(volatile unsigned long *)0xE000ED00) /* Reset control Address Register */ +#define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */ + +#define SCB_CFSR_MFSR (*(volatile const unsigned char*)0xE000ED28) /* Memory-management Fault Status Register */ +#define SCB_CFSR_BFSR (*(volatile const unsigned char*)0xE000ED29) /* Bus Fault Status Register */ +#define SCB_CFSR_UFSR (*(volatile const unsigned short*)0xE000ED2A) /* Usage Fault Status Register */ + +/** + * reset CPU + */ +RT_WEAK void rt_hw_cpu_reset(void) +{ + SCB_AIRCR = SCB_RESET_VALUE;//((0x5FAUL << SCB_AIRCR_VECTKEY_Pos) |SCB_AIRCR_SYSRESETREQ_Msk); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_gcc.S new file mode 100644 index 0000000000..d17a8aa12c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_gcc.S @@ -0,0 +1,210 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-10-11 Bernard First version + * 2010-12-29 onelife Modify for EFM32 + * 2011-06-17 onelife Merge all of the assembly source code into context_gcc.S + * 2011-07-12 onelife Add interrupt context check function + * 2013-06-18 aozima add restore MSP feature. + * 2013-07-09 aozima enhancement hard fault exception handler. + */ + + .cpu cortex-m3 + .fpu softvfp + .syntax unified + .thumb + .text + + .equ SCB_VTOR, 0xE000ED08 /* Vector Table Offset Register */ + .equ ICSR, 0xE000ED04 /* interrupt control state register */ + .equ PENDSVSET_BIT, 0x10000000 /* value to trigger PendSV exception */ + + .equ SHPR3, 0xE000ED20 /* system priority register (3) */ + .equ PENDSV_PRI_LOWEST, 0x00FF0000 /* PendSV priority value (lowest) */ + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ + .global rt_hw_interrupt_disable + .type rt_hw_interrupt_disable, %function +rt_hw_interrupt_disable: + MRS R0, PRIMASK + CPSID I + BX LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .global rt_hw_interrupt_enable + .type rt_hw_interrupt_enable, %function +rt_hw_interrupt_enable: + MSR PRIMASK, R0 + BX LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * R0 --> from + * R1 --> to + */ + .global rt_hw_context_switch_interrupt + .type rt_hw_context_switch_interrupt, %function + .global rt_hw_context_switch + .type rt_hw_context_switch, %function +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + /* set rt_thread_switch_interrupt_flag to 1 */ + LDR R2, =rt_thread_switch_interrupt_flag + LDR R3, [R2] + CMP R3, #1 + BEQ _reswitch + MOV R3, #1 + STR R3, [R2] + + LDR R2, =rt_interrupt_from_thread /* set rt_interrupt_from_thread */ + STR R0, [R2] + +_reswitch: + LDR R2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ + STR R1, [R2] + + LDR R0, =ICSR /* trigger the PendSV exception (causes context switch) */ + LDR R1, =PENDSVSET_BIT + STR R1, [R0] + BX LR + +/* R0 --> switch from thread stack + * R1 --> switch to thread stack + * psr, pc, LR, R12, R3, R2, R1, R0 are pushed into [from] stack + */ + .global PendSV_Handler + .type PendSV_Handler, %function +PendSV_Handler: + /* disable interrupt to protect context switch */ + MRS R2, PRIMASK + CPSID I + + /* get rt_thread_switch_interrupt_flag */ + LDR R0, =rt_thread_switch_interrupt_flag + LDR R1, [R0] + CBZ R1, pendsv_exit /* pendsv aLReady handled */ + + /* clear rt_thread_switch_interrupt_flag to 0 */ + MOV R1, #0 + STR R1, [R0] + + LDR R0, =rt_interrupt_from_thread + LDR R1, [R0] + CBZ R1, switch_to_thread /* skip register save at the first time */ + + MRS R1, PSP /* get from thread stack pointer */ + STMFD R1!, {R4 - R11} /* push R4 - R11 register */ + LDR R0, [R0] + STR R1, [R0] /* update from thread stack pointer */ + +switch_to_thread: + LDR R1, =rt_interrupt_to_thread + LDR R1, [R1] + LDR R1, [R1] /* load thread stack pointer */ + + LDMFD R1!, {R4 - R11} /* pop R4 - R11 register */ + MSR PSP, R1 /* update stack pointer */ + +pendsv_exit: + /* restore interrupt */ + MSR PRIMASK, R2 + + ORR LR, LR, #0x04 + BX LR + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * R0 --> to + */ + .global rt_hw_context_switch_to + .type rt_hw_context_switch_to, %function +rt_hw_context_switch_to: + LDR R1, =rt_interrupt_to_thread + STR R0, [R1] + + /* set from thread to 0 */ + LDR R1, =rt_interrupt_from_thread + MOV R0, #0 + STR R0, [R1] + + /* set interrupt flag to 1 */ + LDR R1, =rt_thread_switch_interrupt_flag + MOV R0, #1 + STR R0, [R1] + + /* set the PendSV exception priority */ + LDR R0, =SHPR3 + LDR R1, =PENDSV_PRI_LOWEST + LDR.W R2, [R0,#0] /* read */ + ORR R1, R1, R2 /* modify */ + STR R1, [R0] /* write-back */ + + LDR R0, =ICSR /* trigger the PendSV exception (causes context switch) */ + LDR R1, =PENDSVSET_BIT + STR R1, [R0] + + /* restore MSP */ + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + /* enable interrupts at processor level */ + CPSIE F + CPSIE I + + /* never reach here! */ + +/* compatible with old version */ + .global rt_hw_interrupt_thread_switch + .type rt_hw_interrupt_thread_switch, %function +rt_hw_interrupt_thread_switch: + BX LR + NOP + + .global HardFault_Handler + .type HardFault_Handler, %function +HardFault_Handler: + /* get current context */ + MRS r0, msp /* get fault context from handler. */ + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _get_sp_done + MRS r0, psp /* get fault context from thread. */ +_get_sp_done: + + STMFD r0!, {r4 - r11} /* push r4 - r11 register */ + STMFD r0!, {lr} /* push exec_return register */ + + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _update_msp + MSR psp, r0 /* update stack pointer to PSP. */ + B _update_done +_update_msp: + MSR msp, r0 /* update stack pointer to MSP. */ +_update_done: + + PUSH {LR} + BL rt_hw_hard_fault_exception + POP {LR} + + ORR LR, LR, #0x04 + BX LR + +/* + * rt_uint32_t rt_hw_interrupt_check(void); + * R0 --> state + */ + .global rt_hw_interrupt_check + .type rt_hw_interrupt_check, %function +rt_hw_interrupt_check: + MRS R0, IPSR + BX LR diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_iar.S new file mode 100644 index 0000000000..91645c48b3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_iar.S @@ -0,0 +1,202 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version +; * 2009-09-27 Bernard add protect when contex switch occurs +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-07-09 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup cortex-m3 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + SECTION .text:CODE(2) + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + EXPORT rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + EXPORT rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ + EXPORT rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + EXPORT PendSV_Handler +PendSV_Handler: + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + STMFD r1!, {r4 - r11} ; push r4 - r11 register + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + MSR psp, r1 ; update stack pointer + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; */ + EXPORT rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + +; compatible with old version + EXPORT rt_hw_interrupt_thread_switch +rt_hw_interrupt_thread_switch: + BX lr + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler: + + ; get current context + MRS r0, msp ; get fault context from handler. + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _get_sp_done + MRS r0, psp ; get fault context from thread. +_get_sp_done + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + ;STMFD r0!, {lr} ; push exec_return register + SUB r0, r0, #0x04 + STR lr, [r0] + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _update_msp + MSR psp, r0 ; update stack pointer to PSP. + B _update_done +_update_msp + MSR msp, r0 ; update stack pointer to MSP. +_update_done + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_rvds.S new file mode 100644 index 0000000000..a2a7f41a27 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/context_rvds.S @@ -0,0 +1,207 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-07-09 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup CORTEX-M3 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + AREA |.text|, CODE, READONLY, ALIGN=2 + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ +rt_hw_interrupt_disable PROC + EXPORT rt_hw_interrupt_disable + MRS r0, PRIMASK + CPSID I + BX LR + ENDP + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ +rt_hw_interrupt_enable PROC + EXPORT rt_hw_interrupt_enable + MSR PRIMASK, r0 + BX LR + ENDP + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ +rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch_interrupt +rt_hw_context_switch PROC + EXPORT rt_hw_context_switch + + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + ENDP + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack +PendSV_Handler PROC + EXPORT PendSV_Handler + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + STMFD r1!, {r4 - r11} ; push r4 - r11 register + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + MSR psp, r1 ; update stack pointer + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + ENDP + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; * this fucntion is used to perform the first thread switch +; */ +rt_hw_context_switch_to PROC + EXPORT rt_hw_context_switch_to + ; set to thread + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + ; trigger the PendSV exception (causes context switch) + LDR r0, =NVIC_INT_CTRL + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + ENDP + +; compatible with old version +rt_hw_interrupt_thread_switch PROC + EXPORT rt_hw_interrupt_thread_switch + BX lr + ENDP + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler PROC + + ; get current context + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MRSEQ r0, msp ; [2]=0 ==> Z=1, get fault context from handler. + MRSNE r0, psp ; [2]=1 ==> Z=0, get fault context from thread. + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + STMFD r0!, {lr} ; push exec_return register + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MSREQ msp, r0 ; [2]=0 ==> Z=1, update stack pointer to MSP. + MSRNE psp, r0 ; [2]=1 ==> Z=0, update stack pointer to PSP. + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + ENDP + + ALIGN 4 + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/cpuport.c new file mode 100644 index 0000000000..a386747750 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m3/cpuport.c @@ -0,0 +1,403 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-01-05 Bernard first version + * 2011-02-14 onelife Modify for EFM32 + * 2011-06-17 onelife Merge all of the C source code into cpuport.c + * 2012-12-23 aozima stack addr align to 8byte. + * 2012-12-29 Bernard Add exception hook. + * 2013-07-09 aozima enhancement hard fault exception handler. + */ + +#include + +struct exception_stack_frame +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; +}; + +struct stack_frame +{ + /* r4 ~ r11 register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + + struct exception_stack_frame exception_stack_frame; +}; + +/* flag in interrupt handling */ +rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; +/* exception hook */ +static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL; + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct stack_frame *stack_frame; + rt_uint8_t *stk; + unsigned long i; + + stk = stack_addr + sizeof(rt_uint32_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8); + stk -= sizeof(struct stack_frame); + + stack_frame = (struct stack_frame *)stk; + + /* init all register */ + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) + { + ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->exception_stack_frame.r0 = (unsigned long)parameter; /* r0 : argument */ + stack_frame->exception_stack_frame.r1 = 0; /* r1 */ + stack_frame->exception_stack_frame.r2 = 0; /* r2 */ + stack_frame->exception_stack_frame.r3 = 0; /* r3 */ + stack_frame->exception_stack_frame.r12 = 0; /* r12 */ + stack_frame->exception_stack_frame.lr = (unsigned long)texit; /* lr */ + stack_frame->exception_stack_frame.pc = (unsigned long)tentry; /* entry point, pc */ + stack_frame->exception_stack_frame.psr = 0x01000000L; /* PSR */ + + /* return task's current stack address */ + return stk; +} + +/** + * This function set the hook, which is invoked on fault exception handling. + * + * @param exception_handle the exception handling hook function. + */ +void rt_hw_exception_install(rt_err_t (*exception_handle)(void* context)) +{ + rt_exception_hook = exception_handle; +} + +#define SCB_CFSR (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */ +#define SCB_HFSR (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */ +#define SCB_MMAR (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */ +#define SCB_BFAR (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */ +#define SCB_AIRCR (*(volatile unsigned long *)0xE000ED0C) /* Reset control Address Register */ +#define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */ + +#define SCB_CFSR_MFSR (*(volatile const unsigned char*)0xE000ED28) /* Memory-management Fault Status Register */ +#define SCB_CFSR_BFSR (*(volatile const unsigned char*)0xE000ED29) /* Bus Fault Status Register */ +#define SCB_CFSR_UFSR (*(volatile const unsigned short*)0xE000ED2A) /* Usage Fault Status Register */ + +#ifdef RT_USING_FINSH +static void usage_fault_track(void) +{ + rt_kprintf("usage fault:\n"); + rt_kprintf("SCB_CFSR_UFSR:0x%02X ", SCB_CFSR_UFSR); + + if(SCB_CFSR_UFSR & (1<<0)) + { + /* [0]:UNDEFINSTR */ + rt_kprintf("UNDEFINSTR "); + } + + if(SCB_CFSR_UFSR & (1<<1)) + { + /* [1]:INVSTATE */ + rt_kprintf("INVSTATE "); + } + + if(SCB_CFSR_UFSR & (1<<2)) + { + /* [2]:INVPC */ + rt_kprintf("INVPC "); + } + + if(SCB_CFSR_UFSR & (1<<3)) + { + /* [3]:NOCP */ + rt_kprintf("NOCP "); + } + + if(SCB_CFSR_UFSR & (1<<8)) + { + /* [8]:UNALIGNED */ + rt_kprintf("UNALIGNED "); + } + + if(SCB_CFSR_UFSR & (1<<9)) + { + /* [9]:DIVBYZERO */ + rt_kprintf("DIVBYZERO "); + } + + rt_kprintf("\n"); +} + +static void bus_fault_track(void) +{ + rt_kprintf("bus fault:\n"); + rt_kprintf("SCB_CFSR_BFSR:0x%02X ", SCB_CFSR_BFSR); + + if(SCB_CFSR_BFSR & (1<<0)) + { + /* [0]:IBUSERR */ + rt_kprintf("IBUSERR "); + } + + if(SCB_CFSR_BFSR & (1<<1)) + { + /* [1]:PRECISERR */ + rt_kprintf("PRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<2)) + { + /* [2]:IMPRECISERR */ + rt_kprintf("IMPRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<3)) + { + /* [3]:UNSTKERR */ + rt_kprintf("UNSTKERR "); + } + + if(SCB_CFSR_BFSR & (1<<4)) + { + /* [4]:STKERR */ + rt_kprintf("STKERR "); + } + + if(SCB_CFSR_BFSR & (1<<7)) + { + rt_kprintf("SCB->BFAR:%08X\n", SCB_BFAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void mem_manage_fault_track(void) +{ + rt_kprintf("mem manage fault:\n"); + rt_kprintf("SCB_CFSR_MFSR:0x%02X ", SCB_CFSR_MFSR); + + if(SCB_CFSR_MFSR & (1<<0)) + { + /* [0]:IACCVIOL */ + rt_kprintf("IACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<1)) + { + /* [1]:DACCVIOL */ + rt_kprintf("DACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<3)) + { + /* [3]:MUNSTKERR */ + rt_kprintf("MUNSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<4)) + { + /* [4]:MSTKERR */ + rt_kprintf("MSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<7)) + { + /* [7]:MMARVALID */ + rt_kprintf("SCB->MMAR:%08X\n", SCB_MMAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void hard_fault_track(void) +{ + if(SCB_HFSR & (1UL<<1)) + { + /* [1]:VECTBL, Indicates hard fault is caused by failed vector fetch. */ + rt_kprintf("failed vector fetch\n"); + } + + if(SCB_HFSR & (1UL<<30)) + { + /* [30]:FORCED, Indicates hard fault is taken because of bus fault, + memory management fault, or usage fault. */ + if(SCB_CFSR_BFSR) + { + bus_fault_track(); + } + + if(SCB_CFSR_MFSR) + { + mem_manage_fault_track(); + } + + if(SCB_CFSR_UFSR) + { + usage_fault_track(); + } + } + + if(SCB_HFSR & (1UL<<31)) + { + /* [31]:DEBUGEVT, Indicates hard fault is triggered by debug event. */ + rt_kprintf("debug event\n"); + } +} +#endif /* RT_USING_FINSH */ + +struct exception_info +{ + rt_uint32_t exc_return; + struct stack_frame stack_frame; +}; + +/* + * fault exception handler + */ +void rt_hw_hard_fault_exception(struct exception_info * exception_info) +{ + extern long list_thread(void); + struct stack_frame* context = &exception_info->stack_frame; + + if (rt_exception_hook != RT_NULL) + { + rt_err_t result; + + result = rt_exception_hook(exception_info); + if (result == RT_EOK) + return; + } + + rt_kprintf("psr: 0x%08x\n", context->exception_stack_frame.psr); + + rt_kprintf("r00: 0x%08x\n", context->exception_stack_frame.r0); + rt_kprintf("r01: 0x%08x\n", context->exception_stack_frame.r1); + rt_kprintf("r02: 0x%08x\n", context->exception_stack_frame.r2); + rt_kprintf("r03: 0x%08x\n", context->exception_stack_frame.r3); + rt_kprintf("r04: 0x%08x\n", context->r4); + rt_kprintf("r05: 0x%08x\n", context->r5); + rt_kprintf("r06: 0x%08x\n", context->r6); + rt_kprintf("r07: 0x%08x\n", context->r7); + rt_kprintf("r08: 0x%08x\n", context->r8); + rt_kprintf("r09: 0x%08x\n", context->r9); + rt_kprintf("r10: 0x%08x\n", context->r10); + rt_kprintf("r11: 0x%08x\n", context->r11); + rt_kprintf("r12: 0x%08x\n", context->exception_stack_frame.r12); + rt_kprintf(" lr: 0x%08x\n", context->exception_stack_frame.lr); + rt_kprintf(" pc: 0x%08x\n", context->exception_stack_frame.pc); + + if(exception_info->exc_return & (1 << 2) ) + { + rt_kprintf("hard fault on thread: %s\r\n\r\n", rt_thread_self()->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif /* RT_USING_FINSH */ + } + else + { + rt_kprintf("hard fault on handler\r\n\r\n"); + } + +#ifdef RT_USING_FINSH + hard_fault_track(); +#endif /* RT_USING_FINSH */ + + while (1); +} + +/** + * shutdown CPU + */ +void rt_hw_cpu_shutdown(void) +{ + rt_kprintf("shutdown...\n"); + + RT_ASSERT(0); +} + +/** + * reset CPU + */ +RT_WEAK void rt_hw_cpu_reset(void) +{ + SCB_AIRCR = SCB_RESET_VALUE; +} + +#ifdef RT_USING_CPU_FFS +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +#if defined(__CC_ARM) +__asm int __rt_ffs(int value) +{ + CMP r0, #0x00 + BEQ exit + + RBIT r0, r0 + CLZ r0, r0 + ADDS r0, r0, #0x01 + +exit + BX lr +} +#elif defined(__IAR_SYSTEMS_ICC__) +int __rt_ffs(int value) +{ + if (value == 0) return value; + + asm("RBIT %0, %1" : "=r"(value) : "r"(value)); + asm("CLZ %0, %1" : "=r"(value) : "r"(value)); + asm("ADDS %0, %1, #0x01" : "=r"(value) : "r"(value)); + + return value; +} +#elif defined(__GNUC__) +int __rt_ffs(int value) +{ + return __builtin_ffs(value); +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_gcc.S new file mode 100644 index 0000000000..420f4f8ae3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_gcc.S @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-10-11 Bernard first version + * 2012-01-01 aozima support context switch load/store FPU register. + * 2013-06-18 aozima add restore MSP feature. + * 2013-06-23 aozima support lazy stack optimized. + * 2018-07-24 aozima enhancement hard fault exception handler. + */ + +/** + * @addtogroup cortex-m4 + */ +/*@{*/ + +.cpu cortex-m4 +.syntax unified +.thumb +.text + +.equ SCB_VTOR, 0xE000ED08 /* Vector Table Offset Register */ +.equ NVIC_INT_CTRL, 0xE000ED04 /* interrupt control state register */ +.equ NVIC_SYSPRI2, 0xE000ED20 /* system priority register (2) */ +.equ NVIC_PENDSV_PRI, 0x00FF0000 /* PendSV priority value (lowest) */ +.equ NVIC_PENDSVSET, 0x10000000 /* value to trigger PendSV exception */ + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ +.global rt_hw_interrupt_disable +.type rt_hw_interrupt_disable, %function +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ +.global rt_hw_interrupt_enable +.type rt_hw_interrupt_enable, %function +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * r0 --> from + * r1 --> to + */ +.global rt_hw_context_switch_interrupt +.type rt_hw_context_switch_interrupt, %function +.global rt_hw_context_switch +.type rt_hw_context_switch, %function + +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + /* set rt_thread_switch_interrupt_flag to 1 */ + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread /* set rt_interrupt_from_thread */ + STR r0, [r2] + +_reswitch: + LDR r2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +/* r0 --> switch from thread stack + * r1 --> switch to thread stack + * psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + */ +.global PendSV_Handler +.type PendSV_Handler, %function +PendSV_Handler: + /* disable interrupt to protect context switch */ + MRS r2, PRIMASK + CPSID I + + /* get rt_thread_switch_interrupt_flag */ + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit /* pendsv already handled */ + + /* clear rt_thread_switch_interrupt_flag to 0 */ + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread /* skip register save at the first time */ + + MRS r1, psp /* get from thread stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + TST lr, #0x10 /* if(!EXC_RETURN[4]) */ + VSTMDBEQ r1!, {d8 - d15} /* push FPU register s16~s31 */ +#endif + + STMFD r1!, {r4 - r11} /* push r4 - r11 register */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + MOV r4, #0x00 /* flag = 0 */ + + TST lr, #0x10 /* if(!EXC_RETURN[4]) */ + MOVEQ r4, #0x01 /* flag = 1 */ + + STMFD r1!, {r4} /* push flag */ +#endif + + LDR r0, [r0] + STR r1, [r0] /* update from thread stack pointer */ + +switch_to_thread: + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] /* load thread stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + LDMFD r1!, {r3} /* pop flag */ +#endif + + LDMFD r1!, {r4 - r11} /* pop r4 - r11 register */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + CMP r3, #0 /* if(flag_r3 != 0) */ + VLDMIANE r1!, {d8 - d15} /* pop FPU register s16~s31 */ +#endif + + MSR psp, r1 /* update stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + ORR lr, lr, #0x10 /* lr |= (1 << 4), clean FPCA. */ + CMP r3, #0 /* if(flag_r3 != 0) */ + BICNE lr, lr, #0x10 /* lr &= ~(1 << 4), set FPCA. */ +#endif + +pendsv_exit: + /* restore interrupt */ + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ +.global rt_hw_context_switch_to +.type rt_hw_context_switch_to, %function +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + /* CLEAR CONTROL.FPCA */ + MRS r2, CONTROL /* read */ + BIC r2, #0x04 /* modify */ + MSR CONTROL, r2 /* write-back */ +#endif + + /* set from thread to 0 */ + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + /* set interrupt flag to 1 */ + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + /* set the PendSV exception priority */ + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] /* read */ + ORR r1,r1,r2 /* modify */ + STR r1, [r0] /* write-back */ + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + /* restore MSP */ + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + /* enable interrupts at processor level */ + CPSIE F + CPSIE I + + /* never reach here! */ + +/* compatible with old version */ +.global rt_hw_interrupt_thread_switch +.type rt_hw_interrupt_thread_switch, %function +rt_hw_interrupt_thread_switch: + BX lr + NOP + +.global HardFault_Handler +.type HardFault_Handler, %function +HardFault_Handler: + /* get current context */ + MRS r0, msp /* get fault context from handler. */ + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _get_sp_done + MRS r0, psp /* get fault context from thread. */ +_get_sp_done: + + STMFD r0!, {r4 - r11} /* push r4 - r11 register */ +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + STMFD r0!, {lr} /* push dummy for flag */ +#endif + STMFD r0!, {lr} /* push exec_return register */ + + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _update_msp + MSR psp, r0 /* update stack pointer to PSP. */ + B _update_done +_update_msp: + MSR msp, r0 /* update stack pointer to MSP. */ +_update_done: + + PUSH {LR} + BL rt_hw_hard_fault_exception + POP {LR} + + ORR lr, lr, #0x04 + BX lr diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_iar.S new file mode 100644 index 0000000000..06b8c7f884 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_iar.S @@ -0,0 +1,253 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version +; * 2009-09-27 Bernard add protect when contex switch occurs +; * 2012-01-01 aozima support context switch load/store FPU register. +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-06-23 aozima support lazy stack optimized. +; * 2018-07-24 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup cortex-m4 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + SECTION .text:CODE(2) + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + EXPORT rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + EXPORT rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ + EXPORT rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + EXPORT PendSV_Handler +PendSV_Handler: + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + +#if defined ( __ARMVFP__ ) + TST lr, #0x10 ; if(!EXC_RETURN[4]) + BNE skip_push_fpu + VSTMDB r1!, {d8 - d15} ; push FPU register s16~s31 +skip_push_fpu +#endif + + STMFD r1!, {r4 - r11} ; push r4 - r11 register + +#if defined ( __ARMVFP__ ) + MOV r4, #0x00 ; flag = 0 + TST lr, #0x10 ; if(!EXC_RETURN[4]) + BNE push_flag + MOV r4, #0x01 ; flag = 1 +push_flag + ;STMFD r1!, {r4} ; push flag + SUB r1, r1, #0x04 + STR r4, [r1] +#endif + + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + +#if defined ( __ARMVFP__ ) + LDMFD r1!, {r3} ; pop flag +#endif + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + +#if defined ( __ARMVFP__ ) + CBZ r3, skip_pop_fpu + VLDMIA r1!, {d8 - d15} ; pop FPU register s16~s31 +skip_pop_fpu +#endif + + MSR psp, r1 ; update stack pointer + +#if defined ( __ARMVFP__ ) + ORR lr, lr, #0x10 ; lr |= (1 << 4), clean FPCA. + CBZ r3, return_without_fpu ; if(flag_r3 != 0) + BIC lr, lr, #0x10 ; lr &= ~(1 << 4), set FPCA. +return_without_fpu +#endif + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; */ + EXPORT rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + +#if defined ( __ARMVFP__ ) + ; CLEAR CONTROL.FPCA + MRS r2, CONTROL ; read + BIC r2, r2, #0x04 ; modify + MSR CONTROL, r2 ; write-back +#endif + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + +; compatible with old version + EXPORT rt_hw_interrupt_thread_switch +rt_hw_interrupt_thread_switch: + BX lr + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler: + + ; get current context + MRS r0, msp ; get fault context from handler. + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _get_sp_done + MRS r0, psp ; get fault context from thread. +_get_sp_done + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + ;STMFD r0!, {lr} ; push exec_return register +#if defined ( __ARMVFP__ ) + SUB r0, r0, #0x04 ; push dummy for flag + STR lr, [r0] +#endif + SUB r0, r0, #0x04 + STR lr, [r0] + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _update_msp + MSR psp, r0 ; update stack pointer to PSP. + B _update_done +_update_msp + MSR msp, r0 ; update stack pointer to MSP. +_update_done + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_rvds.S new file mode 100644 index 0000000000..f6d2447c5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/context_rvds.S @@ -0,0 +1,251 @@ +;/* +;* Copyright (c) 2006-2018, RT-Thread Development Team +;* +;* SPDX-License-Identifier: Apache-2.0 +;* +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version. +; * 2012-01-01 aozima support context switch load/store FPU register. +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-06-23 aozima support lazy stack optimized. +; * 2018-07-24 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup cortex-m4 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + AREA |.text|, CODE, READONLY, ALIGN=2 + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ +rt_hw_interrupt_disable PROC + EXPORT rt_hw_interrupt_disable + MRS r0, PRIMASK + CPSID I + BX LR + ENDP + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ +rt_hw_interrupt_enable PROC + EXPORT rt_hw_interrupt_enable + MSR PRIMASK, r0 + BX LR + ENDP + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ +rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch_interrupt +rt_hw_context_switch PROC + EXPORT rt_hw_context_switch + + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + ENDP + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack +PendSV_Handler PROC + EXPORT PendSV_Handler + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + + IF {FPU} != "SoftVFP" + TST lr, #0x10 ; if(!EXC_RETURN[4]) + VSTMFDEQ r1!, {d8 - d15} ; push FPU register s16~s31 + ENDIF + + STMFD r1!, {r4 - r11} ; push r4 - r11 register + + IF {FPU} != "SoftVFP" + MOV r4, #0x00 ; flag = 0 + + TST lr, #0x10 ; if(!EXC_RETURN[4]) + MOVEQ r4, #0x01 ; flag = 1 + + STMFD r1!, {r4} ; push flag + ENDIF + + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + IF {FPU} != "SoftVFP" + LDMFD r1!, {r3} ; pop flag + ENDIF + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + + IF {FPU} != "SoftVFP" + CMP r3, #0 ; if(flag_r3 != 0) + VLDMFDNE r1!, {d8 - d15} ; pop FPU register s16~s31 + ENDIF + + MSR psp, r1 ; update stack pointer + + IF {FPU} != "SoftVFP" + ORR lr, lr, #0x10 ; lr |= (1 << 4), clean FPCA. + CMP r3, #0 ; if(flag_r3 != 0) + BICNE lr, lr, #0x10 ; lr &= ~(1 << 4), set FPCA. + ENDIF + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + ENDP + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; * this fucntion is used to perform the first thread switch +; */ +rt_hw_context_switch_to PROC + EXPORT rt_hw_context_switch_to + ; set to thread + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + IF {FPU} != "SoftVFP" + ; CLEAR CONTROL.FPCA + MRS r2, CONTROL ; read + BIC r2, #0x04 ; modify + MSR CONTROL, r2 ; write-back + ENDIF + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + ; trigger the PendSV exception (causes context switch) + LDR r0, =NVIC_INT_CTRL + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + ENDP + +; compatible with old version +rt_hw_interrupt_thread_switch PROC + EXPORT rt_hw_interrupt_thread_switch + BX lr + ENDP + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler PROC + + ; get current context + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MRSEQ r0, msp ; [2]=0 ==> Z=1, get fault context from handler. + MRSNE r0, psp ; [2]=1 ==> Z=0, get fault context from thread. + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + IF {FPU} != "SoftVFP" + STMFD r0!, {lr} ; push dummy for flag + ENDIF + STMFD r0!, {lr} ; push exec_return register + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MSREQ msp, r0 ; [2]=0 ==> Z=1, update stack pointer to MSP. + MSRNE psp, r0 ; [2]=1 ==> Z=0, update stack pointer to PSP. + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + ENDP + + ALIGN 4 + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/cpuport.c new file mode 100644 index 0000000000..18f027895b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m4/cpuport.c @@ -0,0 +1,487 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-10-21 Bernard the first version. + * 2011-10-27 aozima update for cortex-M4 FPU. + * 2011-12-31 aozima fixed stack align issues. + * 2012-01-01 aozima support context switch load/store FPU register. + * 2012-12-11 lgnq fixed the coding style. + * 2012-12-23 aozima stack addr align to 8byte. + * 2012-12-29 Bernard Add exception hook. + * 2013-06-23 aozima support lazy stack optimized. + * 2018-07-24 aozima enhancement hard fault exception handler. + */ + +#include + +#if /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \ + /* Clang */ || (defined ( __CLANG_ARM ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) \ + /* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \ + /* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) ) +#define USE_FPU 1 +#else +#define USE_FPU 0 +#endif + +/* exception and interrupt handler table */ +rt_uint32_t rt_interrupt_from_thread; +rt_uint32_t rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; +/* exception hook */ +static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL; + +struct exception_stack_frame +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; +}; + +struct stack_frame +{ +#if USE_FPU + rt_uint32_t flag; +#endif /* USE_FPU */ + + /* r4 ~ r11 register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + + struct exception_stack_frame exception_stack_frame; +}; + +struct exception_stack_frame_fpu +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; + +#if USE_FPU + /* FPU register */ + rt_uint32_t S0; + rt_uint32_t S1; + rt_uint32_t S2; + rt_uint32_t S3; + rt_uint32_t S4; + rt_uint32_t S5; + rt_uint32_t S6; + rt_uint32_t S7; + rt_uint32_t S8; + rt_uint32_t S9; + rt_uint32_t S10; + rt_uint32_t S11; + rt_uint32_t S12; + rt_uint32_t S13; + rt_uint32_t S14; + rt_uint32_t S15; + rt_uint32_t FPSCR; + rt_uint32_t NO_NAME; +#endif +}; + +struct stack_frame_fpu +{ + rt_uint32_t flag; + + /* r4 ~ r11 register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + +#if USE_FPU + /* FPU register s16 ~ s31 */ + rt_uint32_t s16; + rt_uint32_t s17; + rt_uint32_t s18; + rt_uint32_t s19; + rt_uint32_t s20; + rt_uint32_t s21; + rt_uint32_t s22; + rt_uint32_t s23; + rt_uint32_t s24; + rt_uint32_t s25; + rt_uint32_t s26; + rt_uint32_t s27; + rt_uint32_t s28; + rt_uint32_t s29; + rt_uint32_t s30; + rt_uint32_t s31; +#endif + + struct exception_stack_frame_fpu exception_stack_frame; +}; + +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct stack_frame *stack_frame; + rt_uint8_t *stk; + unsigned long i; + + stk = stack_addr + sizeof(rt_uint32_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8); + stk -= sizeof(struct stack_frame); + + stack_frame = (struct stack_frame *)stk; + + /* init all register */ + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) + { + ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->exception_stack_frame.r0 = (unsigned long)parameter; /* r0 : argument */ + stack_frame->exception_stack_frame.r1 = 0; /* r1 */ + stack_frame->exception_stack_frame.r2 = 0; /* r2 */ + stack_frame->exception_stack_frame.r3 = 0; /* r3 */ + stack_frame->exception_stack_frame.r12 = 0; /* r12 */ + stack_frame->exception_stack_frame.lr = (unsigned long)texit; /* lr */ + stack_frame->exception_stack_frame.pc = (unsigned long)tentry; /* entry point, pc */ + stack_frame->exception_stack_frame.psr = 0x01000000L; /* PSR */ + +#if USE_FPU + stack_frame->flag = 0; +#endif /* USE_FPU */ + + /* return task's current stack address */ + return stk; +} + +/** + * This function set the hook, which is invoked on fault exception handling. + * + * @param exception_handle the exception handling hook function. + */ +void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context)) +{ + rt_exception_hook = exception_handle; +} + +#define SCB_CFSR (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */ +#define SCB_HFSR (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */ +#define SCB_MMAR (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */ +#define SCB_BFAR (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */ +#define SCB_AIRCR (*(volatile unsigned long *)0xE000ED0C) /* Reset control Address Register */ +#define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */ + +#define SCB_CFSR_MFSR (*(volatile const unsigned char*)0xE000ED28) /* Memory-management Fault Status Register */ +#define SCB_CFSR_BFSR (*(volatile const unsigned char*)0xE000ED29) /* Bus Fault Status Register */ +#define SCB_CFSR_UFSR (*(volatile const unsigned short*)0xE000ED2A) /* Usage Fault Status Register */ + +#ifdef RT_USING_FINSH +static void usage_fault_track(void) +{ + rt_kprintf("usage fault:\n"); + rt_kprintf("SCB_CFSR_UFSR:0x%02X ", SCB_CFSR_UFSR); + + if(SCB_CFSR_UFSR & (1<<0)) + { + /* [0]:UNDEFINSTR */ + rt_kprintf("UNDEFINSTR "); + } + + if(SCB_CFSR_UFSR & (1<<1)) + { + /* [1]:INVSTATE */ + rt_kprintf("INVSTATE "); + } + + if(SCB_CFSR_UFSR & (1<<2)) + { + /* [2]:INVPC */ + rt_kprintf("INVPC "); + } + + if(SCB_CFSR_UFSR & (1<<3)) + { + /* [3]:NOCP */ + rt_kprintf("NOCP "); + } + + if(SCB_CFSR_UFSR & (1<<8)) + { + /* [8]:UNALIGNED */ + rt_kprintf("UNALIGNED "); + } + + if(SCB_CFSR_UFSR & (1<<9)) + { + /* [9]:DIVBYZERO */ + rt_kprintf("DIVBYZERO "); + } + + rt_kprintf("\n"); +} + +static void bus_fault_track(void) +{ + rt_kprintf("bus fault:\n"); + rt_kprintf("SCB_CFSR_BFSR:0x%02X ", SCB_CFSR_BFSR); + + if(SCB_CFSR_BFSR & (1<<0)) + { + /* [0]:IBUSERR */ + rt_kprintf("IBUSERR "); + } + + if(SCB_CFSR_BFSR & (1<<1)) + { + /* [1]:PRECISERR */ + rt_kprintf("PRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<2)) + { + /* [2]:IMPRECISERR */ + rt_kprintf("IMPRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<3)) + { + /* [3]:UNSTKERR */ + rt_kprintf("UNSTKERR "); + } + + if(SCB_CFSR_BFSR & (1<<4)) + { + /* [4]:STKERR */ + rt_kprintf("STKERR "); + } + + if(SCB_CFSR_BFSR & (1<<7)) + { + rt_kprintf("SCB->BFAR:%08X\n", SCB_BFAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void mem_manage_fault_track(void) +{ + rt_kprintf("mem manage fault:\n"); + rt_kprintf("SCB_CFSR_MFSR:0x%02X ", SCB_CFSR_MFSR); + + if(SCB_CFSR_MFSR & (1<<0)) + { + /* [0]:IACCVIOL */ + rt_kprintf("IACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<1)) + { + /* [1]:DACCVIOL */ + rt_kprintf("DACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<3)) + { + /* [3]:MUNSTKERR */ + rt_kprintf("MUNSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<4)) + { + /* [4]:MSTKERR */ + rt_kprintf("MSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<7)) + { + /* [7]:MMARVALID */ + rt_kprintf("SCB->MMAR:%08X\n", SCB_MMAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void hard_fault_track(void) +{ + if(SCB_HFSR & (1UL<<1)) + { + /* [1]:VECTBL, Indicates hard fault is caused by failed vector fetch. */ + rt_kprintf("failed vector fetch\n"); + } + + if(SCB_HFSR & (1UL<<30)) + { + /* [30]:FORCED, Indicates hard fault is taken because of bus fault, + memory management fault, or usage fault. */ + if(SCB_CFSR_BFSR) + { + bus_fault_track(); + } + + if(SCB_CFSR_MFSR) + { + mem_manage_fault_track(); + } + + if(SCB_CFSR_UFSR) + { + usage_fault_track(); + } + } + + if(SCB_HFSR & (1UL<<31)) + { + /* [31]:DEBUGEVT, Indicates hard fault is triggered by debug event. */ + rt_kprintf("debug event\n"); + } +} +#endif /* RT_USING_FINSH */ + +struct exception_info +{ + rt_uint32_t exc_return; + struct stack_frame stack_frame; +}; + +void rt_hw_hard_fault_exception(struct exception_info *exception_info) +{ + extern long list_thread(void); + struct exception_stack_frame *exception_stack = &exception_info->stack_frame.exception_stack_frame; + struct stack_frame *context = &exception_info->stack_frame; + + if (rt_exception_hook != RT_NULL) + { + rt_err_t result; + + result = rt_exception_hook(exception_stack); + if (result == RT_EOK) return; + } + + rt_kprintf("psr: 0x%08x\n", context->exception_stack_frame.psr); + + rt_kprintf("r00: 0x%08x\n", context->exception_stack_frame.r0); + rt_kprintf("r01: 0x%08x\n", context->exception_stack_frame.r1); + rt_kprintf("r02: 0x%08x\n", context->exception_stack_frame.r2); + rt_kprintf("r03: 0x%08x\n", context->exception_stack_frame.r3); + rt_kprintf("r04: 0x%08x\n", context->r4); + rt_kprintf("r05: 0x%08x\n", context->r5); + rt_kprintf("r06: 0x%08x\n", context->r6); + rt_kprintf("r07: 0x%08x\n", context->r7); + rt_kprintf("r08: 0x%08x\n", context->r8); + rt_kprintf("r09: 0x%08x\n", context->r9); + rt_kprintf("r10: 0x%08x\n", context->r10); + rt_kprintf("r11: 0x%08x\n", context->r11); + rt_kprintf("r12: 0x%08x\n", context->exception_stack_frame.r12); + rt_kprintf(" lr: 0x%08x\n", context->exception_stack_frame.lr); + rt_kprintf(" pc: 0x%08x\n", context->exception_stack_frame.pc); + + if (exception_info->exc_return & (1 << 2)) + { + rt_kprintf("hard fault on thread: %s\r\n\r\n", rt_thread_self()->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + } + else + { + rt_kprintf("hard fault on handler\r\n\r\n"); + } + + if ( (exception_info->exc_return & 0x10) == 0) + { + rt_kprintf("FPU active!\r\n"); + } + +#ifdef RT_USING_FINSH + hard_fault_track(); +#endif /* RT_USING_FINSH */ + + while (1); +} + +/** + * shutdown CPU + */ +void rt_hw_cpu_shutdown(void) +{ + rt_kprintf("shutdown...\n"); + + RT_ASSERT(0); +} + +/** + * reset CPU + */ +RT_WEAK void rt_hw_cpu_reset(void) +{ + SCB_AIRCR = SCB_RESET_VALUE; +} + +#ifdef RT_USING_CPU_FFS +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +#if defined(__CC_ARM) || defined(__CLANG_ARM) +__asm int __rt_ffs(int value) +{ + CMP r0, #0x00 + BEQ exit + + RBIT r0, r0 + CLZ r0, r0 + ADDS r0, r0, #0x01 + +exit + BX lr +} +#elif defined(__IAR_SYSTEMS_ICC__) +int __rt_ffs(int value) +{ + if (value == 0) return value; + + asm("RBIT %0, %1" : "=r"(value) : "r"(value)); + asm("CLZ %0, %1" : "=r"(value) : "r"(value)); + asm("ADDS %0, %1, #0x01" : "=r"(value) : "r"(value)); + + return value; +} +#elif defined(__GNUC__) +int __rt_ffs(int value) +{ + return __builtin_ffs(value); +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_gcc.S new file mode 100644 index 0000000000..420f4f8ae3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_gcc.S @@ -0,0 +1,245 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-10-11 Bernard first version + * 2012-01-01 aozima support context switch load/store FPU register. + * 2013-06-18 aozima add restore MSP feature. + * 2013-06-23 aozima support lazy stack optimized. + * 2018-07-24 aozima enhancement hard fault exception handler. + */ + +/** + * @addtogroup cortex-m4 + */ +/*@{*/ + +.cpu cortex-m4 +.syntax unified +.thumb +.text + +.equ SCB_VTOR, 0xE000ED08 /* Vector Table Offset Register */ +.equ NVIC_INT_CTRL, 0xE000ED04 /* interrupt control state register */ +.equ NVIC_SYSPRI2, 0xE000ED20 /* system priority register (2) */ +.equ NVIC_PENDSV_PRI, 0x00FF0000 /* PendSV priority value (lowest) */ +.equ NVIC_PENDSVSET, 0x10000000 /* value to trigger PendSV exception */ + +/* + * rt_base_t rt_hw_interrupt_disable(); + */ +.global rt_hw_interrupt_disable +.type rt_hw_interrupt_disable, %function +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ +.global rt_hw_interrupt_enable +.type rt_hw_interrupt_enable, %function +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * r0 --> from + * r1 --> to + */ +.global rt_hw_context_switch_interrupt +.type rt_hw_context_switch_interrupt, %function +.global rt_hw_context_switch +.type rt_hw_context_switch, %function + +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + /* set rt_thread_switch_interrupt_flag to 1 */ + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread /* set rt_interrupt_from_thread */ + STR r0, [r2] + +_reswitch: + LDR r2, =rt_interrupt_to_thread /* set rt_interrupt_to_thread */ + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +/* r0 --> switch from thread stack + * r1 --> switch to thread stack + * psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + */ +.global PendSV_Handler +.type PendSV_Handler, %function +PendSV_Handler: + /* disable interrupt to protect context switch */ + MRS r2, PRIMASK + CPSID I + + /* get rt_thread_switch_interrupt_flag */ + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit /* pendsv already handled */ + + /* clear rt_thread_switch_interrupt_flag to 0 */ + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread /* skip register save at the first time */ + + MRS r1, psp /* get from thread stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + TST lr, #0x10 /* if(!EXC_RETURN[4]) */ + VSTMDBEQ r1!, {d8 - d15} /* push FPU register s16~s31 */ +#endif + + STMFD r1!, {r4 - r11} /* push r4 - r11 register */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + MOV r4, #0x00 /* flag = 0 */ + + TST lr, #0x10 /* if(!EXC_RETURN[4]) */ + MOVEQ r4, #0x01 /* flag = 1 */ + + STMFD r1!, {r4} /* push flag */ +#endif + + LDR r0, [r0] + STR r1, [r0] /* update from thread stack pointer */ + +switch_to_thread: + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] /* load thread stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + LDMFD r1!, {r3} /* pop flag */ +#endif + + LDMFD r1!, {r4 - r11} /* pop r4 - r11 register */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + CMP r3, #0 /* if(flag_r3 != 0) */ + VLDMIANE r1!, {d8 - d15} /* pop FPU register s16~s31 */ +#endif + + MSR psp, r1 /* update stack pointer */ + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + ORR lr, lr, #0x10 /* lr |= (1 << 4), clean FPCA. */ + CMP r3, #0 /* if(flag_r3 != 0) */ + BICNE lr, lr, #0x10 /* lr &= ~(1 << 4), set FPCA. */ +#endif + +pendsv_exit: + /* restore interrupt */ + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * r0 --> to + */ +.global rt_hw_context_switch_to +.type rt_hw_context_switch_to, %function +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + /* CLEAR CONTROL.FPCA */ + MRS r2, CONTROL /* read */ + BIC r2, #0x04 /* modify */ + MSR CONTROL, r2 /* write-back */ +#endif + + /* set from thread to 0 */ + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + /* set interrupt flag to 1 */ + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + /* set the PendSV exception priority */ + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] /* read */ + ORR r1,r1,r2 /* modify */ + STR r1, [r0] /* write-back */ + + LDR r0, =NVIC_INT_CTRL /* trigger the PendSV exception (causes context switch) */ + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + /* restore MSP */ + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + /* enable interrupts at processor level */ + CPSIE F + CPSIE I + + /* never reach here! */ + +/* compatible with old version */ +.global rt_hw_interrupt_thread_switch +.type rt_hw_interrupt_thread_switch, %function +rt_hw_interrupt_thread_switch: + BX lr + NOP + +.global HardFault_Handler +.type HardFault_Handler, %function +HardFault_Handler: + /* get current context */ + MRS r0, msp /* get fault context from handler. */ + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _get_sp_done + MRS r0, psp /* get fault context from thread. */ +_get_sp_done: + + STMFD r0!, {r4 - r11} /* push r4 - r11 register */ +#if defined (__VFP_FP__) && !defined(__SOFTFP__) + STMFD r0!, {lr} /* push dummy for flag */ +#endif + STMFD r0!, {lr} /* push exec_return register */ + + TST lr, #0x04 /* if(!EXC_RETURN[2]) */ + BEQ _update_msp + MSR psp, r0 /* update stack pointer to PSP. */ + B _update_done +_update_msp: + MSR msp, r0 /* update stack pointer to MSP. */ +_update_done: + + PUSH {LR} + BL rt_hw_hard_fault_exception + POP {LR} + + ORR lr, lr, #0x04 + BX lr diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_iar.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_iar.S new file mode 100644 index 0000000000..06b8c7f884 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_iar.S @@ -0,0 +1,253 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version +; * 2009-09-27 Bernard add protect when contex switch occurs +; * 2012-01-01 aozima support context switch load/store FPU register. +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-06-23 aozima support lazy stack optimized. +; * 2018-07-24 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup cortex-m4 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + SECTION .text:CODE(2) + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + EXPORT rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS r0, PRIMASK + CPSID I + BX LR + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + EXPORT rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR PRIMASK, r0 + BX LR + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ + EXPORT rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch +rt_hw_context_switch_interrupt: +rt_hw_context_switch: + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack + EXPORT PendSV_Handler +PendSV_Handler: + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + +#if defined ( __ARMVFP__ ) + TST lr, #0x10 ; if(!EXC_RETURN[4]) + BNE skip_push_fpu + VSTMDB r1!, {d8 - d15} ; push FPU register s16~s31 +skip_push_fpu +#endif + + STMFD r1!, {r4 - r11} ; push r4 - r11 register + +#if defined ( __ARMVFP__ ) + MOV r4, #0x00 ; flag = 0 + TST lr, #0x10 ; if(!EXC_RETURN[4]) + BNE push_flag + MOV r4, #0x01 ; flag = 1 +push_flag + ;STMFD r1!, {r4} ; push flag + SUB r1, r1, #0x04 + STR r4, [r1] +#endif + + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + +#if defined ( __ARMVFP__ ) + LDMFD r1!, {r3} ; pop flag +#endif + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + +#if defined ( __ARMVFP__ ) + CBZ r3, skip_pop_fpu + VLDMIA r1!, {d8 - d15} ; pop FPU register s16~s31 +skip_pop_fpu +#endif + + MSR psp, r1 ; update stack pointer + +#if defined ( __ARMVFP__ ) + ORR lr, lr, #0x10 ; lr |= (1 << 4), clean FPCA. + CBZ r3, return_without_fpu ; if(flag_r3 != 0) + BIC lr, lr, #0x10 ; lr &= ~(1 << 4), set FPCA. +return_without_fpu +#endif + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; */ + EXPORT rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + +#if defined ( __ARMVFP__ ) + ; CLEAR CONTROL.FPCA + MRS r2, CONTROL ; read + BIC r2, r2, #0x04 ; modify + MSR CONTROL, r2 ; write-back +#endif + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + NOP + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + +; compatible with old version + EXPORT rt_hw_interrupt_thread_switch +rt_hw_interrupt_thread_switch: + BX lr + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler +HardFault_Handler: + + ; get current context + MRS r0, msp ; get fault context from handler. + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _get_sp_done + MRS r0, psp ; get fault context from thread. +_get_sp_done + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + ;STMFD r0!, {lr} ; push exec_return register +#if defined ( __ARMVFP__ ) + SUB r0, r0, #0x04 ; push dummy for flag + STR lr, [r0] +#endif + SUB r0, r0, #0x04 + STR lr, [r0] + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + BEQ _update_msp + MSR psp, r0 ; update stack pointer to PSP. + B _update_done +_update_msp + MSR msp, r0 ; update stack pointer to MSP. +_update_done + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_rvds.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_rvds.S new file mode 100644 index 0000000000..ea9e9cb8b3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/context_rvds.S @@ -0,0 +1,253 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-17 Bernard first version. +; * 2012-01-01 aozima support context switch load/store FPU register. +; * 2013-06-18 aozima add restore MSP feature. +; * 2013-06-23 aozima support lazy stack optimized. +; * 2018-07-24 aozima enhancement hard fault exception handler. +; */ + +;/** +; * @addtogroup cortex-m4 +; */ +;/*@{*/ + +SCB_VTOR EQU 0xE000ED08 ; Vector Table Offset Register +NVIC_INT_CTRL EQU 0xE000ED04 ; interrupt control state register +NVIC_SYSPRI2 EQU 0xE000ED20 ; system priority register (2) +NVIC_PENDSV_PRI EQU 0x00FF0000 ; PendSV priority value (lowest) +NVIC_PENDSVSET EQU 0x10000000 ; value to trigger PendSV exception + + AREA |.text|, CODE, READONLY, ALIGN=2 + THUMB + REQUIRE8 + PRESERVE8 + + IMPORT rt_thread_switch_interrupt_flag + IMPORT rt_interrupt_from_thread + IMPORT rt_interrupt_to_thread + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ +rt_hw_interrupt_disable PROC + EXPORT rt_hw_interrupt_disable + MRS r0, PRIMASK + CPSID I + BX LR + ENDP + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ +rt_hw_interrupt_enable PROC + EXPORT rt_hw_interrupt_enable + MSR PRIMASK, r0 + BX LR + ENDP + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ +rt_hw_context_switch_interrupt + EXPORT rt_hw_context_switch_interrupt +rt_hw_context_switch PROC + EXPORT rt_hw_context_switch + + ; set rt_thread_switch_interrupt_flag to 1 + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 + STR r3, [r2] + + LDR r2, =rt_interrupt_from_thread ; set rt_interrupt_from_thread + STR r0, [r2] + +_reswitch + LDR r2, =rt_interrupt_to_thread ; set rt_interrupt_to_thread + STR r1, [r2] + + LDR r0, =NVIC_INT_CTRL ; trigger the PendSV exception (causes context switch) + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + BX LR + ENDP + +; r0 --> switch from thread stack +; r1 --> switch to thread stack +; psr, pc, lr, r12, r3, r2, r1, r0 are pushed into [from] stack +PendSV_Handler PROC + EXPORT PendSV_Handler + + ; disable interrupt to protect context switch + MRS r2, PRIMASK + CPSID I + + ; get rt_thread_switch_interrupt_flag + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CBZ r1, pendsv_exit ; pendsv already handled + + ; clear rt_thread_switch_interrupt_flag to 0 + MOV r1, #0x00 + STR r1, [r0] + + LDR r0, =rt_interrupt_from_thread + LDR r1, [r0] + CBZ r1, switch_to_thread ; skip register save at the first time + + MRS r1, psp ; get from thread stack pointer + + IF {FPU} != "SoftVFP" + TST lr, #0x10 ; if(!EXC_RETURN[4]) + VSTMFDEQ r1!, {d8 - d15} ; push FPU register s16~s31 + ENDIF + + STMFD r1!, {r4 - r11} ; push r4 - r11 register + + IF {FPU} != "SoftVFP" + MOV r4, #0x00 ; flag = 0 + + TST lr, #0x10 ; if(!EXC_RETURN[4]) + MOVEQ r4, #0x01 ; flag = 1 + + STMFD r1!, {r4} ; push flag + ENDIF + + LDR r0, [r0] + STR r1, [r0] ; update from thread stack pointer + +switch_to_thread + LDR r1, =rt_interrupt_to_thread + LDR r1, [r1] + LDR r1, [r1] ; load thread stack pointer + + IF {FPU} != "SoftVFP" + LDMFD r1!, {r3} ; pop flag + ENDIF + + LDMFD r1!, {r4 - r11} ; pop r4 - r11 register + + IF {FPU} != "SoftVFP" + CMP r3, #0 ; if(flag_r3 != 0) + VLDMFDNE r1!, {d8 - d15} ; pop FPU register s16~s31 + ENDIF + + MSR psp, r1 ; update stack pointer + + IF {FPU} != "SoftVFP" + ORR lr, lr, #0x10 ; lr |= (1 << 4), clean FPCA. + CMP r3, #0 ; if(flag_r3 != 0) + BICNE lr, lr, #0x10 ; lr &= ~(1 << 4), set FPCA. + ENDIF + +pendsv_exit + ; restore interrupt + MSR PRIMASK, r2 + + ORR lr, lr, #0x04 + BX lr + ENDP + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; * this fucntion is used to perform the first thread switch +; */ +rt_hw_context_switch_to PROC + EXPORT rt_hw_context_switch_to + ; set to thread + LDR r1, =rt_interrupt_to_thread + STR r0, [r1] + + IF {FPU} != "SoftVFP" + ; CLEAR CONTROL.FPCA + MRS r2, CONTROL ; read + BIC r2, #0x04 ; modify + MSR CONTROL, r2 ; write-back + ENDIF + + ; set from thread to 0 + LDR r1, =rt_interrupt_from_thread + MOV r0, #0x0 + STR r0, [r1] + + ; set interrupt flag to 1 + LDR r1, =rt_thread_switch_interrupt_flag + MOV r0, #1 + STR r0, [r1] + + ; set the PendSV exception priority + LDR r0, =NVIC_SYSPRI2 + LDR r1, =NVIC_PENDSV_PRI + LDR.W r2, [r0,#0x00] ; read + ORR r1,r1,r2 ; modify + STR r1, [r0] ; write-back + + ; trigger the PendSV exception (causes context switch) + LDR r0, =NVIC_INT_CTRL + LDR r1, =NVIC_PENDSVSET + STR r1, [r0] + + ; restore MSP + LDR r0, =SCB_VTOR + LDR r0, [r0] + LDR r0, [r0] + MSR msp, r0 + + ; enable interrupts at processor level + CPSIE F + CPSIE I + + ; never reach here! + ENDP + +; compatible with old version +rt_hw_interrupt_thread_switch PROC + EXPORT rt_hw_interrupt_thread_switch + BX lr + ENDP + + IMPORT rt_hw_hard_fault_exception + EXPORT HardFault_Handler + EXPORT MemManage_Handler +HardFault_Handler PROC +MemManage_Handler + + ; get current context + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MRSEQ r0, msp ; [2]=0 ==> Z=1, get fault context from handler. + MRSNE r0, psp ; [2]=1 ==> Z=0, get fault context from thread. + + STMFD r0!, {r4 - r11} ; push r4 - r11 register + IF {FPU} != "SoftVFP" + STMFD r0!, {lr} ; push dummy for flag + ENDIF + STMFD r0!, {lr} ; push exec_return register + + TST lr, #0x04 ; if(!EXC_RETURN[2]) + ITE EQ + MSREQ msp, r0 ; [2]=0 ==> Z=1, update stack pointer to MSP. + MSRNE psp, r0 ; [2]=1 ==> Z=0, update stack pointer to PSP. + + PUSH {lr} + BL rt_hw_hard_fault_exception + POP {lr} + + ORR lr, lr, #0x04 + BX lr + ENDP + + ALIGN 4 + + END diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpu_cache.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpu_cache.c new file mode 100644 index 0000000000..4a1a9c2201 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpu_cache.c @@ -0,0 +1,89 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-04-02 tanek first implementation + * 2019-04-27 misonyo update to cortex-m7 series + */ + +#include +#include +#include + +/* The L1-caches on all Cortex®-M7s are divided into lines of 32 bytes. */ +#define L1CACHE_LINESIZE_BYTE (32) + +void rt_hw_cpu_icache_enable(void) +{ + SCB_EnableICache(); +} + +void rt_hw_cpu_icache_disable(void) +{ + SCB_DisableICache(); +} + +rt_base_t rt_hw_cpu_icache_status(void) +{ + return 0; +} + +void rt_hw_cpu_icache_ops(int ops, void* addr, int size) +{ + rt_uint32_t address = (rt_uint32_t)addr & (rt_uint32_t) ~(L1CACHE_LINESIZE_BYTE - 1); + rt_int32_t size_byte = size + address - (rt_uint32_t)addr; + rt_uint32_t linesize = 32U; + if (ops & RT_HW_CACHE_INVALIDATE) + { + __DSB(); + while (size_byte > 0) + { + SCB->ICIMVAU = address; + address += linesize; + size_byte -= linesize; + } + __DSB(); + __ISB(); + } +} + +void rt_hw_cpu_dcache_enable(void) +{ + SCB_EnableDCache(); +} + +void rt_hw_cpu_dcache_disable(void) +{ + SCB_DisableDCache(); +} + +rt_base_t rt_hw_cpu_dcache_status(void) +{ + return 0; +} + +void rt_hw_cpu_dcache_ops(int ops, void* addr, int size) +{ + rt_uint32_t startAddr = (rt_uint32_t)addr & (rt_uint32_t)~(L1CACHE_LINESIZE_BYTE - 1); + rt_uint32_t size_byte = size + (rt_uint32_t)addr - startAddr; + + if (ops & (RT_HW_CACHE_FLUSH | RT_HW_CACHE_INVALIDATE)) + { + SCB_CleanInvalidateDCache_by_Addr((rt_uint32_t *)startAddr, size_byte); + } + else if (ops & RT_HW_CACHE_FLUSH) + { + SCB_CleanDCache_by_Addr((rt_uint32_t *)startAddr, size_byte); + } + else if (ops & RT_HW_CACHE_INVALIDATE) + { + SCB_InvalidateDCache_by_Addr((rt_uint32_t *)startAddr, size_byte); + } + else + { + RT_ASSERT(0); + } +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpuport.c new file mode 100644 index 0000000000..18f027895b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-m7/cpuport.c @@ -0,0 +1,487 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2011-10-21 Bernard the first version. + * 2011-10-27 aozima update for cortex-M4 FPU. + * 2011-12-31 aozima fixed stack align issues. + * 2012-01-01 aozima support context switch load/store FPU register. + * 2012-12-11 lgnq fixed the coding style. + * 2012-12-23 aozima stack addr align to 8byte. + * 2012-12-29 Bernard Add exception hook. + * 2013-06-23 aozima support lazy stack optimized. + * 2018-07-24 aozima enhancement hard fault exception handler. + */ + +#include + +#if /* ARMCC */ ( (defined ( __CC_ARM ) && defined ( __TARGET_FPU_VFP )) \ + /* Clang */ || (defined ( __CLANG_ARM ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) \ + /* IAR */ || (defined ( __ICCARM__ ) && defined ( __ARMVFP__ )) \ + /* GNU */ || (defined ( __GNUC__ ) && defined ( __VFP_FP__ ) && !defined(__SOFTFP__)) ) +#define USE_FPU 1 +#else +#define USE_FPU 0 +#endif + +/* exception and interrupt handler table */ +rt_uint32_t rt_interrupt_from_thread; +rt_uint32_t rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; +/* exception hook */ +static rt_err_t (*rt_exception_hook)(void *context) = RT_NULL; + +struct exception_stack_frame +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; +}; + +struct stack_frame +{ +#if USE_FPU + rt_uint32_t flag; +#endif /* USE_FPU */ + + /* r4 ~ r11 register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + + struct exception_stack_frame exception_stack_frame; +}; + +struct exception_stack_frame_fpu +{ + rt_uint32_t r0; + rt_uint32_t r1; + rt_uint32_t r2; + rt_uint32_t r3; + rt_uint32_t r12; + rt_uint32_t lr; + rt_uint32_t pc; + rt_uint32_t psr; + +#if USE_FPU + /* FPU register */ + rt_uint32_t S0; + rt_uint32_t S1; + rt_uint32_t S2; + rt_uint32_t S3; + rt_uint32_t S4; + rt_uint32_t S5; + rt_uint32_t S6; + rt_uint32_t S7; + rt_uint32_t S8; + rt_uint32_t S9; + rt_uint32_t S10; + rt_uint32_t S11; + rt_uint32_t S12; + rt_uint32_t S13; + rt_uint32_t S14; + rt_uint32_t S15; + rt_uint32_t FPSCR; + rt_uint32_t NO_NAME; +#endif +}; + +struct stack_frame_fpu +{ + rt_uint32_t flag; + + /* r4 ~ r11 register */ + rt_uint32_t r4; + rt_uint32_t r5; + rt_uint32_t r6; + rt_uint32_t r7; + rt_uint32_t r8; + rt_uint32_t r9; + rt_uint32_t r10; + rt_uint32_t r11; + +#if USE_FPU + /* FPU register s16 ~ s31 */ + rt_uint32_t s16; + rt_uint32_t s17; + rt_uint32_t s18; + rt_uint32_t s19; + rt_uint32_t s20; + rt_uint32_t s21; + rt_uint32_t s22; + rt_uint32_t s23; + rt_uint32_t s24; + rt_uint32_t s25; + rt_uint32_t s26; + rt_uint32_t s27; + rt_uint32_t s28; + rt_uint32_t s29; + rt_uint32_t s30; + rt_uint32_t s31; +#endif + + struct exception_stack_frame_fpu exception_stack_frame; +}; + +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct stack_frame *stack_frame; + rt_uint8_t *stk; + unsigned long i; + + stk = stack_addr + sizeof(rt_uint32_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8); + stk -= sizeof(struct stack_frame); + + stack_frame = (struct stack_frame *)stk; + + /* init all register */ + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_uint32_t); i ++) + { + ((rt_uint32_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->exception_stack_frame.r0 = (unsigned long)parameter; /* r0 : argument */ + stack_frame->exception_stack_frame.r1 = 0; /* r1 */ + stack_frame->exception_stack_frame.r2 = 0; /* r2 */ + stack_frame->exception_stack_frame.r3 = 0; /* r3 */ + stack_frame->exception_stack_frame.r12 = 0; /* r12 */ + stack_frame->exception_stack_frame.lr = (unsigned long)texit; /* lr */ + stack_frame->exception_stack_frame.pc = (unsigned long)tentry; /* entry point, pc */ + stack_frame->exception_stack_frame.psr = 0x01000000L; /* PSR */ + +#if USE_FPU + stack_frame->flag = 0; +#endif /* USE_FPU */ + + /* return task's current stack address */ + return stk; +} + +/** + * This function set the hook, which is invoked on fault exception handling. + * + * @param exception_handle the exception handling hook function. + */ +void rt_hw_exception_install(rt_err_t (*exception_handle)(void *context)) +{ + rt_exception_hook = exception_handle; +} + +#define SCB_CFSR (*(volatile const unsigned *)0xE000ED28) /* Configurable Fault Status Register */ +#define SCB_HFSR (*(volatile const unsigned *)0xE000ED2C) /* HardFault Status Register */ +#define SCB_MMAR (*(volatile const unsigned *)0xE000ED34) /* MemManage Fault Address register */ +#define SCB_BFAR (*(volatile const unsigned *)0xE000ED38) /* Bus Fault Address Register */ +#define SCB_AIRCR (*(volatile unsigned long *)0xE000ED0C) /* Reset control Address Register */ +#define SCB_RESET_VALUE 0x05FA0004 /* Reset value, write to SCB_AIRCR can reset cpu */ + +#define SCB_CFSR_MFSR (*(volatile const unsigned char*)0xE000ED28) /* Memory-management Fault Status Register */ +#define SCB_CFSR_BFSR (*(volatile const unsigned char*)0xE000ED29) /* Bus Fault Status Register */ +#define SCB_CFSR_UFSR (*(volatile const unsigned short*)0xE000ED2A) /* Usage Fault Status Register */ + +#ifdef RT_USING_FINSH +static void usage_fault_track(void) +{ + rt_kprintf("usage fault:\n"); + rt_kprintf("SCB_CFSR_UFSR:0x%02X ", SCB_CFSR_UFSR); + + if(SCB_CFSR_UFSR & (1<<0)) + { + /* [0]:UNDEFINSTR */ + rt_kprintf("UNDEFINSTR "); + } + + if(SCB_CFSR_UFSR & (1<<1)) + { + /* [1]:INVSTATE */ + rt_kprintf("INVSTATE "); + } + + if(SCB_CFSR_UFSR & (1<<2)) + { + /* [2]:INVPC */ + rt_kprintf("INVPC "); + } + + if(SCB_CFSR_UFSR & (1<<3)) + { + /* [3]:NOCP */ + rt_kprintf("NOCP "); + } + + if(SCB_CFSR_UFSR & (1<<8)) + { + /* [8]:UNALIGNED */ + rt_kprintf("UNALIGNED "); + } + + if(SCB_CFSR_UFSR & (1<<9)) + { + /* [9]:DIVBYZERO */ + rt_kprintf("DIVBYZERO "); + } + + rt_kprintf("\n"); +} + +static void bus_fault_track(void) +{ + rt_kprintf("bus fault:\n"); + rt_kprintf("SCB_CFSR_BFSR:0x%02X ", SCB_CFSR_BFSR); + + if(SCB_CFSR_BFSR & (1<<0)) + { + /* [0]:IBUSERR */ + rt_kprintf("IBUSERR "); + } + + if(SCB_CFSR_BFSR & (1<<1)) + { + /* [1]:PRECISERR */ + rt_kprintf("PRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<2)) + { + /* [2]:IMPRECISERR */ + rt_kprintf("IMPRECISERR "); + } + + if(SCB_CFSR_BFSR & (1<<3)) + { + /* [3]:UNSTKERR */ + rt_kprintf("UNSTKERR "); + } + + if(SCB_CFSR_BFSR & (1<<4)) + { + /* [4]:STKERR */ + rt_kprintf("STKERR "); + } + + if(SCB_CFSR_BFSR & (1<<7)) + { + rt_kprintf("SCB->BFAR:%08X\n", SCB_BFAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void mem_manage_fault_track(void) +{ + rt_kprintf("mem manage fault:\n"); + rt_kprintf("SCB_CFSR_MFSR:0x%02X ", SCB_CFSR_MFSR); + + if(SCB_CFSR_MFSR & (1<<0)) + { + /* [0]:IACCVIOL */ + rt_kprintf("IACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<1)) + { + /* [1]:DACCVIOL */ + rt_kprintf("DACCVIOL "); + } + + if(SCB_CFSR_MFSR & (1<<3)) + { + /* [3]:MUNSTKERR */ + rt_kprintf("MUNSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<4)) + { + /* [4]:MSTKERR */ + rt_kprintf("MSTKERR "); + } + + if(SCB_CFSR_MFSR & (1<<7)) + { + /* [7]:MMARVALID */ + rt_kprintf("SCB->MMAR:%08X\n", SCB_MMAR); + } + else + { + rt_kprintf("\n"); + } +} + +static void hard_fault_track(void) +{ + if(SCB_HFSR & (1UL<<1)) + { + /* [1]:VECTBL, Indicates hard fault is caused by failed vector fetch. */ + rt_kprintf("failed vector fetch\n"); + } + + if(SCB_HFSR & (1UL<<30)) + { + /* [30]:FORCED, Indicates hard fault is taken because of bus fault, + memory management fault, or usage fault. */ + if(SCB_CFSR_BFSR) + { + bus_fault_track(); + } + + if(SCB_CFSR_MFSR) + { + mem_manage_fault_track(); + } + + if(SCB_CFSR_UFSR) + { + usage_fault_track(); + } + } + + if(SCB_HFSR & (1UL<<31)) + { + /* [31]:DEBUGEVT, Indicates hard fault is triggered by debug event. */ + rt_kprintf("debug event\n"); + } +} +#endif /* RT_USING_FINSH */ + +struct exception_info +{ + rt_uint32_t exc_return; + struct stack_frame stack_frame; +}; + +void rt_hw_hard_fault_exception(struct exception_info *exception_info) +{ + extern long list_thread(void); + struct exception_stack_frame *exception_stack = &exception_info->stack_frame.exception_stack_frame; + struct stack_frame *context = &exception_info->stack_frame; + + if (rt_exception_hook != RT_NULL) + { + rt_err_t result; + + result = rt_exception_hook(exception_stack); + if (result == RT_EOK) return; + } + + rt_kprintf("psr: 0x%08x\n", context->exception_stack_frame.psr); + + rt_kprintf("r00: 0x%08x\n", context->exception_stack_frame.r0); + rt_kprintf("r01: 0x%08x\n", context->exception_stack_frame.r1); + rt_kprintf("r02: 0x%08x\n", context->exception_stack_frame.r2); + rt_kprintf("r03: 0x%08x\n", context->exception_stack_frame.r3); + rt_kprintf("r04: 0x%08x\n", context->r4); + rt_kprintf("r05: 0x%08x\n", context->r5); + rt_kprintf("r06: 0x%08x\n", context->r6); + rt_kprintf("r07: 0x%08x\n", context->r7); + rt_kprintf("r08: 0x%08x\n", context->r8); + rt_kprintf("r09: 0x%08x\n", context->r9); + rt_kprintf("r10: 0x%08x\n", context->r10); + rt_kprintf("r11: 0x%08x\n", context->r11); + rt_kprintf("r12: 0x%08x\n", context->exception_stack_frame.r12); + rt_kprintf(" lr: 0x%08x\n", context->exception_stack_frame.lr); + rt_kprintf(" pc: 0x%08x\n", context->exception_stack_frame.pc); + + if (exception_info->exc_return & (1 << 2)) + { + rt_kprintf("hard fault on thread: %s\r\n\r\n", rt_thread_self()->name); + +#ifdef RT_USING_FINSH + list_thread(); +#endif + } + else + { + rt_kprintf("hard fault on handler\r\n\r\n"); + } + + if ( (exception_info->exc_return & 0x10) == 0) + { + rt_kprintf("FPU active!\r\n"); + } + +#ifdef RT_USING_FINSH + hard_fault_track(); +#endif /* RT_USING_FINSH */ + + while (1); +} + +/** + * shutdown CPU + */ +void rt_hw_cpu_shutdown(void) +{ + rt_kprintf("shutdown...\n"); + + RT_ASSERT(0); +} + +/** + * reset CPU + */ +RT_WEAK void rt_hw_cpu_reset(void) +{ + SCB_AIRCR = SCB_RESET_VALUE; +} + +#ifdef RT_USING_CPU_FFS +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +#if defined(__CC_ARM) || defined(__CLANG_ARM) +__asm int __rt_ffs(int value) +{ + CMP r0, #0x00 + BEQ exit + + RBIT r0, r0 + CLZ r0, r0 + ADDS r0, r0, #0x01 + +exit + BX lr +} +#elif defined(__IAR_SYSTEMS_ICC__) +int __rt_ffs(int value) +{ + if (value == 0) return value; + + asm("RBIT %0, %1" : "=r"(value) : "r"(value)); + asm("CLZ %0, %1" : "=r"(value) : "r"(value)); + asm("ADDS %0, %1, #0x01" : "=r"(value) : "r"(value)); + + return value; +} +#elif defined(__GNUC__) +int __rt_ffs(int value) +{ + return __builtin_ffs(value); +} +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/armv7.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/armv7.h new file mode 100644 index 0000000000..3adcb92c5d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/armv7.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +#ifndef __ARMV7_H__ +#define __ARMV7_H__ + +#ifndef VFP_DATA_NR +#define VFP_DATA_NR 32 +#endif + +/* the exception stack without VFP registers */ +struct rt_hw_exp_stack +{ + unsigned long r0; + unsigned long r1; + unsigned long r2; + unsigned long r3; + unsigned long r4; + unsigned long r5; + unsigned long r6; + unsigned long r7; + unsigned long r8; + unsigned long r9; + unsigned long r10; + unsigned long fp; + unsigned long ip; + unsigned long sp; + unsigned long lr; + unsigned long pc; + unsigned long cpsr; +}; + +#define USERMODE 0x10 +#define FIQMODE 0x11 +#define IRQMODE 0x12 +#define SVCMODE 0x13 +#define MONITORMODE 0x16 +#define ABORTMODE 0x17 +#define HYPMODE 0x1b +#define UNDEFMODE 0x1b +#define MODEMASK 0x1f +#define NOINT 0xc0 + +#define T_Bit (1<<5) +#define F_Bit (1<<6) +#define I_Bit (1<<7) +#define A_Bit (1<<8) +#define E_Bit (1<<9) +#define J_Bit (1<<24) + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_ccs.asm b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_ccs.asm new file mode 100644 index 0000000000..9463556743 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_ccs.asm @@ -0,0 +1,260 @@ +;/* +; * Copyright (c) 2006-2018, RT-Thread Development Team +; * +; * SPDX-License-Identifier: Apache-2.0 +; * +; * Change Logs: +; * Date Author Notes +; * 2009-01-20 Bernard first version +; * 2011-07-22 Bernard added thumb mode porting +; * 2013-05-24 Grissiom port to CCS +; * 2013-05-26 Grissiom optimize for ARMv7 +; */ + + .text + .arm + .ref rt_thread_switch_interrupt_flag + .ref rt_interrupt_from_thread + .ref rt_interrupt_to_thread + .ref rt_interrupt_enter + .ref rt_interrupt_leave + .ref rt_hw_trap_irq + +;/* +; * rt_base_t rt_hw_interrupt_disable(); +; */ + .def rt_hw_interrupt_disable + .asmfunc +rt_hw_interrupt_disable + MRS r0, cpsr + CPSID IF + BX lr + .endasmfunc + +;/* +; * void rt_hw_interrupt_enable(rt_base_t level); +; */ + .def rt_hw_interrupt_enable + .asmfunc +rt_hw_interrupt_enable + MSR cpsr_c, r0 + BX lr + .endasmfunc + +;/* +; * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); +; * r0 --> from +; * r1 --> to +; */ + .def rt_hw_context_switch + .asmfunc +rt_hw_context_switch + STMDB sp!, {lr} ; push pc (lr should be pushed in place of PC) + STMDB sp!, {r0-r12, lr} ; push lr & register file + + MRS r4, cpsr + TST lr, #0x01 + ORRNE r4, r4, #0x20 ; it's thumb code + + STMDB sp!, {r4} ; push cpsr + + .if (__TI_VFP_SUPPORT__) + VMRS r4, fpexc + TST r4, #0x40000000 + BEQ __no_vfp_frame1 + VSTMDB sp!, {d0-d15} + VMRS r5, fpscr + ; TODO: add support for Common VFPv3. + ; Save registers like FPINST, FPINST2 + STMDB sp!, {r5} +__no_vfp_frame1 + STMDB sp!, {r4} + .endif + + STR sp, [r0] ; store sp in preempted tasks TCB + LDR sp, [r1] ; get new task stack pointer + + .if (__TI_VFP_SUPPORT__) + LDMIA sp!, {r0} ; get fpexc + VMSR fpexc, r0 ; restore fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame2 + LDMIA sp!, {r1} ; get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame2 + .endif + + LDMIA sp!, {r4} ; pop new task cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12, lr, pc}^ ; pop new task r0-r12, lr & pc, copy spsr to cpsr + .endasmfunc + +;/* +; * void rt_hw_context_switch_to(rt_uint32 to); +; * r0 --> to +; */ + .def rt_hw_context_switch_to + .asmfunc +rt_hw_context_switch_to + LDR sp, [r0] ; get new task stack pointer + + .if (__TI_VFP_SUPPORT__) + LDMIA sp!, {r0} ; get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_to + LDMIA sp!, {r1} ; get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_to + .endif + + LDMIA sp!, {r4} ; pop new task cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12, lr, pc}^ ; pop new task r0-r12, lr & pc, copy spsr to cpsr + .endasmfunc + +;/* +; * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); +; */ + + .def rt_hw_context_switch_interrupt + .asmfunc +rt_hw_context_switch_interrupt + LDR r2, pintflag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 ; set rt_thread_switch_interrupt_flag to 1 + STR r3, [r2] + LDR r2, pfromthread ; set rt_interrupt_from_thread + STR r0, [r2] +_reswitch + LDR r2, ptothread ; set rt_interrupt_to_thread + STR r1, [r2] + BX lr + .endasmfunc + + .def IRQ_Handler +IRQ_Handler + STMDB sp!, {r0-r12,lr} + + .if (__TI_VFP_SUPPORT__) + VMRS r0, fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame_str_irq + VSTMDB sp!, {d0-d15} + VMRS r1, fpscr + ; TODO: add support for Common VFPv3. + ; Save registers like FPINST, FPINST2 + STMDB sp!, {r1} +__no_vfp_frame_str_irq + STMDB sp!, {r0} + .endif + + BL rt_interrupt_enter + BL rt_hw_trap_irq + BL rt_interrupt_leave + + ; if rt_thread_switch_interrupt_flag set, jump to + ; rt_hw_context_switch_interrupt_do and don't return + LDR r0, pintflag + LDR r1, [r0] + CMP r1, #1 + BEQ rt_hw_context_switch_interrupt_do + + .if (__TI_VFP_SUPPORT__) + LDMIA sp!, {r0} ; get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_ldr_irq + LDMIA sp!, {r1} ; get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_ldr_irq + .endif + + LDMIA sp!, {r0-r12,lr} + SUBS pc, lr, #4 + +; /* +; * void rt_hw_context_switch_interrupt_do(rt_base_t flag) +; */ + .def rt_hw_context_switch_interrupt_do +rt_hw_context_switch_interrupt_do + MOV r1, #0 ; clear flag + STR r1, [r0] + + .if (__TI_VFP_SUPPORT__) + LDMIA sp!, {r0} ; get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_do1 + LDMIA sp!, {r1} ; get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_do1 + .endif + + LDMIA sp!, {r0-r12,lr} ; reload saved registers + STMDB sp, {r0-r3} ; save r0-r3. We will restore r0-r3 in the SVC + ; mode so there is no need to update SP. + SUB r1, sp, #16 ; save the right SP value in r1, so we could restore r0-r3. + SUB r2, lr, #4 ; save old task's pc to r2 + + MRS r3, spsr ; get cpsr of interrupt thread + + ; switch to SVC mode and no interrupt + CPSID IF, #0x13 + + STMDB sp!, {r2} ; push old task's pc + STMDB sp!, {r4-r12,lr} ; push old task's lr,r12-r4 + LDMIA r1!, {r4-r7} ; restore r0-r3 of the interrupted thread + STMDB sp!, {r4-r7} ; push old task's r3-r0. We don't need to push/pop them to + ; r0-r3 because we just want to transfer the data and don't + ; use them here. + STMDB sp!, {r3} ; push old task's cpsr + + .if (__TI_VFP_SUPPORT__) + VMRS r0, fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame_do2 + VSTMDB sp!, {d0-d15} + VMRS r1, fpscr + ; TODO: add support for Common VFPv3. + ; Save registers like FPINST, FPINST2 + STMDB sp!, {r1} +__no_vfp_frame_do2 + STMDB sp!, {r0} + .endif + + LDR r4, pfromthread + LDR r5, [r4] + STR sp, [r5] ; store sp in preempted tasks's TCB + + LDR r6, ptothread + LDR r6, [r6] + LDR sp, [r6] ; get new task's stack pointer + + .if (__TI_VFP_SUPPORT__) + LDMIA sp!, {r0} ; get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_do3 + LDMIA sp!, {r1} ; get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_do3 + .endif + + LDMIA sp!, {r4} ; pop new task's cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12,lr,pc}^ ; pop new task's r0-r12,lr & pc, copy spsr to cpsr + +pintflag .word rt_thread_switch_interrupt_flag +pfromthread .word rt_interrupt_from_thread +ptothread .word rt_interrupt_to_thread diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_gcc.S new file mode 100644 index 0000000000..50e1069c06 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/context_gcc.S @@ -0,0 +1,251 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2009-01-20 Bernard first version + * 2011-07-22 Bernard added thumb mode porting + * 2013-05-24 Grissiom port to CCS + * 2013-05-26 Grissiom optimize for ARMv7 + * 2013-10-20 Grissiom port to GCC + */ + +#include + + .text + .arm + .globl rt_thread_switch_interrupt_flag + .globl rt_interrupt_from_thread + .globl rt_interrupt_to_thread + .globl rt_interrupt_enter + .globl rt_interrupt_leave + .globl rt_hw_trap_irq + +/* + * rt_base_t rt_hw_interrupt_disable() + */ + .globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + MRS r0, cpsr + CPSID IF + BX lr + +/* + * void rt_hw_interrupt_enable(rt_base_t level) + */ + .globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + MSR cpsr_c, r0 + BX lr + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to) + * r0 --> from + * r1 --> to + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + STMDB sp!, {lr} @ push pc (lr should be pushed in place of PC) + STMDB sp!, {r0-r12, lr} @ push lr & register file + + MRS r4, cpsr + TST lr, #0x01 + ORRNE r4, r4, #0x20 @ it's thumb code + + STMDB sp!, {r4} @ push cpsr + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + VMRS r4, fpexc + TST r4, #0x40000000 + BEQ __no_vfp_frame1 + VSTMDB sp!, {d0-d15} + VMRS r5, fpscr + @ TODO: add support for Common VFPv3. + @ Save registers like FPINST, FPINST2 + STMDB sp!, {r5} +__no_vfp_frame1: + STMDB sp!, {r4} +#endif + + STR sp, [r0] @ store sp in preempted tasks TCB + LDR sp, [r1] @ get new task stack pointer + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + LDMIA sp!, {r0} @ get fpexc + VMSR fpexc, r0 @ restore fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame2 + LDMIA sp!, {r1} @ get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame2: + #endif + + LDMIA sp!, {r4} @ pop new task cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12, lr, pc}^ @ pop new task r0-r12, lr & pc, copy spsr to cpsr + +/* + * void rt_hw_context_switch_to(rt_uint32 to) + * r0 --> to + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: + LDR sp, [r0] @ get new task stack pointer + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + LDMIA sp!, {r0} @ get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_to + LDMIA sp!, {r1} @ get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_to: +#endif + + LDMIA sp!, {r4} @ pop new task cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12, lr, pc}^ @ pop new task r0-r12, lr & pc, copy spsr to cpsr + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to)@ + */ + + .globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + LDR r2, =rt_thread_switch_interrupt_flag + LDR r3, [r2] + CMP r3, #1 + BEQ _reswitch + MOV r3, #1 @ set rt_thread_switch_interrupt_flag to 1 + STR r3, [r2] + LDR r2, =rt_interrupt_from_thread @ set rt_interrupt_from_thread + + STR r0, [r2] +_reswitch: + LDR r2, =rt_interrupt_to_thread @ set rt_interrupt_to_thread + STR r1, [r2] + BX lr + + .globl IRQ_Handler +IRQ_Handler: + STMDB sp!, {r0-r12,lr} + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + VMRS r0, fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame_str_irq + VSTMDB sp!, {d0-d15} + VMRS r1, fpscr + @ TODO: add support for Common VFPv3. + @ Save registers like FPINST, FPINST2 + STMDB sp!, {r1} +__no_vfp_frame_str_irq: + STMDB sp!, {r0} +#endif + + BL rt_interrupt_enter + BL rt_hw_trap_irq + BL rt_interrupt_leave + + @ if rt_thread_switch_interrupt_flag set, jump to + @ rt_hw_context_switch_interrupt_do and don't return + LDR r0, =rt_thread_switch_interrupt_flag + LDR r1, [r0] + CMP r1, #1 + BEQ rt_hw_context_switch_interrupt_do + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + LDMIA sp!, {r0} @ get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_ldr_irq + LDMIA sp!, {r1} @ get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_ldr_irq: +#endif + + LDMIA sp!, {r0-r12,lr} + SUBS pc, lr, #4 + +/* + * void rt_hw_context_switch_interrupt_do(rt_base_t flag) + */ + .globl rt_hw_context_switch_interrupt_do +rt_hw_context_switch_interrupt_do: + MOV r1, #0 @ clear flag + STR r1, [r0] + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + LDMIA sp!, {r0} @ get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_do1 + LDMIA sp!, {r1} @ get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_do1: +#endif + + LDMIA sp!, {r0-r12,lr} @ reload saved registers + STMDB sp, {r0-r3} @ save r0-r3. We will restore r0-r3 in the SVC + @ mode so there is no need to update SP. + SUB r1, sp, #16 @ save the right SP value in r1, so we could restore r0-r3. + SUB r2, lr, #4 @ save old task's pc to r2 + + MRS r3, spsr @ get cpsr of interrupt thread + + @ switch to SVC mode and no interrupt + CPSID IF, #0x13 + + STMDB sp!, {r2} @ push old task's pc + STMDB sp!, {r4-r12,lr} @ push old task's lr,r12-r4 + LDMIA r1!, {r4-r7} @ restore r0-r3 of the interrupted thread + STMDB sp!, {r4-r7} @ push old task's r3-r0. We don't need to push/pop them to + @ r0-r3 because we just want to transfer the data and don't + @ use them here. + STMDB sp!, {r3} @ push old task's cpsr + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + VMRS r0, fpexc + TST r0, #0x40000000 + BEQ __no_vfp_frame_do2 + VSTMDB sp!, {d0-d15} + VMRS r1, fpscr + @ TODO: add support for Common VFPv3. + @ Save registers like FPINST, FPINST2 + STMDB sp!, {r1} +__no_vfp_frame_do2: + STMDB sp!, {r0} +#endif + + LDR r4, =rt_interrupt_from_thread + LDR r5, [r4] + STR sp, [r5] @ store sp in preempted tasks's TCB + + LDR r6, =rt_interrupt_to_thread + LDR r6, [r6] + LDR sp, [r6] @ get new task's stack pointer + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + LDMIA sp!, {r0} @ get fpexc + VMSR fpexc, r0 + TST r0, #0x40000000 + BEQ __no_vfp_frame_do3 + LDMIA sp!, {r1} @ get fpscr + VMSR fpscr, r1 + VLDMIA sp!, {d0-d15} +__no_vfp_frame_do3: +#endif + + LDMIA sp!, {r4} @ pop new task's cpsr to spsr + MSR spsr_cxsf, r4 + + LDMIA sp!, {r0-r12,lr,pc}^ @ pop new task's r0-r12,lr & pc, copy spsr to cpsr + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/cpu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/cpu.c new file mode 100644 index 0000000000..d2e8130e7c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/cpu.c @@ -0,0 +1,95 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-12-11 XuXinming first version + * 2013-05-24 Grissiom port to RM48x50 + */ + +#include + +/** + * @addtogroup RM48x50 + */ +/*@{*/ + +/** + * this function will reset CPU + * + */ +void rt_hw_cpu_reset() +{ +} + +/** + * this function will shutdown CPU + * + */ +void rt_hw_cpu_shutdown() +{ + rt_kprintf("shutdown...\n"); + + while (1); +} + +#ifdef __TI_COMPILER_VERSION__ +#ifdef RT_USING_CPU_FFS +int __rt_ffs(int value) +{ + if (value == 0) + return value; + + __asm(" rsb r1, r0, #0"); + __asm(" and r1, r1, r0"); + __asm(" clz r1, r1"); + __asm(" rsb r0, r1, #32"); +} +#endif + +void rt_hw_cpu_icache_enable() +{ + __asm(" MRC p15, #0, r1, c1, c0, #0 ; Read SCTLR configuration data"); + __asm(" ORR r1, r1, #0x1 <<12 ; instruction cache enable"); + __asm(" MCR p15, #0, r0, c7, c5, #0 ; Invalidate entire instruction cache, r0 is ignored"); + __asm(" MCR p15, #0, r1, c1, c0, #0 ; enabled instruction cache"); + __asm(" ISB"); +} + +void rt_hw_cpu_icache_disable() +{ + __asm(" MRC p15, #0, r1, c1, c0, #0 ; Read SCTLR configuration data"); + __asm(" BIC r1, r1, #0x1 <<12 ; instruction cache enable"); + __asm(" MCR p15, #0, r1, c1, c0, #0 ; disabled instruction cache"); + __asm(" ISB"); +} + +void rt_hw_cpu_dcache_enable() +{ + __asm(" MRC p15, #0, R1, c1, c0, #0 ; Read SCTLR configuration data"); + __asm(" ORR R1, R1, #0x1 <<2"); + __asm(" DSB"); + __asm(" MCR p15, #0, r0, c15, c5, #0 ; Invalidate entire data cache"); + __asm(" MCR p15, #0, R1, c1, c0, #0 ; enabled data cache"); +} + +void rt_hw_cpu_dcache_disable() +{ + /* FIXME: Clean entire data cache. This routine depends on the data cache + * size. It can be omitted if it is known that the data cache has no dirty + * data. */ + __asm(" MRC p15, #0, r1, c1, c0, #0 ; Read SCTLR configuration data"); + __asm(" BIC r1, r1, #0x1 <<2"); + __asm(" DSB"); + __asm(" MCR p15, #0, r1, c1, c0, #0 ; disabled data cache"); +} + +#elif __GNUC__ +int __rt_ffs(int value) +{ + return __builtin_ffs(value); +} +#endif +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/interrupt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/interrupt.c new file mode 100644 index 0000000000..30e14f5a2d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/interrupt.c @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-12-11 XuXinming first version + * 2013-03-29 aozima Modify the interrupt interface implementations. + */ + +#include +#include + +#include +#include + +#include "armv7.h" + +#define MAX_HANDLERS 96 + +/* exception and interrupt handler table */ +struct rt_irq_desc irq_desc[MAX_HANDLERS]; + +extern volatile rt_uint8_t rt_interrupt_nest; + +/* exception and interrupt handler table */ +rt_uint32_t rt_interrupt_from_thread, rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; + +/** + * @addtogroup RM48x50 + */ + +/*@{*/ + +static void rt_hw_int_not_handle(int vector, void *param) +{ + rt_kprintf("Unhandled interrupt %d occured!!!\n", vector); +} + +#define vimRAM (0xFFF82000U) + +void rt_hw_interrupt_init(void) +{ + register int i; + + rt_uint32_t *vect_addr; + + /* the initialization is done in sys_startup.c */ + + /* init exceptions table */ + rt_memset(irq_desc, 0x00, sizeof(irq_desc)); + for(i=0; i < MAX_HANDLERS; i++) + { + irq_desc[i].handler = rt_hw_int_not_handle; + + vect_addr = (rt_uint32_t *)(vimRAM + i*4); + *vect_addr = (rt_uint32_t)&irq_desc[i]; + } + + /* init interrupt nest, and context in thread sp */ + rt_interrupt_nest = 0; + rt_interrupt_from_thread = 0; + rt_interrupt_to_thread = 0; + rt_thread_switch_interrupt_flag = 0; +} + +void rt_hw_interrupt_mask(int vector) +{ + vimDisableInterrupt(vector); +} + +void rt_hw_interrupt_umask(int vector) +{ + vimEnableInterrupt(vector, SYS_IRQ); +} + +/** + * This function will install a interrupt service routine to a interrupt. + * @param vector the interrupt number + * @param handler the interrupt service routine to be installed + * @param param the parameter for interrupt service routine + * @name unused. + * + * @return the old handler + */ +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, + void *param, const char *name) +{ + rt_isr_handler_t old_handler = RT_NULL; + + if(vector >= 0 && vector < MAX_HANDLERS) + { + old_handler = irq_desc[vector].handler; + if (handler != RT_NULL) + { + irq_desc[vector].handler = handler; + irq_desc[vector].param = param; + } + } + + return old_handler; +} + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/stack.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/stack.c new file mode 100644 index 0000000000..612cde3bfb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/stack.c @@ -0,0 +1,83 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-12-11 XuXinming first version + * 2013-05-24 Grissiom port to RM48x50 + */ +#include + +#include "armv7.h" +/** + * @addtogroup RM48x50 + */ +/*@{*/ + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + rt_uint32_t *stk; + + stack_addr += sizeof(rt_uint32_t); + stack_addr = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stack_addr, 8); + stk = (rt_uint32_t *)stack_addr; + *(--stk) = (rt_uint32_t)tentry; /* entry point */ + *(--stk) = (rt_uint32_t)texit; /* lr */ + *(--stk) = 0xdeadbeef; /* r12 */ + *(--stk) = 0xdeadbeef; /* r11 */ + *(--stk) = 0xdeadbeef; /* r10 */ + *(--stk) = 0xdeadbeef; /* r9 */ + *(--stk) = 0xdeadbeef; /* r8 */ + *(--stk) = 0xdeadbeef; /* r7 */ + *(--stk) = 0xdeadbeef; /* r6 */ + *(--stk) = 0xdeadbeef; /* r5 */ + *(--stk) = 0xdeadbeef; /* r4 */ + *(--stk) = 0xdeadbeef; /* r3 */ + *(--stk) = 0xdeadbeef; /* r2 */ + *(--stk) = 0xdeadbeef; /* r1 */ + *(--stk) = (rt_uint32_t)parameter; /* r0 : argument */ + + /* cpsr */ + if ((rt_uint32_t)tentry & 0x01) + *(--stk) = SVCMODE | 0x20; /* thumb mode */ + else + *(--stk) = SVCMODE; /* arm mode */ + +#if defined(__TI_VFP_SUPPORT__) || (defined (__VFP_FP__) && !defined(__SOFTFP__)) +#ifndef RT_VFP_LAZY_STACKING + { + int i; + + for (i = 0; i < VFP_DATA_NR; i++) + { + *(--stk) = 0; + } + /* FPSCR TODO: do we need to set the values other than 0? */ + *(--stk) = 0; + /* FPEXC. Enable the FVP if no lazy stacking. */ + *(--stk) = 0x40000000; + } +#else + /* FPEXC. Disable the FVP by default. */ + *(--stk) = 0x00000000; +#endif +#endif + + /* return task's current stack address */ + return (rt_uint8_t *)stk; +} + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_ccs.asm b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_ccs.asm new file mode 100644 index 0000000000..4334fa9b0f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_ccs.asm @@ -0,0 +1,552 @@ +;------------------------------------------------------------------------------- +; sys_core.asm +; +; (c) Texas Instruments 2009-2013, All rights reserved. +; + + .text + .arm + + .ref _c_int00 + + .def _reset + .asmfunc +_reset +;------------------------------------------------------------------------------- +; Initialize CPU Registers +; 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 + ; Switch back to Supervisor Mode (M = 10011) + cps #19 + + ; Turn on FPV coprocessor + mrc p15, #0x00, r2, c1, c0, #0x02 + orr r2, r2, #0xF00000 + mcr p15, #0x00, r2, c1, c0, #0x02 + + .if (RT_VFP_LAZY_STACKING) = 0 + fmrx r2, fpexc + orr r2, 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 + .endif + +;------------------------------------------------------------------------------- +; Initialize Stack Pointers + cps #17 + ldr sp, fiqSp + cps #18 + ldr sp, irqSp + cps #23 + ldr sp, abortSp + cps #27 + ldr sp, undefSp + cps #31 + ldr sp, userSp + cps #19 + ldr sp, svcSp + + bl next1 +next1 + bl next2 +next2 + bl next3 +next3 + bl next4 +next4 + ldr lr, int00ad + bx lr + +int00ad .word _c_int00 +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 + +;------------------------------------------------------------------------------- +; Enable RAM ECC Support + + .def _coreEnableRamEcc_ + .asmfunc + +_coreEnableRamEcc_ + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable RAM ECC Support + + .def _coreDisableRamEcc_ + .asmfunc + +_coreDisableRamEcc_ + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Enable Flash ECC Support + + .def _coreEnableFlashEcc_ + .asmfunc + +_coreEnableFlashEcc_ + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x02000000 + dmb + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Disable Flash ECC Support + + .def _coreDisableFlashEcc_ + .asmfunc + +_coreDisableFlashEcc_ + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x02000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Get data fault status register + + .def _coreGetDataFault_ + .asmfunc + +_coreGetDataFault_ + + mrc p15, #0, r0, c5, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear data fault status register + + .def _coreClearDataFault_ + .asmfunc + +_coreClearDataFault_ + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c0, #0 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get instruction fault status register + + .def _coreGetInstructionFault_ + .asmfunc + +_coreGetInstructionFault_ + + mrc p15, #0, r0, c5, c0, #1 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear instruction fault status register + + .def _coreClearInstructionFault_ + .asmfunc + +_coreClearInstructionFault_ + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c0, #1 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get data fault address register + + .def _coreGetDataFaultAddress_ + .asmfunc + +_coreGetDataFaultAddress_ + + mrc p15, #0, r0, c6, c0, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear data fault address register + + .def _coreClearDataFaultAddress_ + .asmfunc + +_coreClearDataFaultAddress_ + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c6, c0, #0 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get instruction fault address register + + .def _coreGetInstructionFaultAddress_ + .asmfunc + +_coreGetInstructionFaultAddress_ + + mrc p15, #0, r0, c6, c0, #2 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear instruction fault address register + + .def _coreClearInstructionFaultAddress_ + .asmfunc + +_coreClearInstructionFaultAddress_ + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c6, c0, #2 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get auxiliary data fault status register + + .def _coreGetAuxiliaryDataFault_ + .asmfunc + +_coreGetAuxiliaryDataFault_ + + mrc p15, #0, r0, c5, c1, #0 + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Clear auxiliary data fault status register + + .def _coreClearAuxiliaryDataFault_ + .asmfunc + +_coreClearAuxiliaryDataFault_ + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c1, #0 + ldmfd sp!, {r0} + bx lr + + .endasmfunc + + +;------------------------------------------------------------------------------- +; Get auxiliary instruction fault status register + + .def _coreGetAuxiliaryInstructionFault_ + .asmfunc + +_coreGetAuxiliaryInstructionFault_ + + mrc p15, #0, r0, c5, c1, #1 + bx lr + + .endasmfunc + +;------------------------------------------------------------------------------- +; Clear auxiliary instruction fault status register + + .def _coreClearAuxiliaryInstructionFault_ + .asmfunc + +_coreClearAuxiliaryInstructionFault_ + + stmfd sp!, {r0} + mov r0, #0 + mrc p15, #0, r0, c5, c1, #1 + ldmfd sp!, {r0} + 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_ + + push {r0} + 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 + pop {r0} + 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_ + + push {r0} + 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 + pop {r0} + bx lr + .endasmfunc + + .def turnon_VFP + .asmfunc +turnon_VFP + ; Enable FPV + STMDB sp!, {r0} + fmrx r0, fpexc + orr r0, r0, #0x40000000 + fmxr fpexc, r0 + LDMIA sp!, {r0} + subs pc, lr, #4 + .endasmfunc + +_push_svc_reg .macro + sub sp, sp, #17 * 4 ;/* Sizeof(struct rt_hw_exp_stack) */ + stmia sp, {r0 - r12} ;/* Calling r0-r12 */ + mov r0, sp + mrs r6, spsr ;/* Save CPSR */ + str lr, [r0, #15*4] ;/* Push PC */ + str r6, [r0, #16*4] ;/* Push CPSR */ + cps #0x13 + str sp, [r0, #13*4] ;/* Save calling SP */ + str lr, [r0, #14*4] ;/* Save calling PC */ + .endm + + .ref rt_hw_trap_svc + .def vector_svc + .asmfunc +vector_svc: + _push_svc_reg + bl rt_hw_trap_svc + sub pc, pc, #-4 + .endasmfunc + + .ref rt_hw_trap_pabt + .def vector_pabort + .asmfunc +vector_pabort: + _push_svc_reg + bl rt_hw_trap_pabt + sub pc, pc, #-4 + .endasmfunc + + .ref rt_hw_trap_dabt + .def vector_dabort + .asmfunc +vector_dabort: + _push_svc_reg + bl rt_hw_trap_dabt + sub pc, pc, #-4 + .endasmfunc + + .ref rt_hw_trap_resv + .def vector_resv + .asmfunc +vector_resv: + _push_svc_reg + bl rt_hw_trap_resv + sub pc, pc, #-4 + .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 + +;------------------------------------------------------------------------------- diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_gcc.S new file mode 100644 index 0000000000..ab77b98781 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/start_gcc.S @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +@------------------------------------------------------------------------------- +@ sys_core.asm +@ +@ (c) Texas Instruments 2009-2013, All rights reserved. +@ + +#include + +.equ Mode_USR, 0x10 +.equ Mode_FIQ, 0x11 +.equ Mode_IRQ, 0x12 +.equ Mode_SVC, 0x13 +.equ Mode_ABT, 0x17 +.equ Mode_UND, 0x1B +.equ Mode_SYS, 0x1F + +.equ I_Bit, 0x80 @ when I bit is set, IRQ is disabled +.equ F_Bit, 0x40 @ when F bit is set, FIQ is disabled + +.equ UND_Stack_Size, 0x00000000 +.equ SVC_Stack_Size, 0x00000000 +.equ ABT_Stack_Size, 0x00000000 +.equ FIQ_Stack_Size, 0x00001000 +.equ IRQ_Stack_Size, 0x00001000 + +.section .bss.noinit +/* stack */ +.globl stack_start +.globl stack_top + +stack_start: +.rept (UND_Stack_Size + SVC_Stack_Size + ABT_Stack_Size + FIQ_Stack_Size + IRQ_Stack_Size) +.byte 0 +.endr +stack_top: + +.section .text, "ax" + .text + .arm + + .globl _c_int00 + +.globl _reset +_reset: +@------------------------------------------------------------------------------- +@ Initialize CPU Registers +@ After reset, the CPU is in the Supervisor mode (M = 10011) + cpsid if, #19 + +#if defined (__VFP_FP__) && !defined(__SOFTFP__) && defined(RT_VFP_LAZY_STACKING) + @ Turn on FPV coprocessor + mrc p15, #0x00, r2, c1, c0, #0x02 + orr r2, r2, #0xF00000 + mcr p15, #0x00, r2, c1, c0, #0x02 + + fmrx r2, fpexc + orr r2, r2, #0x40000000 + fmxr fpexc, r2 +#endif + +@------------------------------------------------------------------------------- +@ Initialize Stack Pointers + ldr r0, =stack_top + + @ Set the startup stack for svc + mov sp, r0 + + @ Enter Undefined Instruction Mode and set its Stack Pointer + msr cpsr_c, #Mode_UND|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #UND_Stack_Size + + @ Enter Abort Mode and set its Stack Pointer + msr cpsr_c, #Mode_ABT|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #ABT_Stack_Size + + @ Enter FIQ Mode and set its Stack Pointer + msr cpsr_c, #Mode_FIQ|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #FIQ_Stack_Size + + @ Enter IRQ Mode and set its Stack Pointer + msr cpsr_c, #Mode_IRQ|I_Bit|F_Bit + mov sp, r0 + sub r0, r0, #IRQ_Stack_Size + + @ Switch back to SVC + msr cpsr_c, #Mode_SVC|I_Bit|F_Bit + + bl next1 +next1: + bl next2 +next2: + bl next3 +next3: + bl next4 +next4: + ldr lr, =_c_int00 + bx lr + +.globl data_init +data_init: + /* copy .data to SRAM */ + ldr r1, =_sidata /* .data start in image */ + ldr r2, =_edata /* .data end in image */ + ldr r3, =_sdata /* sram data start */ +data_loop: + ldr r0, [r1, #0] + str r0, [r3] + + add r1, r1, #4 + add r3, r3, #4 + + cmp r3, r2 /* check if data to clear */ + blo data_loop /* loop until done */ + + /* clear .bss */ + mov r0,#0 /* get a zero */ + ldr r1,=__bss_start /* bss start */ + ldr r2,=__bss_end /* bss end */ + +bss_loop: + cmp r1,r2 /* check if data to clear */ + strlo r0,[r1],#4 /* clear 4 bytes */ + blo bss_loop /* loop until done */ + + /* call C++ constructors of global objects */ + ldr r0, =__ctors_start__ + ldr r1, =__ctors_end__ + +ctor_loop: + cmp r0, r1 + beq ctor_end + ldr r2, [r0], #4 + stmfd sp!, {r0-r3, ip, lr} + mov lr, pc + bx r2 + ldmfd sp!, {r0-r3, ip, lr} + b ctor_loop +ctor_end: + bx lr + +@------------------------------------------------------------------------------- +@ Enable RAM ECC Support + + .globl _coreEnableRamEcc_ +_coreEnableRamEcc_: + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + +@------------------------------------------------------------------------------- +@ Disable RAM ECC Support + + .globl _coreDisableRamEcc_ +_coreDisableRamEcc_: + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x0C000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + +@------------------------------------------------------------------------------- +@ Enable Flash ECC Support + + .globl _coreEnableFlashEcc_ +_coreEnableFlashEcc_: + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + orr r0, r0, #0x02000000 + dmb + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + +@------------------------------------------------------------------------------- +@ Disable Flash ECC Support + + .globl _coreDisableFlashEcc_ +_coreDisableFlashEcc_: + + stmfd sp!, {r0} + mrc p15, #0x00, r0, c1, c0, #0x01 + bic r0, r0, #0x02000000 + mcr p15, #0x00, r0, c1, c0, #0x01 + ldmfd sp!, {r0} + bx lr + + +@------------------------------------------------------------------------------- +@ Get data fault status register + + .globl _coreGetDataFault_ +_coreGetDataFault_: + + mrc p15, #0, r0, c5, c0, #0 + bx lr + + + +@------------------------------------------------------------------------------- +@ Clear data fault status register + + .globl _coreClearDataFault_ +_coreClearDataFault_: + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c0, #0 + ldmfd sp!, {r0} + bx lr + + + +@------------------------------------------------------------------------------- +@ Get instruction fault status register + + .globl _coreGetInstructionFault_ +_coreGetInstructionFault_: + + mrc p15, #0, r0, c5, c0, #1 + bx lr + + + +@------------------------------------------------------------------------------- +@ Clear instruction fault status register + + .globl _coreClearInstructionFault_ +_coreClearInstructionFault_: + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c0, #1 + ldmfd sp!, {r0} + bx lr + + + +@------------------------------------------------------------------------------- +@ Get data fault address register + + .globl _coreGetDataFaultAddress_ +_coreGetDataFaultAddress_: + + mrc p15, #0, r0, c6, c0, #0 + bx lr + + + +@------------------------------------------------------------------------------- +@ Clear data fault address register + + .globl _coreClearDataFaultAddress_ +_coreClearDataFaultAddress_: + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c6, c0, #0 + ldmfd sp!, {r0} + bx lr + + + +@------------------------------------------------------------------------------- +@ Get instruction fault address register + + .globl _coreGetInstructionFaultAddress_ +_coreGetInstructionFaultAddress_: + + mrc p15, #0, r0, c6, c0, #2 + bx lr + + + +@------------------------------------------------------------------------------- +@ Clear instruction fault address register + + .globl _coreClearInstructionFaultAddress_ +_coreClearInstructionFaultAddress_: + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c6, c0, #2 + ldmfd sp!, {r0} + bx lr + + + +@------------------------------------------------------------------------------- +@ Get auxiliary data fault status register + + .globl _coreGetAuxiliaryDataFault_ +_coreGetAuxiliaryDataFault_: + + mrc p15, #0, r0, c5, c1, #0 + bx lr + + + +@------------------------------------------------------------------------------- +@ Clear auxiliary data fault status register + + .globl _coreClearAuxiliaryDataFault_ +_coreClearAuxiliaryDataFault_: + + stmfd sp!, {r0} + mov r0, #0 + mcr p15, #0, r0, c5, c1, #0 + ldmfd sp!, {r0} + bx lr + + + +@------------------------------------------------------------------------------- +@ Get auxiliary instruction fault status register + + .globl _coreGetAuxiliaryInstructionFault_ +_coreGetAuxiliaryInstructionFault_: + + mrc p15, #0, r0, c5, c1, #1 + bx lr + + +@------------------------------------------------------------------------------- +@ Clear auxiliary instruction fault status register + + .globl _coreClearAuxiliaryInstructionFault_ +_coreClearAuxiliaryInstructionFault_: + + stmfd sp!, {r0} + mov r0, #0 + mrc p15, #0, r0, c5, c1, #1 + ldmfd sp!, {r0} + bx lr + + +@------------------------------------------------------------------------------- +@ Clear ESM CCM errorss + + .globl _esmCcmErrorsClear_ +_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 + + +@------------------------------------------------------------------------------- +@ 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 + + .globl _errata_CORTEXR4_57_ +_errata_CORTEXR4_57_: + + push {r0} + 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 + pop {r0} + bx lr + +@------------------------------------------------------------------------------- +@ 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 + + .globl _errata_CORTEXR4_66_ +_errata_CORTEXR4_66_: + + push {r0} + 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 + pop {r0} + bx lr + + .globl turnon_VFP +turnon_VFP: + @ Enable FPV + STMDB sp!, {r0} + fmrx r0, fpexc + orr r0, r0, #0x40000000 + fmxr fpexc, r0 + LDMIA sp!, {r0} + subs pc, lr, #4 + + .macro push_svc_reg + sub sp, sp, #17 * 4 @/* Sizeof(struct rt_hw_exp_stack) */ + stmia sp, {r0 - r12} @/* Calling r0-r12 */ + mov r0, sp + mrs r6, spsr @/* Save CPSR */ + str lr, [r0, #15*4] @/* Push PC */ + str r6, [r0, #16*4] @/* Push CPSR */ + cps #Mode_SVC + str sp, [r0, #13*4] @/* Save calling SP */ + str lr, [r0, #14*4] @/* Save calling PC */ + .endm + + .globl vector_svc +vector_svc: + push_svc_reg + bl rt_hw_trap_svc + b . + + .globl vector_pabort +vector_pabort: + push_svc_reg + bl rt_hw_trap_pabt + b . + + .globl vector_dabort +vector_dabort: + push_svc_reg + bl rt_hw_trap_dabt + b . + + .globl vector_resv +vector_resv: + push_svc_reg + bl rt_hw_trap_resv + b . diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/trap.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/trap.c new file mode 100644 index 0000000000..d50ad06538 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/trap.c @@ -0,0 +1,148 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-12-11 XuXinming first version + * 2013-05-24 Grissiom port to RM48x50 + */ + +#include +#include + +#include + +#include "armv7.h" + +/** + * @addtogroup RM48x50 + */ +/*@{*/ + +/** + * this function will show registers of CPU + * + * @param regs the registers point + */ +void rt_hw_show_register (struct rt_hw_exp_stack *regs) +{ + rt_kprintf("Execption:\n"); + rt_kprintf("r00:0x%08x r01:0x%08x r02:0x%08x r03:0x%08x\n", regs->r0, regs->r1, regs->r2, regs->r3); + rt_kprintf("r04:0x%08x r05:0x%08x r06:0x%08x r07:0x%08x\n", regs->r4, regs->r5, regs->r6, regs->r7); + rt_kprintf("r08:0x%08x r09:0x%08x r10:0x%08x\n", regs->r8, regs->r9, regs->r10); + rt_kprintf("fp :0x%08x ip :0x%08x\n", regs->fp, regs->ip); + rt_kprintf("sp :0x%08x lr :0x%08x pc :0x%08x\n", regs->sp, regs->lr, regs->pc); + rt_kprintf("cpsr:0x%08x\n", regs->cpsr); +} + +/** + * When comes across an instruction which it cannot handle, + * it takes the undefined instruction trap. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_udef(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("undefined instruction\n"); + rt_hw_show_register(regs); + if (rt_thread_self() != RT_NULL) + rt_kprintf("Current Thread: %s\n", rt_thread_self()->name); + rt_hw_cpu_shutdown(); +} + +/** + * The software interrupt instruction (SWI) is used for entering + * Supervisor mode, usually to request a particular supervisor + * function. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_svc(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("software interrupt\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during an instruction prefetch. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_pabt(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("prefetch abort\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * An abort indicates that the current memory access cannot be completed, + * which occurs during a data access. + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_dabt(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("Data Abort "); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +/** + * Normally, system will never reach here + * + * @param regs system registers + * + * @note never invoke this function in application + */ +void rt_hw_trap_resv(struct rt_hw_exp_stack *regs) +{ + rt_kprintf("Reserved trap\n"); + rt_hw_show_register(regs); +#ifdef RT_USING_FINSH + list_thread(); +#endif + rt_hw_cpu_shutdown(); +} + +extern rt_isr_handler_t isr_table[]; +void rt_hw_trap_irq(void) +{ + int irqno; + struct rt_irq_desc* irq; + extern struct rt_irq_desc irq_desc[]; + + irq = (struct rt_irq_desc*) vimREG->IRQVECREG; + irqno = ((rt_uint32_t) irq - (rt_uint32_t) &irq_desc[0])/sizeof(struct rt_irq_desc); + + /* invoke isr */ + irq->handler(irqno, irq->param); +} + +void rt_hw_trap_fiq(void) +{ + rt_kprintf("fast interrupt request\n"); +} + +/*@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_ccs.asm b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_ccs.asm new file mode 100644 index 0000000000..df2bcec925 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_ccs.asm @@ -0,0 +1,34 @@ +;------------------------------------------------------------------------------- +; sys_intvecs.asm +; +; (c) Texas Instruments 2009-2013, All rights reserved. +; + + .sect ".intvecs" + .arm + +;------------------------------------------------------------------------------- +; import reference for interrupt routines + + .ref _reset + .ref turnon_VFP + .ref vector_svc + .ref vector_pabort + .ref vector_dabort + .ref vector_resv + .ref IRQ_Handler + +;------------------------------------------------------------------------------- +; interrupt vectors + .def resetEntry +resetEntry + b _reset + b turnon_VFP + b vector_svc + b vector_pabort + b vector_dabort + b vector_resv + b IRQ_Handler + ldr pc,[pc,#-0x1b0] + +;------------------------------------------------------------------------------- diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_gcc.S new file mode 100644 index 0000000000..6cb2e9fab6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/arm/cortex-r4/vector_gcc.S @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ +@------------------------------------------------------------------------------- +@ sys_intvecs.asm +@ +@ (c) Texas Instruments 2009-2013, All rights reserved. +@ + +.section .vectors, "ax" +.code 32 + +@------------------------------------------------------------------------------- +@ import reference for interrupt routines + + .globl _reset + .globl turnon_VFP + .globl vector_svc + .globl vector_pabort + .globl vector_dabort + .globl vector_resv + .globl IRQ_Handler + + +.globl system_vectors +system_vectors: + b _reset + b turnon_VFP + b vector_svc + b vector_pabort + b vector_dabort + b vector_resv + b IRQ_Handler + ldr pc,[pc,#-0x1b0] diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/bumblebee/interrupt_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/bumblebee/interrupt_gcc.S new file mode 100644 index 0000000000..5a86e7d748 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/bumblebee/interrupt_gcc.S @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + */ + +#include "cpuport.h" + + .section .text.entry + .align 6 /* In ECLIC mode, the trap entry must be 64bytes aligned */ + .global irq_entry +irq_entry: + + /* save all from thread context */ + addi sp, sp, -32 * REGBYTES + + STORE x1, 1 * REGBYTES(sp) + li t0, 0x80 + STORE t0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + move s0, sp + + /* switch to interrupt stack */ + la sp, _sp + + /* interrupt handle */ + call rt_interrupt_enter + csrr a0, mcause + csrr a1, mepc + mv a2, sp + csrrw ra, 0x07ED, ra + call rt_interrupt_leave + + /* switch to from thread stack */ + move sp, s0 + + /* need to switch new thread */ + la s0, rt_thread_switch_interrupt_flag + lw s2, 0(s0) + beqz s2, spurious_interrupt + /* clear switch interrupt flag */ + sw zero, 0(s0) + + csrr a0, mepc + STORE a0, 0 * REGBYTES(sp) + + la s0, rt_interrupt_from_thread + LOAD s1, 0(s0) + STORE sp, 0(s1) + + la s0, rt_interrupt_to_thread + LOAD s1, 0(s0) + LOAD sp, 0(s1) + + LOAD a0, 0 * REGBYTES(sp) + csrw mepc, a0 + +spurious_interrupt: + LOAD x1, 1 * REGBYTES(sp) + + /* Remain in M-mode after mret */ + li t0, 0x00001800 + csrs mstatus, t0 + LOAD t0, 2 * REGBYTES(sp) + csrs mstatus, t0 + + LOAD x4, 4 * REGBYTES(sp) + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES + mret diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/context_gcc.S new file mode 100644 index 0000000000..f28b15319b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/context_gcc.S @@ -0,0 +1,212 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting implementation + * 2018/12/27 Jesven Add SMP support + */ + +#include "cpuport.h" + +#ifdef RT_USING_SMP +#define rt_hw_interrupt_disable rt_hw_local_irq_disable +#define rt_hw_interrupt_enable rt_hw_local_irq_enable +#endif + +/* + * rt_base_t rt_hw_interrupt_disable(void); + */ + .globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + csrrci a0, mstatus, 8 + ret + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + csrw mstatus, a0 + ret + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch_to(rt_ubase_t to, stuct rt_thread *to_thread); + * #else + * void rt_hw_context_switch_to(rt_ubase_t to); + * #endif + * a0 --> to + * a1 --> to_thread + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: + LOAD sp, (a0) + +#ifdef RT_USING_SMP + mv a0, a1 + jal rt_cpus_lock_status_restore +#endif + LOAD a0, 2 * REGBYTES(sp) + csrw mstatus, a0 + j rt_hw_context_switch_exit + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * #else + * void rt_hw_context_switch(rt_ubase_t from, rt_ubase_t to); + * #endif + * + * a0 --> from + * a1 --> to + * a2 --> to_thread + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + /* saved from thread context + * x1/ra -> sp(0) + * x1/ra -> sp(1) + * mstatus.mie -> sp(2) + * x(i) -> sp(i-4) + */ + addi sp, sp, -32 * REGBYTES + STORE sp, (a0) + + STORE x1, 0 * REGBYTES(sp) + STORE x1, 1 * REGBYTES(sp) + + csrr a0, mstatus + andi a0, a0, 8 + beqz a0, save_mpie + li a0, 0x80 +save_mpie: + STORE a0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + /* restore to thread context + * sp(0) -> epc; + * sp(1) -> ra; + * sp(i) -> x(i+2) + */ + LOAD sp, (a1) + +#ifdef RT_USING_SMP + mv a0, a2 + jal rt_cpus_lock_status_restore +#endif /*RT_USING_SMP*/ + + j rt_hw_context_switch_exit + +#ifdef RT_USING_SMP +/* + * void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * + * a0 --> context + * a1 --> from + * a2 --> to + * a3 --> to_thread + */ + .globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + + STORE a0, 0(a1) + + LOAD sp, 0(a2) + move a0, a3 + call rt_cpus_lock_status_restore + + j rt_hw_context_switch_exit + +#endif + +.global rt_hw_context_switch_exit +rt_hw_context_switch_exit: +#ifdef RT_USING_SMP +#ifdef RT_USING_SIGNALS + mv a0, sp + + csrr t0, mhartid + /* switch interrupt stack of current cpu */ + la sp, __stack_start__ + addi t1, t0, 1 + li t2, __STACKSIZE__ + mul t1, t1, t2 + add sp, sp, t1 /* sp = (cpuid + 1) * __STACKSIZE__ + __stack_start__ */ + + call rt_signal_check + mv sp, a0 +#endif +#endif + /* resw ra to mepc */ + LOAD a0, 0 * REGBYTES(sp) + csrw mepc, a0 + + LOAD x1, 1 * REGBYTES(sp) + + li t0, 0x00001800 + csrs mstatus, t0 + LOAD a0, 2 * REGBYTES(sp) + csrs mstatus, a0 + + LOAD x4, 4 * REGBYTES(sp) + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES + mret diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.c new file mode 100644 index 0000000000..a44dc40f79 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.c @@ -0,0 +1,129 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting code. + */ + +#include +#include + +#include "cpuport.h" + +#ifndef RT_USING_SMP +volatile rt_ubase_t rt_interrupt_from_thread = 0; +volatile rt_ubase_t rt_interrupt_to_thread = 0; +volatile rt_uint32_t rt_thread_switch_interrupt_flag = 0; +#endif + +struct rt_hw_stack_frame +{ + rt_ubase_t epc; /* epc - epc - program counter */ + rt_ubase_t ra; /* x1 - ra - return address for jumps */ + rt_ubase_t mstatus; /* - machine status register */ + rt_ubase_t gp; /* x3 - gp - global pointer */ + rt_ubase_t tp; /* x4 - tp - thread pointer */ + rt_ubase_t t0; /* x5 - t0 - temporary register 0 */ + rt_ubase_t t1; /* x6 - t1 - temporary register 1 */ + rt_ubase_t t2; /* x7 - t2 - temporary register 2 */ + rt_ubase_t s0_fp; /* x8 - s0/fp - saved register 0 or frame pointer */ + rt_ubase_t s1; /* x9 - s1 - saved register 1 */ + rt_ubase_t a0; /* x10 - a0 - return value or function argument 0 */ + rt_ubase_t a1; /* x11 - a1 - return value or function argument 1 */ + rt_ubase_t a2; /* x12 - a2 - function argument 2 */ + rt_ubase_t a3; /* x13 - a3 - function argument 3 */ + rt_ubase_t a4; /* x14 - a4 - function argument 4 */ + rt_ubase_t a5; /* x15 - a5 - function argument 5 */ + rt_ubase_t a6; /* x16 - a6 - function argument 6 */ + rt_ubase_t a7; /* x17 - s7 - function argument 7 */ + rt_ubase_t s2; /* x18 - s2 - saved register 2 */ + rt_ubase_t s3; /* x19 - s3 - saved register 3 */ + rt_ubase_t s4; /* x20 - s4 - saved register 4 */ + rt_ubase_t s5; /* x21 - s5 - saved register 5 */ + rt_ubase_t s6; /* x22 - s6 - saved register 6 */ + rt_ubase_t s7; /* x23 - s7 - saved register 7 */ + rt_ubase_t s8; /* x24 - s8 - saved register 8 */ + rt_ubase_t s9; /* x25 - s9 - saved register 9 */ + rt_ubase_t s10; /* x26 - s10 - saved register 10 */ + rt_ubase_t s11; /* x27 - s11 - saved register 11 */ + rt_ubase_t t3; /* x28 - t3 - temporary register 3 */ + rt_ubase_t t4; /* x29 - t4 - temporary register 4 */ + rt_ubase_t t5; /* x30 - t5 - temporary register 5 */ + rt_ubase_t t6; /* x31 - t6 - temporary register 6 */ +}; + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, + void *parameter, + rt_uint8_t *stack_addr, + void *texit) +{ + struct rt_hw_stack_frame *frame; + rt_uint8_t *stk; + int i; + + stk = stack_addr + sizeof(rt_ubase_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_ubase_t)stk, REGBYTES); + stk -= sizeof(struct rt_hw_stack_frame); + + frame = (struct rt_hw_stack_frame *)stk; + + for (i = 0; i < sizeof(struct rt_hw_stack_frame) / sizeof(rt_ubase_t); i++) + { + ((rt_ubase_t *)frame)[i] = 0xdeadbeef; + } + + frame->ra = (rt_ubase_t)texit; + frame->a0 = (rt_ubase_t)parameter; + frame->epc = (rt_ubase_t)tentry; + + /* force to machine mode(MPP=11) and set MPIE to 1 */ + frame->mstatus = 0x00007880; + + return stk; +} + +/* + * #ifdef RT_USING_SMP + * void rt_hw_context_switch_interrupt(void *context, rt_ubase_t from, rt_ubase_t to, struct rt_thread *to_thread); + * #else + * void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to); + * #endif + */ +#ifndef RT_USING_SMP +void rt_hw_context_switch_interrupt(rt_ubase_t from, rt_ubase_t to) +{ + if (rt_thread_switch_interrupt_flag == 0) + rt_interrupt_from_thread = from; + + rt_interrupt_to_thread = to; + rt_thread_switch_interrupt_flag = 1; + + return ; +} +#endif /* end of RT_USING_SMP */ + +/** shutdown CPU */ +void rt_hw_cpu_shutdown() +{ + rt_uint32_t level; + rt_kprintf("shutdown...\n"); + + level = rt_hw_interrupt_disable(); + while (level) + { + RT_ASSERT(0); + } +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.h new file mode 100644 index 0000000000..95268732cb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/cpuport.h @@ -0,0 +1,27 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-03 Bernard The first version + */ + +#ifndef CPUPORT_H__ +#define CPUPORT_H__ + +#include + +/* bytes of register width */ +#ifdef ARCH_CPU_64BIT +#define STORE sd +#define LOAD ld +#define REGBYTES 8 +#else +#define STORE sw +#define LOAD lw +#define REGBYTES 4 +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-ops.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-ops.h new file mode 100644 index 0000000000..0b321c6de4 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-ops.h @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-03 Bernard The first version + */ + +#ifndef RISCV_OPS_H__ +#define RISCV_OPS_H__ + +#if defined(__GNUC__) && !defined(__ASSEMBLER__) + +#define read_csr(reg) ({ unsigned long __tmp; \ + asm volatile ("csrr %0, " #reg : "=r"(__tmp)); \ + __tmp; }) + +#define write_csr(reg, val) ({ \ + if (__builtin_constant_p(val) && (unsigned long)(val) < 32) \ + asm volatile ("csrw " #reg ", %0" :: "i"(val)); \ + else \ + asm volatile ("csrw " #reg ", %0" :: "r"(val)); }) + +#define set_csr(reg, bit) ({ unsigned long __tmp; \ + if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ + asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ + else \ + asm volatile ("csrrs %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ + __tmp; }) + +#define clear_csr(reg, bit) ({ unsigned long __tmp; \ + if (__builtin_constant_p(bit) && (unsigned long)(bit) < 32) \ + asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "i"(bit)); \ + else \ + asm volatile ("csrrc %0, " #reg ", %1" : "=r"(__tmp) : "r"(bit)); \ + __tmp; }) +#endif /* end of __GNUC__ */ + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-plic.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-plic.h new file mode 100644 index 0000000000..1da14b2e45 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/common/riscv-plic.h @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-03 Bernard The first version + */ + +#ifndef RISCV_PLIC_H__ +#define RISCV_PLIC_H__ + +#ifndef PLIC_BASE_ADDR +#define PLIC_BASE_ADDR 0x0 +#endif + +/* Priority Register - 32 bits per source */ +#define PLIC_PRIORITY_OFFSET (0x00000000UL) +#define PLIC_PRIORITY_SHIFT_PER_SOURCE 2 + +/* Pending Register - 1 bit per soirce */ +#define PLIC_PENDING_OFFSET (0x00001000UL) +#define PLIC_PENDING_SHIFT_PER_SOURCE 0 + +/* Enable Register - 0x80 per target */ +#define PLIC_ENABLE_OFFSET (0x00002000UL) +#define PLIC_ENABLE_SHIFT_PER_TARGET 7 + +/* Priority Threshold Register - 0x1000 per target */ +#define PLIC_THRESHOLD_OFFSET (0x00200000UL) +#define PLIC_THRESHOLD_SHIFT_PER_TARGET 12 + +/* Claim Register - 0x1000 per target */ +#define PLIC_CLAIM_OFFSET (0x00200004UL) +#define PLIC_CLAIM_SHIFT_PER_TARGET 12 + +#if defined(__GNUC__) && !defined(__ASSEMBLER__) +__attribute__((always_inline)) static inline void __plic_set_feature(unsigned int feature) +{ + volatile unsigned int *feature_ptr = (volatile unsigned int *)PLIC_BASE_ADDR; + *feature_ptr = feature; +} + +__attribute__((always_inline)) static inline void __plic_set_threshold(unsigned int threshold) +{ + unsigned int hart_id = read_csr(mhartid); + volatile unsigned int *threshold_ptr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_THRESHOLD_OFFSET + + (hart_id << PLIC_THRESHOLD_SHIFT_PER_TARGET)); + *threshold_ptr = threshold; +} + +__attribute__((always_inline)) static inline void __plic_set_priority(unsigned int source, unsigned int priority) +{ + volatile unsigned int *priority_ptr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_PRIORITY_OFFSET + + (source << PLIC_PRIORITY_SHIFT_PER_SOURCE)); + *priority_ptr = priority; +} + +__attribute__((always_inline)) static inline void __plic_set_pending(unsigned int source) +{ + volatile unsigned int *current_ptr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_PENDING_OFFSET + + ((source >> 5) << 2)); + *current_ptr = (1 << (source & 0x1F)); +} + +__attribute__((always_inline)) static inline void __plic_irq_enable(unsigned int source) +{ + unsigned int hart_id = read_csr(mhartid); + volatile unsigned int *current_ptr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_ENABLE_OFFSET + + (hart_id << PLIC_ENABLE_SHIFT_PER_TARGET) + + ((source >> 5) << 2)); + unsigned int current = *current_ptr; + current = current | (1 << (source & 0x1F)); + *current_ptr = current; +} + +__attribute__((always_inline)) static inline void __plic_irq_disable(unsigned int source) +{ + unsigned int hart_id = read_csr(mhartid); + volatile unsigned int *current_ptr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_ENABLE_OFFSET + + (hart_id << PLIC_ENABLE_SHIFT_PER_TARGET) + + ((source >> 5) << 2)); + unsigned int current = *current_ptr; + current = current & ~((1 << (source & 0x1F))); + *current_ptr = current; +} + +__attribute__((always_inline)) static inline unsigned int __plic_irq_claim(void) +{ + unsigned int hart_id = read_csr(mhartid); + volatile unsigned int *claim_addr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_CLAIM_OFFSET + + (hart_id << PLIC_CLAIM_SHIFT_PER_TARGET)); + return *claim_addr; +} + +__attribute__((always_inline)) static inline void __plic_irq_complete(unsigned int source) +{ + unsigned int hart_id = read_csr(mhartid); + volatile unsigned int *claim_addr = (volatile unsigned int *)(PLIC_BASE_ADDR + + PLIC_CLAIM_OFFSET + + (hart_id << PLIC_CLAIM_SHIFT_PER_TARGET)); + *claim_addr = source; +} +#endif /* end of __GNUC__ */ + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/SConscript b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/SConscript new file mode 100644 index 0000000000..4e4bc0c3d9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/SConscript @@ -0,0 +1,13 @@ +Import('rtconfig') +from building import * + +cwd = GetCurrentDir() +src = Glob('*.c') +CPPPATH = [cwd] + +if rtconfig.PLATFORM == 'gcc': + src += Glob('*_gcc.S') + +group = DefineGroup('libcpu', src, depend = [''], CPPPATH = CPPPATH) + +Return('group') diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/context_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/context_gcc.S new file mode 100644 index 0000000000..7aaa8db432 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/context_gcc.S @@ -0,0 +1,227 @@ +;/* +; * File : context_gcc.S +; * This file is part of RT-Thread RTOS +; * COPYRIGHT (C) 2018, RT-Thread Development Team +; * +; * This program is free software; you can redistribute it and/or modify +; * it under the terms of the GNU General Public License as published by +; * the Free Software Foundation; either version 2 of the License, or +; * (at your option) any later version. +; * +; * This program is distributed in the hope that it will be useful, +; * but WITHOUT ANY WARRANTY; without even the implied warranty of +; * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +; * GNU General Public License for more details. +; * +; * You should have received a copy of the GNU General Public License along +; * with this program; if not, write to the Free Software Foundation, Inc., +; * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. +; * +; * Change Logs: +; * Date Author Notes +; * 2017-07-16 zhangjun for hifive1 +; * 2018-05-29 tanek optimize rt_hw_interrupt_* +; * 2018-05-29 tanek add mie register to context +; */ + +/* + * rt_base_t rt_hw_interrupt_disable(void); + */ + .globl rt_hw_interrupt_disable +rt_hw_interrupt_disable: + csrrci a0, mstatus, 8 + ret + +/* + * void rt_hw_interrupt_enable(rt_base_t level); + */ + .globl rt_hw_interrupt_enable +rt_hw_interrupt_enable: + csrw mstatus, a0 + ret + +/* + * void rt_hw_context_switch(rt_uint32 from, rt_uint32 to); + * a0 --> from + * a1 --> to + */ + .globl rt_hw_context_switch +rt_hw_context_switch: + + /* saved from thread context + * x1/ra -> sp(0) + * x1/ra -> sp(1) + * mstatus.mie -> sp(2) + * x(i) -> sp(i-4) + */ + addi sp, sp, -32 * 4 + sw sp, (a0) + + sw x1, 0 * 4(sp) + sw x1, 1 * 4(sp) + + csrr a0, mstatus + andi a0, a0, 8 + beqz a0, save_mpie + li a0, 0x80 +save_mpie: + sw a0, 2 * 4(sp) + + sw x4, 4 * 4(sp) + sw x5, 5 * 4(sp) + sw x6, 6 * 4(sp) + sw x7, 7 * 4(sp) + sw x8, 8 * 4(sp) + sw x9, 9 * 4(sp) + sw x10, 10 * 4(sp) + sw x11, 11 * 4(sp) + sw x12, 12 * 4(sp) + sw x13, 13 * 4(sp) + sw x14, 14 * 4(sp) + sw x15, 15 * 4(sp) + sw x16, 16 * 4(sp) + sw x17, 17 * 4(sp) + sw x18, 18 * 4(sp) + sw x19, 19 * 4(sp) + sw x20, 20 * 4(sp) + sw x21, 21 * 4(sp) + sw x22, 22 * 4(sp) + sw x23, 23 * 4(sp) + sw x24, 24 * 4(sp) + sw x25, 25 * 4(sp) + sw x26, 26 * 4(sp) + sw x27, 27 * 4(sp) + sw x28, 28 * 4(sp) + sw x29, 29 * 4(sp) + sw x30, 30 * 4(sp) + sw x31, 31 * 4(sp) + + /* restore to thread context + * sp(0) -> epc; + * sp(1) -> ra; + * sp(i) -> x(i+2) + */ + lw sp, (a1) + + /* resw ra to mepc */ + lw a1, 0 * 4(sp) + csrw mepc, a1 + lw x1, 1 * 4(sp) + + /* force to machin mode(MPP=11) */ + li a1, 0x00001800; + csrs mstatus, a1 + lw a1, 2 * 4(sp) + csrs mstatus, a1 + + lw x4, 4 * 4(sp) + lw x5, 5 * 4(sp) + lw x6, 6 * 4(sp) + lw x7, 7 * 4(sp) + lw x8, 8 * 4(sp) + lw x9, 9 * 4(sp) + lw x10, 10 * 4(sp) + lw x11, 11 * 4(sp) + lw x12, 12 * 4(sp) + lw x13, 13 * 4(sp) + lw x14, 14 * 4(sp) + lw x15, 15 * 4(sp) + lw x16, 16 * 4(sp) + lw x17, 17 * 4(sp) + lw x18, 18 * 4(sp) + lw x19, 19 * 4(sp) + lw x20, 20 * 4(sp) + lw x21, 21 * 4(sp) + lw x22, 22 * 4(sp) + lw x23, 23 * 4(sp) + lw x24, 24 * 4(sp) + lw x25, 25 * 4(sp) + lw x26, 26 * 4(sp) + lw x27, 27 * 4(sp) + lw x28, 28 * 4(sp) + lw x29, 29 * 4(sp) + lw x30, 30 * 4(sp) + lw x31, 31 * 4(sp) + + addi sp, sp, 32 * 4 + mret + +/* + * void rt_hw_context_switch_to(rt_uint32 to); + * a0 --> to + */ + .globl rt_hw_context_switch_to +rt_hw_context_switch_to: + lw sp, (a0) + + /* load epc from stack */ + lw a0, 0 * 4(sp) + csrw mepc, a0 + lw x1, 1 * 4(sp) + /* load mstatus from stack */ + lw a0, 2 * 4(sp) + csrw mstatus, a0 + lw x4, 4 * 4(sp) + lw x5, 5 * 4(sp) + lw x6, 6 * 4(sp) + lw x7, 7 * 4(sp) + lw x8, 8 * 4(sp) + lw x9, 9 * 4(sp) + lw x10, 10 * 4(sp) + lw x11, 11 * 4(sp) + lw x12, 12 * 4(sp) + lw x13, 13 * 4(sp) + lw x14, 14 * 4(sp) + lw x15, 15 * 4(sp) + lw x16, 16 * 4(sp) + lw x17, 17 * 4(sp) + lw x18, 18 * 4(sp) + lw x19, 19 * 4(sp) + lw x20, 20 * 4(sp) + lw x21, 21 * 4(sp) + lw x22, 22 * 4(sp) + lw x23, 23 * 4(sp) + lw x24, 24 * 4(sp) + lw x25, 25 * 4(sp) + lw x26, 26 * 4(sp) + lw x27, 27 * 4(sp) + lw x28, 28 * 4(sp) + lw x29, 29 * 4(sp) + lw x30, 30 * 4(sp) + lw x31, 31 * 4(sp) + + addi sp, sp, 32 * 4 + mret + +/* + * void rt_hw_context_switch_interrupt(rt_uint32 from, rt_uint32 to); + */ + .globl rt_thread_switch_interrupt_flag + .globl rt_interrupt_from_thread + .globl rt_interrupt_to_thread + .globl rt_hw_context_switch_interrupt +rt_hw_context_switch_interrupt: + addi sp, sp, -16 + sw s0, 12(sp) + sw a0, 8(sp) + sw a5, 4(sp) + + la a0, rt_thread_switch_interrupt_flag + lw a5, (a0) + bnez a5, _reswitch + li a5, 1 + sw a5, (a0) + + la a5, rt_interrupt_from_thread + lw a0, 8(sp) + sw a0, (a5) + +_reswitch: + la a5, rt_interrupt_to_thread + sw a1, (a5) + + lw a5, 4(sp) + lw a0, 8(sp) + lw s0, 12(sp) + addi sp, sp, 16 + ret diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/entry_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/entry_gcc.S new file mode 100644 index 0000000000..83631e67ee --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/entry_gcc.S @@ -0,0 +1,145 @@ +/* + * File : context_gcc.S + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2018, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2018-05-29 tanek first implementation + */ + + .section .text.entry + .align 2 + .global trap_entry +trap_entry: + + // save all from thread context + addi sp, sp, -32 * 4 + + sw x1, 1 * 4(sp) + li t0, 0x80 + sw t0, 2 * 4(sp) + + sw x4, 4 * 4(sp) + sw x5, 5 * 4(sp) + sw x6, 6 * 4(sp) + sw x7, 7 * 4(sp) + sw x8, 8 * 4(sp) + sw x9, 9 * 4(sp) + sw x10, 10 * 4(sp) + sw x11, 11 * 4(sp) + sw x12, 12 * 4(sp) + sw x13, 13 * 4(sp) + sw x14, 14 * 4(sp) + sw x15, 15 * 4(sp) + sw x16, 16 * 4(sp) + sw x17, 17 * 4(sp) + sw x18, 18 * 4(sp) + sw x19, 19 * 4(sp) + sw x20, 20 * 4(sp) + sw x21, 21 * 4(sp) + sw x22, 22 * 4(sp) + sw x23, 23 * 4(sp) + sw x24, 24 * 4(sp) + sw x25, 25 * 4(sp) + sw x26, 26 * 4(sp) + sw x27, 27 * 4(sp) + sw x28, 28 * 4(sp) + sw x29, 29 * 4(sp) + sw x30, 30 * 4(sp) + sw x31, 31 * 4(sp) + + // switch to interrupt stack + move s0, sp + la sp, _sp + + // interrupt handle + call rt_interrupt_enter + csrr a0, mcause + csrr a1, mepc + mv a2, sp + call handle_trap + call rt_interrupt_leave + + // switch to from thread stack + move sp, s0 + + // need to switch new thread + la s0, rt_thread_switch_interrupt_flag + lw s2, 0(s0) + beqz s2, spurious_interrupt + sw zero, 0(s0) + + csrr a0, mepc + sw a0, 0 * 4(sp) + + la s0, rt_interrupt_from_thread + lw s1, 0(s0) + sw sp, 0(s1) + + la s0, rt_interrupt_to_thread + lw s1, 0(s0) + lw sp, 0(s1) + + lw a0, 0 * 4(sp) + csrw mepc, a0 + +spurious_interrupt: + lw x1, 1 * 4(sp) + + // Remain in M-mode after mret + li t0, 0x00001800 + csrs mstatus, t0 + lw t0, 2 * 4(sp) + csrs mstatus, t0 + + lw x4, 4 * 4(sp) + lw x5, 5 * 4(sp) + lw x6, 6 * 4(sp) + lw x7, 7 * 4(sp) + lw x8, 8 * 4(sp) + lw x9, 9 * 4(sp) + lw x10, 10 * 4(sp) + lw x11, 11 * 4(sp) + lw x12, 12 * 4(sp) + lw x13, 13 * 4(sp) + lw x14, 14 * 4(sp) + lw x15, 15 * 4(sp) + lw x16, 16 * 4(sp) + lw x17, 17 * 4(sp) + lw x18, 18 * 4(sp) + lw x19, 19 * 4(sp) + lw x20, 20 * 4(sp) + lw x21, 21 * 4(sp) + lw x22, 22 * 4(sp) + lw x23, 23 * 4(sp) + lw x24, 24 * 4(sp) + lw x25, 25 * 4(sp) + lw x26, 26 * 4(sp) + lw x27, 27 * 4(sp) + lw x28, 28 * 4(sp) + lw x29, 29 * 4(sp) + lw x30, 30 * 4(sp) + lw x31, 31 * 4(sp) + + addi sp, sp, 32 * 4 + mret + +.weak handle_trap +handle_trap: +1: + j 1b diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/stack.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/stack.c new file mode 100644 index 0000000000..a68c646e39 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/e310/stack.c @@ -0,0 +1,104 @@ +/* + * File : stack.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2006, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2017-07-31 tanek first implementation + */ + +#include + +/* flag in interrupt handling */ +rt_uint32_t rt_interrupt_from_thread; +rt_uint32_t rt_interrupt_to_thread; +rt_uint32_t rt_thread_switch_interrupt_flag; + +struct stack_frame +{ + rt_ubase_t epc; /* epc - epc - program counter */ + rt_ubase_t ra; /* x1 - ra - return address for jumps */ + rt_ubase_t mstatus; /* - machine status register */ + rt_ubase_t gp; /* x3 - gp - global pointer */ + rt_ubase_t tp; /* x4 - tp - thread pointer */ + rt_ubase_t t0; /* x5 - t0 - temporary register 0 */ + rt_ubase_t t1; /* x6 - t1 - temporary register 1 */ + rt_ubase_t t2; /* x7 - t2 - temporary register 2 */ + rt_ubase_t s0_fp; /* x8 - s0/fp - saved register 0 or frame pointer */ + rt_ubase_t s1; /* x9 - s1 - saved register 1 */ + rt_ubase_t a0; /* x10 - a0 - return value or function argument 0 */ + rt_ubase_t a1; /* x11 - a1 - return value or function argument 1 */ + rt_ubase_t a2; /* x12 - a2 - function argument 2 */ + rt_ubase_t a3; /* x13 - a3 - function argument 3 */ + rt_ubase_t a4; /* x14 - a4 - function argument 4 */ + rt_ubase_t a5; /* x15 - a5 - function argument 5 */ + rt_ubase_t a6; /* x16 - a6 - function argument 6 */ + rt_ubase_t a7; /* x17 - s7 - function argument 7 */ + rt_ubase_t s2; /* x18 - s2 - saved register 2 */ + rt_ubase_t s3; /* x19 - s3 - saved register 3 */ + rt_ubase_t s4; /* x20 - s4 - saved register 4 */ + rt_ubase_t s5; /* x21 - s5 - saved register 5 */ + rt_ubase_t s6; /* x22 - s6 - saved register 6 */ + rt_ubase_t s7; /* x23 - s7 - saved register 7 */ + rt_ubase_t s8; /* x24 - s8 - saved register 8 */ + rt_ubase_t s9; /* x25 - s9 - saved register 9 */ + rt_ubase_t s10; /* x26 - s10 - saved register 10 */ + rt_ubase_t s11; /* x27 - s11 - saved register 11 */ + rt_ubase_t t3; /* x28 - t3 - temporary register 3 */ + rt_ubase_t t4; /* x29 - t4 - temporary register 4 */ + rt_ubase_t t5; /* x30 - t5 - temporary register 5 */ + rt_ubase_t t6; /* x31 - t6 - temporary register 6 */ +}; + +/** + * This function will initialize thread stack + * + * @param tentry the entry of thread + * @param parameter the parameter of entry + * @param stack_addr the beginning stack address + * @param texit the function will be called when thread exit + * + * @return stack address + */ +rt_uint8_t *rt_hw_stack_init(void *tentry, void *parameter, + rt_uint8_t *stack_addr, void *texit) +{ + struct stack_frame *stack_frame; + rt_uint8_t *stk; + int i; + + stk = stack_addr + sizeof(rt_uint32_t); + stk = (rt_uint8_t *)RT_ALIGN_DOWN((rt_uint32_t)stk, 8); + stk -= sizeof(struct stack_frame); + + stack_frame = (struct stack_frame *)stk; + + for (i = 0; i < sizeof(struct stack_frame) / sizeof(rt_ubase_t); i++) + { + ((rt_ubase_t *)stack_frame)[i] = 0xdeadbeef; + } + + stack_frame->ra = (rt_ubase_t)texit; + stack_frame->a0 = (rt_ubase_t)parameter; + stack_frame->epc = (rt_ubase_t)tentry; + + // force to machine mode(MPP=11) and set MPIE to 1 + stack_frame->mstatus = 0x00001880; + + return stk; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/cpuport_smp.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/cpuport_smp.c new file mode 100644 index 0000000000..a31314a13f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/cpuport_smp.c @@ -0,0 +1,80 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/12/23 Bernard The first version + * 2018/12/27 Jesven Add secondary cpu boot + */ + +#include +#include +#include + +#include "board.h" +#include +#include +#include + +#ifdef RT_USING_SMP + +int rt_hw_cpu_id(void) +{ + return read_csr(mhartid); +} + +void rt_hw_spin_lock(rt_hw_spinlock_t *lock) +{ + spinlock_lock((spinlock_t *)lock); +} + +void rt_hw_spin_unlock(rt_hw_spinlock_t *lock) +{ + spinlock_unlock((spinlock_t *)lock); +} + +void rt_hw_ipi_send(int ipi_vector, unsigned int cpu_mask) +{ + int idx; + + for (idx = 0; idx < RT_CPUS_NR; idx ++) + { + if (cpu_mask & (1 << idx)) + { + clint_ipi_send(idx); + } + } +} + +extern rt_base_t secondary_boot_flag; +void rt_hw_secondary_cpu_up(void) +{ + mb(); + secondary_boot_flag = 0xa55a; +} + +extern void rt_hw_scondary_interrupt_init(void); +extern int rt_hw_tick_init(void); +extern int rt_hw_clint_ipi_enable(void); + +void secondary_cpu_c_start(void) +{ + rt_hw_spin_lock(&_cpus_lock); + + /* initialize interrupt controller */ + rt_hw_scondary_interrupt_init(); + + rt_hw_tick_init(); + + rt_hw_clint_ipi_enable(); + + rt_system_scheduler_start(); +} + +void rt_hw_secondary_cpu_idle_exec(void) +{ + asm volatile ("wfi"); +} +#endif /*RT_USING_SMP*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt.c new file mode 100644 index 0000000000..b582599daf --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt.c @@ -0,0 +1,397 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/01 Bernard The first version + * 2018/12/27 Jesven Change irq enable/disable to cpu0 + */ + +#include + +#include "tick.h" + +#include +#include +#include + +#define CPU_NUM 2 +#define MAX_HANDLERS IRQN_MAX + +static struct rt_irq_desc irq_desc[MAX_HANDLERS]; + +static rt_isr_handler_t rt_hw_interrupt_handle(rt_uint32_t vector, void *param) +{ + rt_kprintf("UN-handled interrupt %d occurred!!!\n", vector); + return RT_NULL; +} + +int rt_hw_clint_ipi_enable(void) +{ + /* Set the Machine-Software bit in MIE */ + set_csr(mie, MIP_MSIP); + return 0; +} + +int rt_hw_clint_ipi_disable(void) +{ + /* Clear the Machine-Software bit in MIE */ + clear_csr(mie, MIP_MSIP); + return 0; +} + +int rt_hw_plic_irq_enable(plic_irq_t irq_number) +{ + unsigned long core_id = 0; + + /* Check parameters */ + if (PLIC_NUM_SOURCES < irq_number || 0 > irq_number) + return -1; + /* Get current enable bit array by IRQ number */ + uint32_t current = plic->target_enables.target[core_id].enable[irq_number / 32]; + /* Set enable bit in enable bit array */ + current |= (uint32_t)1 << (irq_number % 32); + /* Write back the enable bit array */ + plic->target_enables.target[core_id].enable[irq_number / 32] = current; + return 0; +} + +int rt_hw_plic_irq_disable(plic_irq_t irq_number) +{ + unsigned long core_id = 0; + + /* Check parameters */ + if (PLIC_NUM_SOURCES < irq_number || 0 > irq_number) + return -1; + /* Get current enable bit array by IRQ number */ + uint32_t current = plic->target_enables.target[core_id].enable[irq_number / 32]; + /* Clear enable bit in enable bit array */ + current &= ~((uint32_t)1 << (irq_number % 32)); + /* Write back the enable bit array */ + plic->target_enables.target[core_id].enable[irq_number / 32] = current; + return 0; +} + +/** + * This function will initialize hardware interrupt + */ +void rt_hw_interrupt_init(void) +{ + int idx; + int cpuid; + + cpuid = current_coreid(); + + /* Disable all interrupts for the current core. */ + for (idx = 0; idx < ((PLIC_NUM_SOURCES + 32u) / 32u); idx ++) + plic->target_enables.target[cpuid].enable[idx] = 0; + + /* Set priorities to zero. */ + for (idx = 0; idx < PLIC_NUM_SOURCES; idx++) + plic->source_priorities.priority[idx] = 0; + + /* Set the threshold to zero. */ + plic->targets.target[cpuid].priority_threshold = 0; + + /* init exceptions table */ + for (idx = 0; idx < MAX_HANDLERS; idx++) + { + rt_hw_interrupt_mask(idx); + irq_desc[idx].handler = (rt_isr_handler_t)rt_hw_interrupt_handle; + irq_desc[idx].param = RT_NULL; +#ifdef RT_USING_INTERRUPT_INFO + rt_snprintf(irq_desc[idx].name, RT_NAME_MAX - 1, "default"); + irq_desc[idx].counter = 0; +#endif + } + + /* Enable machine external interrupts. */ + set_csr(mie, MIP_MEIP); +} + +void rt_hw_scondary_interrupt_init(void) +{ + int idx; + int cpuid; + + cpuid = current_coreid(); + + /* Disable all interrupts for the current core. */ + for (idx = 0; idx < ((PLIC_NUM_SOURCES + 32u) / 32u); idx ++) + plic->target_enables.target[cpuid].enable[idx] = 0; + + /* Set the threshold to zero. */ + plic->targets.target[cpuid].priority_threshold = 0; + + /* Enable machine external interrupts. */ + set_csr(mie, MIP_MEIP); +} + +/** + * This function will mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_mask(int vector) +{ + rt_hw_plic_irq_disable(vector); +} + +/** + * This function will un-mask a interrupt. + * @param vector the interrupt number + */ +void rt_hw_interrupt_umask(int vector) +{ + plic_set_priority(vector, 1); + rt_hw_plic_irq_enable(vector); +} + +/** + * This function will install a interrupt service routine to a interrupt. + * @param vector the interrupt number + * @param new_handler the interrupt service routine to be installed + * @param old_handler the old interrupt service routine + */ +rt_isr_handler_t rt_hw_interrupt_install(int vector, rt_isr_handler_t handler, + void *param, const char *name) +{ + rt_isr_handler_t old_handler = RT_NULL; + + if(vector < MAX_HANDLERS) + { + old_handler = irq_desc[vector].handler; + if (handler != RT_NULL) + { + irq_desc[vector].handler = (rt_isr_handler_t)handler; + irq_desc[vector].param = param; +#ifdef RT_USING_INTERRUPT_INFO + rt_snprintf(irq_desc[vector].name, RT_NAME_MAX - 1, "%s", name); + irq_desc[vector].counter = 0; +#endif + } + } + + return old_handler; +} + +RT_WEAK +void plic_irq_handle(plic_irq_t irq) +{ + rt_kprintf("UN-handled interrupt %d occurred!!!\n", irq); + return ; +} + +uintptr_t handle_irq_m_ext(uintptr_t cause, uintptr_t epc) +{ + /* + * After the highest-priority pending interrupt is claimed by a target + * and the corresponding IP bit is cleared, other lower-priority + * pending interrupts might then become visible to the target, and so + * the PLIC EIP bit might not be cleared after a claim. The interrupt + * handler can check the local meip/heip/seip/ueip bits before exiting + * the handler, to allow more efficient service of other interrupts + * without first restoring the interrupted context and taking another + * interrupt trap. + */ + if (read_csr(mip) & MIP_MEIP) + { + /* Get current core id */ + uint64_t core_id = current_coreid(); + /* Get primitive interrupt enable flag */ + uint64_t ie_flag = read_csr(mie); + /* Get current IRQ num */ + uint32_t int_num = plic->targets.target[core_id].claim_complete; + /* Get primitive IRQ threshold */ + uint32_t int_threshold = plic->targets.target[core_id].priority_threshold; + /* Set new IRQ threshold = current IRQ threshold */ + plic->targets.target[core_id].priority_threshold = plic->source_priorities.priority[int_num]; + + /* Disable software interrupt and timer interrupt */ + clear_csr(mie, MIP_MTIP | MIP_MSIP); + + if (irq_desc[int_num].handler == (rt_isr_handler_t)rt_hw_interrupt_handle) + { + /* default handler, route to kendryte bsp plic driver */ + plic_irq_handle(int_num); + } + else if (irq_desc[int_num].handler) + { + irq_desc[int_num].handler(int_num, irq_desc[int_num].param); + } + + /* Perform IRQ complete */ + plic->targets.target[core_id].claim_complete = int_num; + /* Set MPIE and MPP flag used to MRET instructions restore MIE flag */ + set_csr(mstatus, MSTATUS_MPIE | MSTATUS_MPP); + /* Restore primitive interrupt enable flag */ + write_csr(mie, ie_flag); + /* Restore primitive IRQ threshold */ + plic->targets.target[core_id].priority_threshold = int_threshold; + } + + return epc; +} +struct exception_stack_frame +{ + uint64_t x1; + uint64_t x2; + uint64_t x3; + uint64_t x4; + uint64_t x5; + uint64_t x6; + uint64_t x7; + uint64_t x8; + uint64_t x9; + uint64_t x10; + uint64_t x11; + uint64_t x12; + uint64_t x13; + uint64_t x14; + uint64_t x15; + uint64_t x16; + uint64_t x17; + uint64_t x18; + uint64_t x19; + uint64_t x20; + uint64_t x21; + uint64_t x22; + uint64_t x23; + uint64_t x24; + uint64_t x25; + uint64_t x26; + uint64_t x27; + uint64_t x28; + uint64_t x29; + uint64_t x30; + uint64_t x31; +}; + +void print_stack_frame(uintptr_t * sp) +{ + struct exception_stack_frame * esf = (struct exception_stack_frame *)(sp+1); + + rt_kprintf("\n=================================================================\n"); + rt_kprintf("x1 (ra : Return address ) ==> 0x%08x%08x\n", esf->x1 >> 32 , esf->x1 & UINT32_MAX); + rt_kprintf("x2 (sp : Stack pointer ) ==> 0x%08x%08x\n", esf->x2 >> 32 , esf->x2 & UINT32_MAX); + rt_kprintf("x3 (gp : Global pointer ) ==> 0x%08x%08x\n", esf->x3 >> 32 , esf->x3 & UINT32_MAX); + rt_kprintf("x4 (tp : Thread pointer ) ==> 0x%08x%08x\n", esf->x4 >> 32 , esf->x4 & UINT32_MAX); + rt_kprintf("x5 (t0 : Temporary ) ==> 0x%08x%08x\n", esf->x5 >> 32 , esf->x5 & UINT32_MAX); + rt_kprintf("x6 (t1 : Temporary ) ==> 0x%08x%08x\n", esf->x6 >> 32 , esf->x6 & UINT32_MAX); + rt_kprintf("x7 (t2 : Temporary ) ==> 0x%08x%08x\n", esf->x7 >> 32 , esf->x7 & UINT32_MAX); + rt_kprintf("x8 (s0/fp: Save register,frame pointer ) ==> 0x%08x%08x\n", esf->x8 >> 32 , esf->x8 & UINT32_MAX); + rt_kprintf("x9 (s1 : Save register ) ==> 0x%08x%08x\n", esf->x9 >> 32 , esf->x9 & UINT32_MAX); + rt_kprintf("x10(a0 : Function argument,return value) ==> 0x%08x%08x\n", esf->x10 >> 32 , esf->x10 & UINT32_MAX); + rt_kprintf("x11(a1 : Function argument,return value) ==> 0x%08x%08x\n", esf->x11 >> 32 , esf->x11 & UINT32_MAX); + rt_kprintf("x12(a2 : Function argument ) ==> 0x%08x%08x\n", esf->x12 >> 32 , esf->x12 & UINT32_MAX); + rt_kprintf("x13(a3 : Function argument ) ==> 0x%08x%08x\n", esf->x13 >> 32 , esf->x13 & UINT32_MAX); + rt_kprintf("x14(a4 : Function argument ) ==> 0x%08x%08x\n", esf->x14 >> 32 , esf->x14 & UINT32_MAX); + rt_kprintf("x15(a5 : Function argument ) ==> 0x%08x%08x\n", esf->x15 >> 32 , esf->x15 & UINT32_MAX); + rt_kprintf("x16(a6 : Function argument ) ==> 0x%08x%08x\n", esf->x16 >> 32 , esf->x16 & UINT32_MAX); + rt_kprintf("x17(a7 : Function argument ) ==> 0x%08x%08x\n", esf->x17 >> 32 , esf->x17 & UINT32_MAX); + rt_kprintf("x18(s2 : Save register ) ==> 0x%08x%08x\n", esf->x18 >> 32 , esf->x18 & UINT32_MAX); + rt_kprintf("x19(s3 : Save register ) ==> 0x%08x%08x\n", esf->x19 >> 32 , esf->x19 & UINT32_MAX); + rt_kprintf("x20(s4 : Save register ) ==> 0x%08x%08x\n", esf->x20 >> 32 , esf->x20 & UINT32_MAX); + rt_kprintf("x21(s5 : Save register ) ==> 0x%08x%08x\n", esf->x21 >> 32 , esf->x21 & UINT32_MAX); + rt_kprintf("x22(s6 : Save register ) ==> 0x%08x%08x\n", esf->x22 >> 32 , esf->x22 & UINT32_MAX); + rt_kprintf("x23(s7 : Save register ) ==> 0x%08x%08x\n", esf->x23 >> 32 , esf->x23 & UINT32_MAX); + rt_kprintf("x24(s8 : Save register ) ==> 0x%08x%08x\n", esf->x24 >> 32 , esf->x24 & UINT32_MAX); + rt_kprintf("x25(s9 : Save register ) ==> 0x%08x%08x\n", esf->x25 >> 32 , esf->x25 & UINT32_MAX); + rt_kprintf("x26(s10 : Save register ) ==> 0x%08x%08x\n", esf->x26 >> 32 , esf->x26 & UINT32_MAX); + rt_kprintf("x27(s11 : Save register ) ==> 0x%08x%08x\n", esf->x27 >> 32 , esf->x27 & UINT32_MAX); + rt_kprintf("x28(t3 : Temporary ) ==> 0x%08x%08x\n", esf->x28 >> 32 , esf->x28 & UINT32_MAX); + rt_kprintf("x29(t4 : Temporary ) ==> 0x%08x%08x\n", esf->x29 >> 32 , esf->x29 & UINT32_MAX); + rt_kprintf("x30(t5 : Temporary ) ==> 0x%08x%08x\n", esf->x30 >> 32 , esf->x30 & UINT32_MAX); + rt_kprintf("x31(t6 : Temporary ) ==> 0x%08x%08x\n", esf->x31 >> 32 , esf->x31 & UINT32_MAX); + rt_kprintf("=================================================================\n"); +} + + +uintptr_t handle_trap(uintptr_t mcause, uintptr_t epc, uintptr_t * sp) +{ + int cause = mcause & CAUSE_MACHINE_IRQ_REASON_MASK; + + if (mcause & (1UL << 63)) + { + switch (cause) + { + case IRQ_M_SOFT: + { + uint64_t core_id = current_coreid(); + + clint_ipi_clear(core_id); + rt_schedule(); + } + break; + case IRQ_M_EXT: + handle_irq_m_ext(mcause, epc); + break; + case IRQ_M_TIMER: + tick_isr(); + break; + } + } + else + { + rt_thread_t tid; + extern long list_thread(); + + rt_hw_interrupt_disable(); + + tid = rt_thread_self(); + rt_kprintf("\nException:\n"); + switch (cause) + { + case CAUSE_MISALIGNED_FETCH: + rt_kprintf("Instruction address misaligned"); + break; + case CAUSE_FAULT_FETCH: + rt_kprintf("Instruction access fault"); + break; + case CAUSE_ILLEGAL_INSTRUCTION: + rt_kprintf("Illegal instruction"); + break; + case CAUSE_BREAKPOINT: + rt_kprintf("Breakpoint"); + break; + case CAUSE_MISALIGNED_LOAD: + rt_kprintf("Load address misaligned"); + break; + case CAUSE_FAULT_LOAD: + rt_kprintf("Load access fault"); + break; + case CAUSE_MISALIGNED_STORE: + rt_kprintf("Store address misaligned"); + break; + case CAUSE_FAULT_STORE: + rt_kprintf("Store access fault"); + break; + case CAUSE_USER_ECALL: + rt_kprintf("Environment call from U-mode"); + break; + case CAUSE_SUPERVISOR_ECALL: + rt_kprintf("Environment call from S-mode"); + break; + case CAUSE_HYPERVISOR_ECALL: + rt_kprintf("Environment call from H-mode"); + break; + case CAUSE_MACHINE_ECALL: + rt_kprintf("Environment call from M-mode"); + break; + default: + rt_kprintf("Uknown exception : %08lX", cause); + break; + } + rt_kprintf("\n"); + print_stack_frame(sp); + rt_kprintf("exception pc => 0x%08x\n", epc); + rt_kprintf("current thread: %.*s\n", RT_NAME_MAX, tid->name); +#ifdef RT_USING_FINSH + list_thread(); +#endif + while(1); + } + + return epc; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt_gcc.S new file mode 100644 index 0000000000..0393ea51f8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/interrupt_gcc.S @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/02 Bernard The first version + * 2018/12/27 Jesven Add SMP schedule + */ + +#include "cpuport.h" + + .section .text.entry + .align 2 + .global trap_entry +trap_entry: + + /* save thread context to thread stack */ + addi sp, sp, -32 * REGBYTES + + STORE x1, 1 * REGBYTES(sp) + + csrr x1, mstatus + STORE x1, 2 * REGBYTES(sp) + + csrr x1, mepc + STORE x1, 0 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + /* switch to interrupt stack */ + move s0, sp + + /* get cpu id */ + csrr t0, mhartid + + /* switch interrupt stack of current cpu */ + la sp, __stack_start__ + addi t1, t0, 1 + li t2, __STACKSIZE__ + mul t1, t1, t2 + add sp, sp, t1 /* sp = (cpuid + 1) * __STACKSIZE__ + __stack_start__ */ + + /* handle interrupt */ + call rt_interrupt_enter + csrr a0, mcause + csrr a1, mepc + mv a2, s0 + call handle_trap + call rt_interrupt_leave + +#ifdef RT_USING_SMP + /* s0 --> sp */ + mv sp, s0 + mv a0, s0 + call rt_scheduler_do_irq_switch + j rt_hw_context_switch_exit + +#else + + /* switch to from_thread stack */ + move sp, s0 + + /* need to switch new thread */ + la s0, rt_thread_switch_interrupt_flag + lw s2, 0(s0) + beqz s2, spurious_interrupt + sw zero, 0(s0) + + la s0, rt_interrupt_from_thread + LOAD s1, 0(s0) + STORE sp, 0(s1) + + la s0, rt_interrupt_to_thread + LOAD s1, 0(s0) + LOAD sp, 0(s1) + +#endif + +spurious_interrupt: + j rt_hw_context_switch_exit diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/startup_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/startup_gcc.S new file mode 100644 index 0000000000..f5c0d8fa94 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/startup_gcc.S @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/01 Bernard The first version + * 2018/12/27 Jesven Add SMP support + */ + +#define MSTATUS_FS 0x00006000U /* initial state of FPU */ +#include + + .global _start + .section ".start", "ax" +_start: + j 1f + .word 0xdeadbeef + .align 3 + .global g_wake_up + g_wake_up: + .dword 1 + .dword 0 +1: + csrw mideleg, 0 + csrw medeleg, 0 + csrw mie, 0 + csrw mip, 0 + la t0, trap_entry + csrw mtvec, t0 + + li x1, 0 + li x2, 0 + li x3, 0 + li x4, 0 + li x5, 0 + li x6, 0 + li x7, 0 + li x8, 0 + li x9, 0 + li x10,0 + li x11,0 + li x12,0 + li x13,0 + li x14,0 + li x15,0 + li x16,0 + li x17,0 + li x18,0 + li x19,0 + li x20,0 + li x21,0 + li x22,0 + li x23,0 + li x24,0 + li x25,0 + li x26,0 + li x27,0 + li x28,0 + li x29,0 + li x30,0 + li x31,0 + + /* set to initial state of FPU and disable interrupt */ + li t0, MSTATUS_FS + csrs mstatus, t0 + + fssr x0 + fmv.d.x f0, x0 + fmv.d.x f1, x0 + fmv.d.x f2, x0 + fmv.d.x f3, x0 + fmv.d.x f4, x0 + fmv.d.x f5, x0 + fmv.d.x f6, x0 + fmv.d.x f7, x0 + fmv.d.x f8, x0 + fmv.d.x f9, x0 + fmv.d.x f10,x0 + fmv.d.x f11,x0 + fmv.d.x f12,x0 + fmv.d.x f13,x0 + fmv.d.x f14,x0 + fmv.d.x f15,x0 + fmv.d.x f16,x0 + fmv.d.x f17,x0 + fmv.d.x f18,x0 + fmv.d.x f19,x0 + fmv.d.x f20,x0 + fmv.d.x f21,x0 + fmv.d.x f22,x0 + fmv.d.x f23,x0 + fmv.d.x f24,x0 + fmv.d.x f25,x0 + fmv.d.x f26,x0 + fmv.d.x f27,x0 + fmv.d.x f28,x0 + fmv.d.x f29,x0 + fmv.d.x f30,x0 + fmv.d.x f31,x0 + +.option push +.option norelax + la gp, __global_pointer$ +.option pop + + /* get cpu id */ + csrr a0, mhartid + + la sp, __stack_start__ + addi t1, a0, 1 + li t2, __STACKSIZE__ + mul t1, t1, t2 + add sp, sp, t1 /* sp = (cpuid + 1) * __STACKSIZE__ + __stack_start__ */ + + /* other cpu core, jump to cpu entry directly */ + bnez a0, secondary_cpu_entry + j primary_cpu_entry + +secondary_cpu_entry: +#ifdef RT_USING_SMP + la a0, secondary_boot_flag + ld a0, 0(a0) + li a1, 0xa55a + beq a0, a1, secondary_cpu_c_start +#endif + j secondary_cpu_entry + +#ifdef RT_USING_SMP +.data +.global secondary_boot_flag +.align 3 +secondary_boot_flag: + .dword 0 +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.c new file mode 100644 index 0000000000..144f7f1fff --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.c @@ -0,0 +1,48 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting code. + */ + +#include +#include + +#include +#include +#include + +static volatile unsigned long tick_cycles = 0; +int tick_isr(void) +{ + uint64_t core_id = current_coreid(); + + clint->mtimecmp[core_id] += tick_cycles; + rt_tick_increase(); + + return 0; +} + +/* Sets and enable the timer interrupt */ +int rt_hw_tick_init(void) +{ + /* Read core id */ + unsigned long core_id = current_coreid(); + unsigned long interval = 1000/RT_TICK_PER_SECOND; + + /* Clear the Machine-Timer bit in MIE */ + clear_csr(mie, MIP_MTIP); + + /* calculate the tick cycles */ + tick_cycles = interval * sysctl_clock_get_freq(SYSCTL_CLOCK_CPU) / CLINT_CLOCK_DIV / 1000ULL - 1; + /* Set mtimecmp by core id */ + clint->mtimecmp[core_id] = clint->mtime + tick_cycles; + + /* Enable the Machine-Timer bit in MIE */ + set_csr(mie, MIP_MTIP); + + return 0; +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.h new file mode 100644 index 0000000000..0821004263 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/k210/tick.h @@ -0,0 +1,17 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/28 Bernard The unify RISC-V porting code. + */ + +#ifndef TICK_H__ +#define TICK_H__ + +int tick_isr(void); +int rt_hw_tick_init(void); + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt.c new file mode 100644 index 0000000000..72cb344ff7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt.c @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/01 Bernard The first version + */ + +#include + +#include +#include + +typedef void (*irq_handler_t)(void); +extern const irq_handler_t isrTable[]; + +void SystemIrqHandler(uint32_t mcause) +{ + uint32_t intNum; + + if (mcause & 0x80000000) /* For external interrupt. */ + { + intNum = mcause & 0x1FUL; + + /* Clear pending flag in EVENT unit .*/ + EVENT_UNIT->INTPTPENDCLEAR = (1U << intNum); + + /* Now call the real irq handler for intNum */ + isrTable[intNum](); + } +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt_gcc.S b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt_gcc.S new file mode 100644 index 0000000000..eacf667c67 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/libcpu/risc-v/rv32m1/interrupt_gcc.S @@ -0,0 +1,130 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018/10/02 Bernard The first version + */ + +#include "cpuport.h" + + .section .text.entry + .align 2 + .global IRQ_Handler +IRQ_Handler: + + /* save all from thread context */ + addi sp, sp, -32 * REGBYTES + + STORE x1, 1 * REGBYTES(sp) + li t0, 0x80 + STORE t0, 2 * REGBYTES(sp) + + STORE x4, 4 * REGBYTES(sp) + STORE x5, 5 * REGBYTES(sp) + STORE x6, 6 * REGBYTES(sp) + STORE x7, 7 * REGBYTES(sp) + STORE x8, 8 * REGBYTES(sp) + STORE x9, 9 * REGBYTES(sp) + STORE x10, 10 * REGBYTES(sp) + STORE x11, 11 * REGBYTES(sp) + STORE x12, 12 * REGBYTES(sp) + STORE x13, 13 * REGBYTES(sp) + STORE x14, 14 * REGBYTES(sp) + STORE x15, 15 * REGBYTES(sp) + STORE x16, 16 * REGBYTES(sp) + STORE x17, 17 * REGBYTES(sp) + STORE x18, 18 * REGBYTES(sp) + STORE x19, 19 * REGBYTES(sp) + STORE x20, 20 * REGBYTES(sp) + STORE x21, 21 * REGBYTES(sp) + STORE x22, 22 * REGBYTES(sp) + STORE x23, 23 * REGBYTES(sp) + STORE x24, 24 * REGBYTES(sp) + STORE x25, 25 * REGBYTES(sp) + STORE x26, 26 * REGBYTES(sp) + STORE x27, 27 * REGBYTES(sp) + STORE x28, 28 * REGBYTES(sp) + STORE x29, 29 * REGBYTES(sp) + STORE x30, 30 * REGBYTES(sp) + STORE x31, 31 * REGBYTES(sp) + + move s0, sp + + /* switch to interrupt stack */ + la sp, __stack + + /* interrupt handle */ + call rt_interrupt_enter + csrr a0, mcause + csrr a1, mepc + mv a2, sp + call SystemIrqHandler + call rt_interrupt_leave + + /* switch to from thread stack */ + move sp, s0 + + /* need to switch new thread */ + la s0, rt_thread_switch_interrupt_flag + lw s2, 0(s0) + beqz s2, spurious_interrupt + /* clear switch interrupt flag */ + sw zero, 0(s0) + + csrr a0, mepc + STORE a0, 0 * REGBYTES(sp) + + la s0, rt_interrupt_from_thread + LOAD s1, 0(s0) + STORE sp, 0(s1) + + la s0, rt_interrupt_to_thread + LOAD s1, 0(s0) + LOAD sp, 0(s1) + + LOAD a0, 0 * REGBYTES(sp) + csrw mepc, a0 + +spurious_interrupt: + LOAD x1, 1 * REGBYTES(sp) + + /* Remain in M-mode after mret */ + li t0, 0x00001800 + csrs mstatus, t0 + LOAD t0, 2 * REGBYTES(sp) + csrs mstatus, t0 + + LOAD x4, 4 * REGBYTES(sp) + LOAD x5, 5 * REGBYTES(sp) + LOAD x6, 6 * REGBYTES(sp) + LOAD x7, 7 * REGBYTES(sp) + LOAD x8, 8 * REGBYTES(sp) + LOAD x9, 9 * REGBYTES(sp) + LOAD x10, 10 * REGBYTES(sp) + LOAD x11, 11 * REGBYTES(sp) + LOAD x12, 12 * REGBYTES(sp) + LOAD x13, 13 * REGBYTES(sp) + LOAD x14, 14 * REGBYTES(sp) + LOAD x15, 15 * REGBYTES(sp) + LOAD x16, 16 * REGBYTES(sp) + LOAD x17, 17 * REGBYTES(sp) + LOAD x18, 18 * REGBYTES(sp) + LOAD x19, 19 * REGBYTES(sp) + LOAD x20, 20 * REGBYTES(sp) + LOAD x21, 21 * REGBYTES(sp) + LOAD x22, 22 * REGBYTES(sp) + LOAD x23, 23 * REGBYTES(sp) + LOAD x24, 24 * REGBYTES(sp) + LOAD x25, 25 * REGBYTES(sp) + LOAD x26, 26 * REGBYTES(sp) + LOAD x27, 27 * REGBYTES(sp) + LOAD x28, 28 * REGBYTES(sp) + LOAD x29, 29 * REGBYTES(sp) + LOAD x30, 30 * REGBYTES(sp) + LOAD x31, 31 * REGBYTES(sp) + + addi sp, sp, 32 * REGBYTES + mret diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/rtconfig.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/rtconfig.h new file mode 100644 index 0000000000..11de5b209c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/rtconfig.h @@ -0,0 +1,154 @@ +/* RT-Thread config file */ + +#ifndef __RTTHREAD_CFG_H__ +#define __RTTHREAD_CFG_H__ + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +#include "RTE_Components.h" + +#if defined(RTE_USING_FINSH) +#define RT_USING_FINSH +#endif //RTE_USING_FINSH + +#endif //(__CC_ARM) || (__CLANG_ARM) + +// <<< Use Configuration Wizard in Context Menu >>> +// Basic Configuration +// Maximal level of thread priority <8-256> +// Default: 32 +#define RT_THREAD_PRIORITY_MAX 8 +// OS tick per second +// Default: 1000 (1ms) +#define RT_TICK_PER_SECOND 1000 +// Alignment size for CPU architecture data access +// Default: 4 +#define RT_ALIGN_SIZE 4 +// the max length of object name<2-16> +// Default: 8 +#define RT_NAME_MAX 8 +// Using RT-Thread components initialization +// Using RT-Thread components initialization +#define RT_USING_COMPONENTS_INIT +// + +#define RT_USING_USER_MAIN + +// the stack size of main thread<1-4086> +// Default: 512 +#define RT_MAIN_THREAD_STACK_SIZE 256 + +// + +// Debug Configuration +// enable kernel debug configuration +// Default: enable kernel debug configuration +//#define RT_DEBUG +// +// enable components initialization debug configuration<0-1> +// Default: 0 +#define RT_DEBUG_INIT 0 +// thread stack over flow detect +// Diable Thread stack over flow detect +//#define RT_USING_OVERFLOW_CHECK +// +// + +// Hook Configuration +// using hook +// using hook +//#define RT_USING_HOOK +// +// using idle hook +// using idle hook +//#define RT_USING_IDLE_HOOK +// +// + +// Software timers Configuration +// Enables user timers +#define RT_USING_TIMER_SOFT 0 +#if RT_USING_TIMER_SOFT == 0 + #undef RT_USING_TIMER_SOFT +#endif +// The priority level of timer thread <0-31> +// Default: 4 +#define RT_TIMER_THREAD_PRIO 4 +// The stack size of timer thread <0-8192> +// Default: 512 +#define RT_TIMER_THREAD_STACK_SIZE 512 +// + +// IPC(Inter-process communication) Configuration +// Using Semaphore +// Using Semaphore +#define RT_USING_SEMAPHORE +// +// Using Mutex +// Using Mutex +//#define RT_USING_MUTEX +// +// Using Event +// Using Event +//#define RT_USING_EVENT +// +// Using MailBox +// Using MailBox +#define RT_USING_MAILBOX +// +// Using Message Queue +// Using Message Queue +//#define RT_USING_MESSAGEQUEUE +// +// + +// Memory Management Configuration +// Dynamic Heap Management +// Dynamic Heap Management +#define RT_USING_HEAP +// +// using small memory +// using small memory +#define RT_USING_SMALL_MEM +// +// using tiny size of memory +// using tiny size of memory +//#define RT_USING_TINY_SIZE +// +// + +// Console Configuration +// Using console +// Using console +#define RT_USING_CONSOLE +// +// the buffer size of console <1-1024> +// the buffer size of console +// Default: 128 (128Byte) +#define RT_CONSOLEBUF_SIZE 128 +// + +#if defined(RT_USING_FINSH) + #define FINSH_USING_MSH + #define FINSH_USING_MSH_ONLY + // Finsh Configuration + // the priority of finsh thread <1-7> + // the priority of finsh thread + // Default: 6 + #define __FINSH_THREAD_PRIORITY 5 + #define FINSH_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1) + // the stack of finsh thread <1-4096> + // the stack of finsh thread + // Default: 4096 (4096Byte) + #define FINSH_THREAD_STACK_SIZE 512 + // the history lines of finsh thread <1-32> + // the history lines of finsh thread + // Default: 5 + #define FINSH_HISTORY_LINES 1 + + #define FINSH_USING_SYMTAB + // +#endif + +// <<< end of configuration section >>> + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/clock.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/clock.c new file mode 100644 index 0000000000..e969a19b5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/clock.c @@ -0,0 +1,121 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-12 Bernard first version + * 2006-05-27 Bernard add support for same priority thread schedule + * 2006-08-10 Bernard remove the last rt_schedule in rt_tick_increase + * 2010-03-08 Bernard remove rt_passed_second + * 2010-05-20 Bernard fix the tick exceeds the maximum limits + * 2010-07-13 Bernard fix rt_tick_from_millisecond issue found by kuronca + * 2011-06-26 Bernard add rt_tick_set function. + */ + +#include +#include + +static rt_tick_t rt_tick = 0; + +/** + * This function will init system tick and set it to zero. + * @ingroup SystemInit + * + * @deprecated since 1.1.0, this function does not need to be invoked + * in the system initialization. + */ +void rt_system_tick_init(void) +{ +} + +/** + * @addtogroup Clock + */ + +/**@{*/ + +/** + * This function will return current tick from operating system startup + * + * @return current tick + */ +rt_tick_t rt_tick_get(void) +{ + /* return the global tick */ + return rt_tick; +} +RTM_EXPORT(rt_tick_get); + +/** + * This function will set current tick + */ +void rt_tick_set(rt_tick_t tick) +{ + rt_base_t level; + + level = rt_hw_interrupt_disable(); + rt_tick = tick; + rt_hw_interrupt_enable(level); +} + +/** + * This function will notify kernel there is one tick passed. Normally, + * this function is invoked by clock ISR. + */ +void rt_tick_increase(void) +{ + struct rt_thread *thread; + + /* increase the global tick */ + ++ rt_tick; + + /* check time slice */ + thread = rt_thread_self(); + + -- thread->remaining_tick; + if (thread->remaining_tick == 0) + { + /* change to initialized tick */ + thread->remaining_tick = thread->init_tick; + + /* yield */ + rt_thread_yield(); + } + + /* check timer */ + rt_timer_check(); +} + +/** + * This function will calculate the tick from millisecond. + * + * @param ms the specified millisecond + * - Negative Number wait forever + * - Zero not wait + * - Max 0x7fffffff + * + * @return the calculated tick + */ +rt_tick_t rt_tick_from_millisecond(rt_int32_t ms) +{ + rt_tick_t tick; + + if (ms < 0) + { + tick = (rt_tick_t)RT_WAITING_FOREVER; + } + else + { + tick = RT_TICK_PER_SECOND * (ms / 1000); + tick += (RT_TICK_PER_SECOND * (ms % 1000) + 999) / 1000; + } + + /* return the calculated tick */ + return tick; +} +RTM_EXPORT(rt_tick_from_millisecond); + +/**@}*/ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/components.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/components.c new file mode 100644 index 0000000000..67658afde5 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/components.c @@ -0,0 +1,250 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2012-09-20 Bernard Change the name to components.c + * And all components related header files. + * 2012-12-23 Bernard fix the pthread initialization issue. + * 2013-06-23 Bernard Add the init_call for components initialization. + * 2013-07-05 Bernard Remove initialization feature for MS VC++ compiler + * 2015-02-06 Bernard Remove the MS VC++ support and move to the kernel + * 2015-05-04 Bernard Rename it to components.c because compiling issue + * in some IDEs. + * 2015-07-29 Arda.Fu Add support to use RT_USING_USER_MAIN with IAR + */ + +#include +#include + +#ifdef RT_USING_USER_MAIN +#ifndef RT_MAIN_THREAD_STACK_SIZE +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#endif +#ifndef RT_MAIN_THREAD_PRIORITY +#define RT_MAIN_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 3) +#endif +#endif + +#ifdef RT_USING_COMPONENTS_INIT +/* + * Components Initialization will initialize some driver and components as following + * order: + * rti_start --> 0 + * BOARD_EXPORT --> 1 + * rti_board_end --> 1.end + * + * DEVICE_EXPORT --> 2 + * COMPONENT_EXPORT --> 3 + * FS_EXPORT --> 4 + * ENV_EXPORT --> 5 + * APP_EXPORT --> 6 + * + * rti_end --> 6.end + * + * These automatically initialization, the driver or component initial function must + * be defined with: + * INIT_BOARD_EXPORT(fn); + * INIT_DEVICE_EXPORT(fn); + * ... + * INIT_APP_EXPORT(fn); + * etc. + */ +static int rti_start(void) +{ + return 0; +} +INIT_EXPORT(rti_start, "0"); + +static int rti_board_start(void) +{ + return 0; +} +INIT_EXPORT(rti_board_start, "0.end"); + +static int rti_board_end(void) +{ + return 0; +} +INIT_EXPORT(rti_board_end, "1.end"); + +static int rti_end(void) +{ + return 0; +} +INIT_EXPORT(rti_end, "6.end"); + +/** + * RT-Thread Components Initialization for board + */ +void rt_components_board_init(void) +{ +#if RT_DEBUG_INIT + int result; + const struct rt_init_desc *desc; + for (desc = &__rt_init_desc_rti_board_start; desc < &__rt_init_desc_rti_board_end; desc ++) + { + rt_kprintf("initialize %s", desc->fn_name); + result = desc->fn(); + rt_kprintf(":%d done\n", result); + } +#else + const init_fn_t *fn_ptr; + + for (fn_ptr = &__rt_init_rti_board_start; fn_ptr < &__rt_init_rti_board_end; fn_ptr++) + { + (*fn_ptr)(); + } +#endif +} + +/** + * RT-Thread Components Initialization + */ +void rt_components_init(void) +{ +#if RT_DEBUG_INIT + int result; + const struct rt_init_desc *desc; + + rt_kprintf("do components initialization.\n"); + for (desc = &__rt_init_desc_rti_board_end; desc < &__rt_init_desc_rti_end; desc ++) + { + rt_kprintf("initialize %s", desc->fn_name); + result = desc->fn(); + rt_kprintf(":%d done\n", result); + } +#else + const init_fn_t *fn_ptr; + + for (fn_ptr = &__rt_init_rti_board_end; fn_ptr < &__rt_init_rti_end; fn_ptr ++) + { + (*fn_ptr)(); + } +#endif +} + +#ifdef RT_USING_USER_MAIN + +void rt_application_init(void); +void rt_hw_board_init(void); +int rtthread_startup(void); + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int $Super$$main(void); +/* re-define main function */ +int $Sub$$main(void) +{ + rtthread_startup(); + return 0; +} +#elif defined(__ICCARM__) +extern int main(void); +/* __low_level_init will auto called by IAR cstartup */ +extern void __iar_data_init3(void); +int __low_level_init(void) +{ + // call IAR table copy function. + __iar_data_init3(); + rtthread_startup(); + return 0; +} +#elif defined(__GNUC__) +extern int main(void); +/* Add -eentry to arm-none-eabi-gcc argument */ +int entry(void) +{ + rtthread_startup(); + return 0; +} +#endif + +#ifndef RT_USING_HEAP +/* if there is not enable heap, we should use static thread and stack. */ +ALIGN(8) +static rt_uint8_t main_stack[RT_MAIN_THREAD_STACK_SIZE]; +struct rt_thread main_thread; +#endif + +/* the system main thread */ +void main_thread_entry(void *parameter) +{ + extern int main(void); + extern int $Super$$main(void); + + /* RT-Thread components initialization */ + rt_components_init(); + + /* invoke system main function */ +#if defined(__CC_ARM) || defined(__CLANG_ARM) + $Super$$main(); /* for ARMCC. */ +#elif defined(__ICCARM__) || defined(__GNUC__) + main(); +#endif +} + +void rt_application_init(void) +{ + rt_thread_t tid; + +#ifdef RT_USING_HEAP + tid = rt_thread_create("main", main_thread_entry, RT_NULL, + RT_MAIN_THREAD_STACK_SIZE, RT_MAIN_THREAD_PRIORITY, 20); + RT_ASSERT(tid != RT_NULL); +#else + rt_err_t result; + + tid = &main_thread; + result = rt_thread_init(tid, "main", main_thread_entry, RT_NULL, + main_stack, sizeof(main_stack), RT_MAIN_THREAD_PRIORITY, 20); + RT_ASSERT(result == RT_EOK); + + /* if not define RT_USING_HEAP, using to eliminate the warning */ + (void)result; +#endif + + rt_thread_startup(tid); +} + +int rtthread_startup(void) +{ + rt_hw_interrupt_disable(); + + /* board level initialization + * NOTE: please initialize heap inside board initialization. + */ + rt_hw_board_init(); + + /* show RT-Thread version */ + rt_show_version(); + + /* timer system initialization */ + rt_system_timer_init(); + + /* scheduler system initialization */ + rt_system_scheduler_init(); + +#ifdef RT_USING_SIGNALS + /* signal system initialization */ + rt_system_signal_init(); +#endif + + /* create init_thread */ + rt_application_init(); + + /* timer thread initialization */ + rt_system_timer_thread_init(); + + /* idle thread initialization */ + rt_thread_idle_init(); + + /* start scheduler */ + rt_system_scheduler_start(); + + /* never reach here */ + return 0; +} +#endif +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/cpu.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/cpu.c new file mode 100644 index 0000000000..5cba05fe70 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/cpu.c @@ -0,0 +1,14 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2018-10-30 Bernard The first version + */ + +#include +#include + +/* nothing on non-smp version */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/idle.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/idle.c new file mode 100644 index 0000000000..bf5f2d1dc8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/idle.c @@ -0,0 +1,281 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-23 Bernard the first version + * 2010-11-10 Bernard add cleanup callback function in thread exit. + * 2012-12-29 Bernard fix compiling warning. + * 2013-12-21 Grissiom let rt_thread_idle_excute loop until there is no + * dead thread. + * 2016-08-09 ArdaFu add method to get the handler of the idle thread. + * 2018-02-07 Bernard lock scheduler to protect tid->cleanup. + * 2018-07-14 armink add idle hook list + */ + +#include +#include + +#ifdef RT_USING_MODULE +#include +#endif + +#if defined (RT_USING_HOOK) +#ifndef RT_USING_IDLE_HOOK +#define RT_USING_IDLE_HOOK +#endif +#endif + +#ifndef IDLE_THREAD_STACK_SIZE +#if defined (RT_USING_IDLE_HOOK) || defined(RT_USING_HEAP) +#define IDLE_THREAD_STACK_SIZE 256 +#else +#define IDLE_THREAD_STACK_SIZE 128 +#endif +#endif + +static struct rt_thread idle; +ALIGN(RT_ALIGN_SIZE) +static rt_uint8_t rt_thread_stack[IDLE_THREAD_STACK_SIZE]; + +extern rt_list_t rt_thread_defunct; + +#ifdef RT_USING_IDLE_HOOK + +#ifndef RT_IDEL_HOOK_LIST_SIZE +#define RT_IDEL_HOOK_LIST_SIZE 4 +#endif + +static void (*idle_hook_list[RT_IDEL_HOOK_LIST_SIZE])(); + +/** + * @ingroup Hook + * This function sets a hook function to idle thread loop. When the system performs + * idle loop, this hook function should be invoked. + * + * @param hook the specified hook function + * + * @return RT_EOK: set OK + * -RT_EFULL: hook list is full + * + * @note the hook function must be simple and never be blocked or suspend. + */ +rt_err_t rt_thread_idle_sethook(void (*hook)(void)) +{ + rt_size_t i; + rt_base_t level; + rt_err_t ret = -RT_EFULL; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++) + { + if (idle_hook_list[i] == RT_NULL) + { + idle_hook_list[i] = hook; + ret = RT_EOK; + break; + } + } + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + return ret; +} + +/** + * delete the idle hook on hook list + * + * @param hook the specified hook function + * + * @return RT_EOK: delete OK + * -RT_ENOSYS: hook was not found + */ +rt_err_t rt_thread_idle_delhook(void (*hook)(void)) +{ + rt_size_t i; + rt_base_t level; + rt_err_t ret = -RT_ENOSYS; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++) + { + if (idle_hook_list[i] == hook) + { + idle_hook_list[i] = RT_NULL; + ret = RT_EOK; + break; + } + } + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + return ret; +} + +#endif + +/* Return whether there is defunctional thread to be deleted. */ +rt_inline int _has_defunct_thread(void) +{ + /* The rt_list_isempty has prototype of "int rt_list_isempty(const rt_list_t *l)". + * So the compiler has a good reason that the rt_thread_defunct list does + * not change within rt_thread_idle_excute thus optimize the "while" loop + * into a "if". + * + * So add the volatile qualifier here. */ + const volatile rt_list_t *l = (const volatile rt_list_t *)&rt_thread_defunct; + + return l->next != l; +} + +/** + * @ingroup Thread + * + * This function will perform system background job when system idle. + */ +void rt_thread_idle_excute(void) +{ + /* Loop until there is no dead thread. So one call to rt_thread_idle_excute + * will do all the cleanups. */ + while (_has_defunct_thread()) + { + rt_base_t lock; + rt_thread_t thread; +#ifdef RT_USING_MODULE + struct rt_dlmodule *module = RT_NULL; +#endif + RT_DEBUG_NOT_IN_INTERRUPT; + + /* disable interrupt */ + lock = rt_hw_interrupt_disable(); + + /* re-check whether list is empty */ + if (_has_defunct_thread()) + { + /* get defunct thread */ + thread = rt_list_entry(rt_thread_defunct.next, + struct rt_thread, + tlist); +#ifdef RT_USING_MODULE + module = (struct rt_dlmodule*)thread->module_id; + if (module) + { + dlmodule_destroy(module); + } +#endif + /* remove defunct thread */ + rt_list_remove(&(thread->tlist)); + + /* lock scheduler to prevent scheduling in cleanup function. */ + rt_enter_critical(); + + /* invoke thread cleanup */ + if (thread->cleanup != RT_NULL) + thread->cleanup(thread); + +#ifdef RT_USING_SIGNALS + rt_thread_free_sig(thread); +#endif + + /* if it's a system object, not delete it */ + if (rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) + { + /* detach this object */ + rt_object_detach((rt_object_t)thread); + /* unlock scheduler */ + rt_exit_critical(); + + /* enable interrupt */ + rt_hw_interrupt_enable(lock); + + return; + } + + /* unlock scheduler */ + rt_exit_critical(); + } + else + { + /* enable interrupt */ + rt_hw_interrupt_enable(lock); + + /* may the defunct thread list is removed by others, just return */ + return; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(lock); + +#ifdef RT_USING_HEAP + /* release thread's stack */ + RT_KERNEL_FREE(thread->stack_addr); + /* delete thread object */ + rt_object_delete((rt_object_t)thread); +#endif + } +} + +extern void rt_system_power_manager(void); +static void rt_thread_idle_entry(void *parameter) +{ + while (1) + { + +#ifdef RT_USING_IDLE_HOOK + rt_size_t i; + + for (i = 0; i < RT_IDEL_HOOK_LIST_SIZE; i++) + { + if (idle_hook_list[i] != RT_NULL) + { + idle_hook_list[i](); + } + } +#endif + + rt_thread_idle_excute(); +#ifdef RT_USING_PM + rt_system_power_manager(); +#endif + } +} + +/** + * @ingroup SystemInit + * + * This function will initialize idle thread, then start it. + * + * @note this function must be invoked when system init. + */ +void rt_thread_idle_init(void) +{ + /* initialize thread */ + rt_thread_init(&idle, + "tidle", + rt_thread_idle_entry, + RT_NULL, + &rt_thread_stack[0], + sizeof(rt_thread_stack), + RT_THREAD_PRIORITY_MAX - 1, + 32); + + /* startup */ + rt_thread_startup(&idle); +} + +/** + * @ingroup Thread + * + * This function will get the handler of the idle thread. + * + */ +rt_thread_t rt_thread_idle_gethandler(void) +{ + return (rt_thread_t)(&idle); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/ipc.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/ipc.c new file mode 100644 index 0000000000..36b714d19f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/ipc.c @@ -0,0 +1,2328 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-14 Bernard the first version + * 2006-04-25 Bernard implement semaphore + * 2006-05-03 Bernard add RT_IPC_DEBUG + * modify the type of IPC waiting time to rt_int32_t + * 2006-05-10 Bernard fix the semaphore take bug and add IPC object + * 2006-05-12 Bernard implement mailbox and message queue + * 2006-05-20 Bernard implement mutex + * 2006-05-23 Bernard implement fast event + * 2006-05-24 Bernard implement event + * 2006-06-03 Bernard fix the thread timer init bug + * 2006-06-05 Bernard fix the mutex release bug + * 2006-06-07 Bernard fix the message queue send bug + * 2006-08-04 Bernard add hook support + * 2009-05-21 Yi.qiu fix the sem release bug + * 2009-07-18 Bernard fix the event clear bug + * 2009-09-09 Bernard remove fast event and fix ipc release bug + * 2009-10-10 Bernard change semaphore and mutex value to unsigned value + * 2009-10-25 Bernard change the mb/mq receive timeout to 0 if the + * re-calculated delta tick is a negative number. + * 2009-12-16 Bernard fix the rt_ipc_object_suspend issue when IPC flag + * is RT_IPC_FLAG_PRIO + * 2010-01-20 mbbill remove rt_ipc_object_decrease function. + * 2010-04-20 Bernard move memcpy outside interrupt disable in mq + * 2010-10-26 yi.qiu add module support in rt_mp_delete and rt_mq_delete + * 2010-11-10 Bernard add IPC reset command implementation. + * 2011-12-18 Bernard add more parameter checking in message queue + * 2013-09-14 Grissiom add an option check in rt_event_recv + */ + +#include +#include + +#ifdef RT_USING_HOOK +extern void (*rt_object_trytake_hook)(struct rt_object *object); +extern void (*rt_object_take_hook)(struct rt_object *object); +extern void (*rt_object_put_hook)(struct rt_object *object); +#endif + +/** + * @addtogroup IPC + */ + +/**@{*/ + +/** + * This function will initialize an IPC object + * + * @param ipc the IPC object + * + * @return the operation status, RT_EOK on successful + */ +rt_inline rt_err_t rt_ipc_object_init(struct rt_ipc_object *ipc) +{ + /* init ipc object */ + rt_list_init(&(ipc->suspend_thread)); + + return RT_EOK; +} + +/** + * This function will suspend a thread to a specified list. IPC object or some + * double-queue object (mailbox etc.) contains this kind of list. + * + * @param list the IPC suspended thread list + * @param thread the thread object to be suspended + * @param flag the IPC object flag, + * which shall be RT_IPC_FLAG_FIFO/RT_IPC_FLAG_PRIO. + * + * @return the operation status, RT_EOK on successful + */ +rt_inline rt_err_t rt_ipc_list_suspend(rt_list_t *list, + struct rt_thread *thread, + rt_uint8_t flag) +{ + /* suspend thread */ + rt_thread_suspend(thread); + + switch (flag) + { + case RT_IPC_FLAG_FIFO: + rt_list_insert_before(list, &(thread->tlist)); + break; + + case RT_IPC_FLAG_PRIO: + { + struct rt_list_node *n; + struct rt_thread *sthread; + + /* find a suitable position */ + for (n = list->next; n != list; n = n->next) + { + sthread = rt_list_entry(n, struct rt_thread, tlist); + + /* find out */ + if (thread->current_priority < sthread->current_priority) + { + /* insert this thread before the sthread */ + rt_list_insert_before(&(sthread->tlist), &(thread->tlist)); + break; + } + } + + /* + * not found a suitable position, + * append to the end of suspend_thread list + */ + if (n == list) + rt_list_insert_before(list, &(thread->tlist)); + } + break; + } + + return RT_EOK; +} + +/** + * This function will resume the first thread in the list of a IPC object: + * - remove the thread from suspend queue of IPC object + * - put the thread into system ready queue + * + * @param list the thread list + * + * @return the operation status, RT_EOK on successful + */ +rt_inline rt_err_t rt_ipc_list_resume(rt_list_t *list) +{ + struct rt_thread *thread; + + /* get thread entry */ + thread = rt_list_entry(list->next, struct rt_thread, tlist); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("resume thread:%s\n", thread->name)); + + /* resume it */ + rt_thread_resume(thread); + + return RT_EOK; +} + +/** + * This function will resume all suspended threads in a list, including + * suspend list of IPC object and private list of mailbox etc. + * + * @param list of the threads to resume + * + * @return the operation status, RT_EOK on successful + */ +rt_inline rt_err_t rt_ipc_list_resume_all(rt_list_t *list) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + + /* wakeup all suspend threads */ + while (!rt_list_isempty(list)) + { + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* get next suspend thread */ + thread = rt_list_entry(list->next, struct rt_thread, tlist); + /* set error code to RT_ERROR */ + thread->error = -RT_ERROR; + + /* + * resume thread + * In rt_thread_resume function, it will remove current thread from + * suspend list + */ + rt_thread_resume(thread); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + } + + return RT_EOK; +} + +#ifdef RT_USING_SEMAPHORE +/** + * This function will initialize a semaphore and put it under control of + * resource management. + * + * @param sem the semaphore object + * @param name the name of semaphore + * @param value the init value of semaphore + * @param flag the flag of semaphore + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_sem_init(rt_sem_t sem, + const char *name, + rt_uint32_t value, + rt_uint8_t flag) +{ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(value < 0x10000U); + + /* init object */ + rt_object_init(&(sem->parent.parent), RT_Object_Class_Semaphore, name); + + /* init ipc object */ + rt_ipc_object_init(&(sem->parent)); + + /* set init value */ + sem->value = (rt_uint16_t)value; + + /* set parent */ + sem->parent.parent.flag = flag; + + return RT_EOK; +} +RTM_EXPORT(rt_sem_init); + +/** + * This function will detach a semaphore from resource management + * + * @param sem the semaphore object + * + * @return the operation status, RT_EOK on successful + * + * @see rt_sem_delete + */ +rt_err_t rt_sem_detach(rt_sem_t sem) +{ + /* parameter check */ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent)); + + /* wakeup all suspend threads */ + rt_ipc_list_resume_all(&(sem->parent.suspend_thread)); + + /* detach semaphore object */ + rt_object_detach(&(sem->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_sem_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a semaphore from system resource + * + * @param name the name of semaphore + * @param value the init value of semaphore + * @param flag the flag of semaphore + * + * @return the created semaphore, RT_NULL on error happen + * + * @see rt_sem_init + */ +rt_sem_t rt_sem_create(const char *name, rt_uint32_t value, rt_uint8_t flag) +{ + rt_sem_t sem; + + RT_DEBUG_NOT_IN_INTERRUPT; + RT_ASSERT(value < 0x10000U); + + /* allocate object */ + sem = (rt_sem_t)rt_object_allocate(RT_Object_Class_Semaphore, name); + if (sem == RT_NULL) + return sem; + + /* init ipc object */ + rt_ipc_object_init(&(sem->parent)); + + /* set init value */ + sem->value = value; + + /* set parent */ + sem->parent.parent.flag = flag; + + return sem; +} +RTM_EXPORT(rt_sem_create); + +/** + * This function will delete a semaphore object and release the memory + * + * @param sem the semaphore object + * + * @return the error code + * + * @see rt_sem_detach + */ +rt_err_t rt_sem_delete(rt_sem_t sem) +{ + RT_DEBUG_NOT_IN_INTERRUPT; + + /* parameter check */ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + RT_ASSERT(rt_object_is_systemobject(&sem->parent.parent) == RT_FALSE); + + /* wakeup all suspend threads */ + rt_ipc_list_resume_all(&(sem->parent.suspend_thread)); + + /* delete semaphore object */ + rt_object_delete(&(sem->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_sem_delete); +#endif + +/** + * This function will take a semaphore, if the semaphore is unavailable, the + * thread shall wait for a specified time. + * + * @param sem the semaphore object + * @param time the waiting time + * + * @return the error code + */ +rt_err_t rt_sem_take(rt_sem_t sem, rt_int32_t time) +{ + register rt_base_t temp; + struct rt_thread *thread; + + /* parameter check */ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(sem->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("thread %s take sem:%s, which value is: %d\n", + rt_thread_self()->name, + ((struct rt_object *)sem)->name, + sem->value)); + + if (sem->value > 0) + { + /* semaphore is available */ + sem->value --; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + } + else + { + /* no waiting, return with timeout */ + if (time == 0) + { + rt_hw_interrupt_enable(temp); + + return -RT_ETIMEOUT; + } + else + { + /* current context checking */ + RT_DEBUG_IN_THREAD_CONTEXT; + + /* semaphore is unavailable, push to suspend list */ + /* get current thread */ + thread = rt_thread_self(); + + /* reset thread error number */ + thread->error = RT_EOK; + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("sem take: suspend thread - %s\n", + thread->name)); + + /* suspend thread */ + rt_ipc_list_suspend(&(sem->parent.suspend_thread), + thread, + sem->parent.parent.flag); + + /* has waiting time, start thread timer */ + if (time > 0) + { + RT_DEBUG_LOG(RT_DEBUG_IPC, ("set thread:%s to timer list\n", + thread->name)); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &time); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* do schedule */ + rt_schedule(); + + if (thread->error != RT_EOK) + { + return thread->error; + } + } + } + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(sem->parent.parent))); + + return RT_EOK; +} +RTM_EXPORT(rt_sem_take); + +/** + * This function will try to take a semaphore and immediately return + * + * @param sem the semaphore object + * + * @return the error code + */ +rt_err_t rt_sem_trytake(rt_sem_t sem) +{ + return rt_sem_take(sem, 0); +} +RTM_EXPORT(rt_sem_trytake); + +/** + * This function will release a semaphore, if there are threads suspended on + * semaphore, it will be waked up. + * + * @param sem the semaphore object + * + * @return the error code + */ +rt_err_t rt_sem_release(rt_sem_t sem) +{ + register rt_base_t temp; + register rt_bool_t need_schedule; + + /* parameter check */ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(sem->parent.parent))); + + need_schedule = RT_FALSE; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("thread %s releases sem:%s, which value is: %d\n", + rt_thread_self()->name, + ((struct rt_object *)sem)->name, + sem->value)); + + if (!rt_list_isempty(&sem->parent.suspend_thread)) + { + /* resume the suspended thread */ + rt_ipc_list_resume(&(sem->parent.suspend_thread)); + need_schedule = RT_TRUE; + } + else + sem->value ++; /* increase value */ + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* resume a thread, re-schedule */ + if (need_schedule == RT_TRUE) + rt_schedule(); + + return RT_EOK; +} +RTM_EXPORT(rt_sem_release); + +/** + * This function can get or set some extra attributions of a semaphore object. + * + * @param sem the semaphore object + * @param cmd the execution command + * @param arg the execution argument + * + * @return the error code + */ +rt_err_t rt_sem_control(rt_sem_t sem, int cmd, void *arg) +{ + rt_ubase_t level; + + /* parameter check */ + RT_ASSERT(sem != RT_NULL); + RT_ASSERT(rt_object_get_type(&sem->parent.parent) == RT_Object_Class_Semaphore); + + if (cmd == RT_IPC_CMD_RESET) + { + rt_uint32_t value; + + /* get value */ + value = (rt_uint32_t)arg; + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* resume all waiting thread */ + rt_ipc_list_resume_all(&sem->parent.suspend_thread); + + /* set new value */ + sem->value = (rt_uint16_t)value; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_schedule(); + + return RT_EOK; + } + + return -RT_ERROR; +} +RTM_EXPORT(rt_sem_control); +#endif /* end of RT_USING_SEMAPHORE */ + +#ifdef RT_USING_MUTEX +/** + * This function will initialize a mutex and put it under control of resource + * management. + * + * @param mutex the mutex object + * @param name the name of mutex + * @param flag the flag of mutex + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_mutex_init(rt_mutex_t mutex, const char *name, rt_uint8_t flag) +{ + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + + /* init object */ + rt_object_init(&(mutex->parent.parent), RT_Object_Class_Mutex, name); + + /* init ipc object */ + rt_ipc_object_init(&(mutex->parent)); + + mutex->value = 1; + mutex->owner = RT_NULL; + mutex->original_priority = 0xFF; + mutex->hold = 0; + + /* set flag */ + mutex->parent.parent.flag = flag; + + return RT_EOK; +} +RTM_EXPORT(rt_mutex_init); + +/** + * This function will detach a mutex from resource management + * + * @param mutex the mutex object + * + * @return the operation status, RT_EOK on successful + * + * @see rt_mutex_delete + */ +rt_err_t rt_mutex_detach(rt_mutex_t mutex) +{ + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + RT_ASSERT(rt_object_get_type(&mutex->parent.parent) == RT_Object_Class_Mutex); + RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent)); + + /* wakeup all suspend threads */ + rt_ipc_list_resume_all(&(mutex->parent.suspend_thread)); + + /* detach semaphore object */ + rt_object_detach(&(mutex->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mutex_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a mutex from system resource + * + * @param name the name of mutex + * @param flag the flag of mutex + * + * @return the created mutex, RT_NULL on error happen + * + * @see rt_mutex_init + */ +rt_mutex_t rt_mutex_create(const char *name, rt_uint8_t flag) +{ + struct rt_mutex *mutex; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* allocate object */ + mutex = (rt_mutex_t)rt_object_allocate(RT_Object_Class_Mutex, name); + if (mutex == RT_NULL) + return mutex; + + /* init ipc object */ + rt_ipc_object_init(&(mutex->parent)); + + mutex->value = 1; + mutex->owner = RT_NULL; + mutex->original_priority = 0xFF; + mutex->hold = 0; + + /* set flag */ + mutex->parent.parent.flag = flag; + + return mutex; +} +RTM_EXPORT(rt_mutex_create); + +/** + * This function will delete a mutex object and release the memory + * + * @param mutex the mutex object + * + * @return the error code + * + * @see rt_mutex_detach + */ +rt_err_t rt_mutex_delete(rt_mutex_t mutex) +{ + RT_DEBUG_NOT_IN_INTERRUPT; + + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + RT_ASSERT(rt_object_get_type(&mutex->parent.parent) == RT_Object_Class_Mutex); + RT_ASSERT(rt_object_is_systemobject(&mutex->parent.parent) == RT_FALSE); + + /* wakeup all suspend threads */ + rt_ipc_list_resume_all(&(mutex->parent.suspend_thread)); + + /* delete semaphore object */ + rt_object_delete(&(mutex->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mutex_delete); +#endif + +/** + * This function will take a mutex, if the mutex is unavailable, the + * thread shall wait for a specified time. + * + * @param mutex the mutex object + * @param time the waiting time + * + * @return the error code + */ +rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time) +{ + register rt_base_t temp; + struct rt_thread *thread; + + /* this function must not be used in interrupt even if time = 0 */ + RT_DEBUG_IN_THREAD_CONTEXT; + + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + RT_ASSERT(rt_object_get_type(&mutex->parent.parent) == RT_Object_Class_Mutex); + + /* get current thread */ + thread = rt_thread_self(); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mutex->parent.parent))); + + RT_DEBUG_LOG(RT_DEBUG_IPC, + ("mutex_take: current thread %s, mutex value: %d, hold: %d\n", + thread->name, mutex->value, mutex->hold)); + + /* reset thread error */ + thread->error = RT_EOK; + + if (mutex->owner == thread) + { + /* it's the same thread */ + mutex->hold ++; + } + else + { +__again: + /* The value of mutex is 1 in initial status. Therefore, if the + * value is great than 0, it indicates the mutex is avaible. + */ + if (mutex->value > 0) + { + /* mutex is available */ + mutex->value --; + + /* set mutex owner and original priority */ + mutex->owner = thread; + mutex->original_priority = thread->current_priority; + mutex->hold ++; + } + else + { + /* no waiting, return with timeout */ + if (time == 0) + { + /* set error as timeout */ + thread->error = -RT_ETIMEOUT; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return -RT_ETIMEOUT; + } + else + { + /* mutex is unavailable, push to suspend list */ + RT_DEBUG_LOG(RT_DEBUG_IPC, ("mutex_take: suspend thread: %s\n", + thread->name)); + + /* change the owner thread priority of mutex */ + if (thread->current_priority < mutex->owner->current_priority) + { + /* change the owner thread priority */ + rt_thread_control(mutex->owner, + RT_THREAD_CTRL_CHANGE_PRIORITY, + &thread->current_priority); + } + + /* suspend current thread */ + rt_ipc_list_suspend(&(mutex->parent.suspend_thread), + thread, + mutex->parent.parent.flag); + + /* has waiting time, start thread timer */ + if (time > 0) + { + RT_DEBUG_LOG(RT_DEBUG_IPC, + ("mutex_take: start the timer of thread:%s\n", + thread->name)); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &time); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* do schedule */ + rt_schedule(); + + if (thread->error != RT_EOK) + { + /* interrupt by signal, try it again */ + if (thread->error == -RT_EINTR) goto __again; + + /* return error */ + return thread->error; + } + else + { + /* the mutex is taken successfully. */ + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + } + } + } + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mutex->parent.parent))); + + return RT_EOK; +} +RTM_EXPORT(rt_mutex_take); + +/** + * This function will release a mutex, if there are threads suspended on mutex, + * it will be waked up. + * + * @param mutex the mutex object + * + * @return the error code + */ +rt_err_t rt_mutex_release(rt_mutex_t mutex) +{ + register rt_base_t temp; + struct rt_thread *thread; + rt_bool_t need_schedule; + + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + RT_ASSERT(rt_object_get_type(&mutex->parent.parent) == RT_Object_Class_Mutex); + + need_schedule = RT_FALSE; + + /* only thread could release mutex because we need test the ownership */ + RT_DEBUG_IN_THREAD_CONTEXT; + + /* get current thread */ + thread = rt_thread_self(); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, + ("mutex_release:current thread %s, mutex value: %d, hold: %d\n", + thread->name, mutex->value, mutex->hold)); + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mutex->parent.parent))); + + /* mutex only can be released by owner */ + if (thread != mutex->owner) + { + thread->error = -RT_ERROR; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return -RT_ERROR; + } + + /* decrease hold */ + mutex->hold --; + /* if no hold */ + if (mutex->hold == 0) + { + /* change the owner thread to original priority */ + if (mutex->original_priority != mutex->owner->current_priority) + { + rt_thread_control(mutex->owner, + RT_THREAD_CTRL_CHANGE_PRIORITY, + &(mutex->original_priority)); + } + + /* wakeup suspended thread */ + if (!rt_list_isempty(&mutex->parent.suspend_thread)) + { + /* get suspended thread */ + thread = rt_list_entry(mutex->parent.suspend_thread.next, + struct rt_thread, + tlist); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("mutex_release: resume thread: %s\n", + thread->name)); + + /* set new owner and priority */ + mutex->owner = thread; + mutex->original_priority = thread->current_priority; + mutex->hold ++; + + /* resume thread */ + rt_ipc_list_resume(&(mutex->parent.suspend_thread)); + + need_schedule = RT_TRUE; + } + else + { + /* increase value */ + mutex->value ++; + + /* clear owner */ + mutex->owner = RT_NULL; + mutex->original_priority = 0xff; + } + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* perform a schedule */ + if (need_schedule == RT_TRUE) + rt_schedule(); + + return RT_EOK; +} +RTM_EXPORT(rt_mutex_release); + +/** + * This function can get or set some extra attributions of a mutex object. + * + * @param mutex the mutex object + * @param cmd the execution command + * @param arg the execution argument + * + * @return the error code + */ +rt_err_t rt_mutex_control(rt_mutex_t mutex, int cmd, void *arg) +{ + /* parameter check */ + RT_ASSERT(mutex != RT_NULL); + RT_ASSERT(rt_object_get_type(&mutex->parent.parent) == RT_Object_Class_Mutex); + + return -RT_ERROR; +} +RTM_EXPORT(rt_mutex_control); +#endif /* end of RT_USING_MUTEX */ + +#ifdef RT_USING_EVENT +/** + * This function will initialize an event and put it under control of resource + * management. + * + * @param event the event object + * @param name the name of event + * @param flag the flag of event + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_event_init(rt_event_t event, const char *name, rt_uint8_t flag) +{ + /* parameter check */ + RT_ASSERT(event != RT_NULL); + + /* init object */ + rt_object_init(&(event->parent.parent), RT_Object_Class_Event, name); + + /* set parent flag */ + event->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(event->parent)); + + /* init event */ + event->set = 0; + + return RT_EOK; +} +RTM_EXPORT(rt_event_init); + +/** + * This function will detach an event object from resource management + * + * @param event the event object + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_event_detach(rt_event_t event) +{ + /* parameter check */ + RT_ASSERT(event != RT_NULL); + RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + RT_ASSERT(rt_object_is_systemobject(&event->parent.parent)); + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&(event->parent.suspend_thread)); + + /* detach event object */ + rt_object_detach(&(event->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_event_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create an event object from system resource + * + * @param name the name of event + * @param flag the flag of event + * + * @return the created event, RT_NULL on error happen + */ +rt_event_t rt_event_create(const char *name, rt_uint8_t flag) +{ + rt_event_t event; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* allocate object */ + event = (rt_event_t)rt_object_allocate(RT_Object_Class_Event, name); + if (event == RT_NULL) + return event; + + /* set parent */ + event->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(event->parent)); + + /* init event */ + event->set = 0; + + return event; +} +RTM_EXPORT(rt_event_create); + +/** + * This function will delete an event object and release the memory + * + * @param event the event object + * + * @return the error code + */ +rt_err_t rt_event_delete(rt_event_t event) +{ + /* parameter check */ + RT_ASSERT(event != RT_NULL); + RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + RT_ASSERT(rt_object_is_systemobject(&event->parent.parent) == RT_FALSE); + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&(event->parent.suspend_thread)); + + /* delete event object */ + rt_object_delete(&(event->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_event_delete); +#endif + +/** + * This function will send an event to the event object, if there are threads + * suspended on event object, it will be waked up. + * + * @param event the event object + * @param set the event set + * + * @return the error code + */ +rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) +{ + struct rt_list_node *n; + struct rt_thread *thread; + register rt_ubase_t level; + register rt_base_t status; + rt_bool_t need_schedule; + + /* parameter check */ + RT_ASSERT(event != RT_NULL); + RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + + if (set == 0) + return -RT_ERROR; + + need_schedule = RT_FALSE; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* set event */ + event->set |= set; + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(event->parent.parent))); + + if (!rt_list_isempty(&event->parent.suspend_thread)) + { + /* search thread list to resume thread */ + n = event->parent.suspend_thread.next; + while (n != &(event->parent.suspend_thread)) + { + /* get thread */ + thread = rt_list_entry(n, struct rt_thread, tlist); + + status = -RT_ERROR; + if (thread->event_info & RT_EVENT_FLAG_AND) + { + if ((thread->event_set & event->set) == thread->event_set) + { + /* received an AND event */ + status = RT_EOK; + } + } + else if (thread->event_info & RT_EVENT_FLAG_OR) + { + if (thread->event_set & event->set) + { + /* save recieved event set */ + thread->event_set = thread->event_set & event->set; + + /* received an OR event */ + status = RT_EOK; + } + } + + /* move node to the next */ + n = n->next; + + /* condition is satisfied, resume thread */ + if (status == RT_EOK) + { + /* clear event */ + if (thread->event_info & RT_EVENT_FLAG_CLEAR) + event->set &= ~thread->event_set; + + /* resume thread, and thread list breaks out */ + rt_thread_resume(thread); + + /* need do a scheduling */ + need_schedule = RT_TRUE; + } + } + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* do a schedule */ + if (need_schedule == RT_TRUE) + rt_schedule(); + + return RT_EOK; +} +RTM_EXPORT(rt_event_send); + +/** + * This function will receive an event from event object, if the event is + * unavailable, the thread shall wait for a specified time. + * + * @param event the fast event object + * @param set the interested event set + * @param option the receive option, either RT_EVENT_FLAG_AND or + * RT_EVENT_FLAG_OR should be set. + * @param timeout the waiting time + * @param recved the received event, if you don't care, RT_NULL can be set. + * + * @return the error code + */ +rt_err_t rt_event_recv(rt_event_t event, + rt_uint32_t set, + rt_uint8_t option, + rt_int32_t timeout, + rt_uint32_t *recved) +{ + struct rt_thread *thread; + register rt_ubase_t level; + register rt_base_t status; + + RT_DEBUG_IN_THREAD_CONTEXT; + + /* parameter check */ + RT_ASSERT(event != RT_NULL); + RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + + if (set == 0) + return -RT_ERROR; + + /* init status */ + status = -RT_ERROR; + /* get current thread */ + thread = rt_thread_self(); + /* reset thread error */ + thread->error = RT_EOK; + + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(event->parent.parent))); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* check event set */ + if (option & RT_EVENT_FLAG_AND) + { + if ((event->set & set) == set) + status = RT_EOK; + } + else if (option & RT_EVENT_FLAG_OR) + { + if (event->set & set) + status = RT_EOK; + } + else + { + /* either RT_EVENT_FLAG_AND or RT_EVENT_FLAG_OR should be set */ + RT_ASSERT(0); + } + + if (status == RT_EOK) + { + /* set received event */ + if (recved) + *recved = (event->set & set); + + /* received event */ + if (option & RT_EVENT_FLAG_CLEAR) + event->set &= ~set; + } + else if (timeout == 0) + { + /* no waiting */ + thread->error = -RT_ETIMEOUT; + } + else + { + /* fill thread event info */ + thread->event_set = set; + thread->event_info = option; + + /* put thread to suspended thread list */ + rt_ipc_list_suspend(&(event->parent.suspend_thread), + thread, + event->parent.parent.flag); + + /* if there is a waiting timeout, active thread timer */ + if (timeout > 0) + { + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &timeout); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* do a schedule */ + rt_schedule(); + + if (thread->error != RT_EOK) + { + /* return error */ + return thread->error; + } + + /* received an event, disable interrupt to protect */ + level = rt_hw_interrupt_disable(); + + /* set received event */ + if (recved) + *recved = thread->event_set; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(event->parent.parent))); + + return thread->error; +} +RTM_EXPORT(rt_event_recv); + +/** + * This function can get or set some extra attributions of an event object. + * + * @param event the event object + * @param cmd the execution command + * @param arg the execution argument + * + * @return the error code + */ +rt_err_t rt_event_control(rt_event_t event, int cmd, void *arg) +{ + rt_ubase_t level; + + /* parameter check */ + RT_ASSERT(event != RT_NULL); + RT_ASSERT(rt_object_get_type(&event->parent.parent) == RT_Object_Class_Event); + + if (cmd == RT_IPC_CMD_RESET) + { + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* resume all waiting thread */ + rt_ipc_list_resume_all(&event->parent.suspend_thread); + + /* init event set */ + event->set = 0; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_schedule(); + + return RT_EOK; + } + + return -RT_ERROR; +} +RTM_EXPORT(rt_event_control); +#endif /* end of RT_USING_EVENT */ + +#ifdef RT_USING_MAILBOX +/** + * This function will initialize a mailbox and put it under control of resource + * management. + * + * @param mb the mailbox object + * @param name the name of mailbox + * @param msgpool the begin address of buffer to save received mail + * @param size the size of mailbox + * @param flag the flag of mailbox + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_mb_init(rt_mailbox_t mb, + const char *name, + void *msgpool, + rt_size_t size, + rt_uint8_t flag) +{ + RT_ASSERT(mb != RT_NULL); + + /* init object */ + rt_object_init(&(mb->parent.parent), RT_Object_Class_MailBox, name); + + /* set parent flag */ + mb->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(mb->parent)); + + /* init mailbox */ + mb->msg_pool = msgpool; + mb->size = size; + mb->entry = 0; + mb->in_offset = 0; + mb->out_offset = 0; + + /* init an additional list of sender suspend thread */ + rt_list_init(&(mb->suspend_sender_thread)); + + return RT_EOK; +} +RTM_EXPORT(rt_mb_init); + +/** + * This function will detach a mailbox from resource management + * + * @param mb the mailbox object + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_mb_detach(rt_mailbox_t mb) +{ + /* parameter check */ + RT_ASSERT(mb != RT_NULL); + RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent)); + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&(mb->parent.suspend_thread)); + /* also resume all mailbox private suspended thread */ + rt_ipc_list_resume_all(&(mb->suspend_sender_thread)); + + /* detach mailbox object */ + rt_object_detach(&(mb->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mb_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a mailbox object from system resource + * + * @param name the name of mailbox + * @param size the size of mailbox + * @param flag the flag of mailbox + * + * @return the created mailbox, RT_NULL on error happen + */ +rt_mailbox_t rt_mb_create(const char *name, rt_size_t size, rt_uint8_t flag) +{ + rt_mailbox_t mb; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* allocate object */ + mb = (rt_mailbox_t)rt_object_allocate(RT_Object_Class_MailBox, name); + if (mb == RT_NULL) + return mb; + + /* set parent */ + mb->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(mb->parent)); + + /* init mailbox */ + mb->size = size; + mb->msg_pool = RT_KERNEL_MALLOC(mb->size * sizeof(rt_uint32_t)); + if (mb->msg_pool == RT_NULL) + { + /* delete mailbox object */ + rt_object_delete(&(mb->parent.parent)); + + return RT_NULL; + } + mb->entry = 0; + mb->in_offset = 0; + mb->out_offset = 0; + + /* init an additional list of sender suspend thread */ + rt_list_init(&(mb->suspend_sender_thread)); + + return mb; +} +RTM_EXPORT(rt_mb_create); + +/** + * This function will delete a mailbox object and release the memory + * + * @param mb the mailbox object + * + * @return the error code + */ +rt_err_t rt_mb_delete(rt_mailbox_t mb) +{ + RT_DEBUG_NOT_IN_INTERRUPT; + + /* parameter check */ + RT_ASSERT(mb != RT_NULL); + RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + RT_ASSERT(rt_object_is_systemobject(&mb->parent.parent) == RT_FALSE); + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&(mb->parent.suspend_thread)); + + /* also resume all mailbox private suspended thread */ + rt_ipc_list_resume_all(&(mb->suspend_sender_thread)); + + /* free mailbox pool */ + RT_KERNEL_FREE(mb->msg_pool); + + /* delete mailbox object */ + rt_object_delete(&(mb->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mb_delete); +#endif + +/** + * This function will send a mail to mailbox object. If the mailbox is full, + * current thread will be suspended until timeout. + * + * @param mb the mailbox object + * @param value the mail + * @param timeout the waiting time + * + * @return the error code + */ +rt_err_t rt_mb_send_wait(rt_mailbox_t mb, + rt_uint32_t value, + rt_int32_t timeout) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + rt_uint32_t tick_delta; + + /* parameter check */ + RT_ASSERT(mb != RT_NULL); + RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + + /* initialize delta tick */ + tick_delta = 0; + /* get current thread */ + thread = rt_thread_self(); + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mb->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* for non-blocking call */ + if (mb->entry == mb->size && timeout == 0) + { + rt_hw_interrupt_enable(temp); + + return -RT_EFULL; + } + + /* mailbox is full */ + while (mb->entry == mb->size) + { + /* reset error number in thread */ + thread->error = RT_EOK; + + /* no waiting, return timeout */ + if (timeout == 0) + { + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return -RT_EFULL; + } + + RT_DEBUG_IN_THREAD_CONTEXT; + /* suspend current thread */ + rt_ipc_list_suspend(&(mb->suspend_sender_thread), + thread, + mb->parent.parent.flag); + + /* has waiting time, start thread timer */ + if (timeout > 0) + { + /* get the start tick of timer */ + tick_delta = rt_tick_get(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("mb_send_wait: start timer of thread:%s\n", + thread->name)); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &timeout); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* re-schedule */ + rt_schedule(); + + /* resume from suspend state */ + if (thread->error != RT_EOK) + { + /* return error */ + return thread->error; + } + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* if it's not waiting forever and then re-calculate timeout tick */ + if (timeout > 0) + { + tick_delta = rt_tick_get() - tick_delta; + timeout -= tick_delta; + if (timeout < 0) + timeout = 0; + } + } + + /* set ptr */ + mb->msg_pool[mb->in_offset] = value; + /* increase input offset */ + ++ mb->in_offset; + if (mb->in_offset >= mb->size) + mb->in_offset = 0; + /* increase message entry */ + mb->entry ++; + + /* resume suspended thread */ + if (!rt_list_isempty(&mb->parent.suspend_thread)) + { + rt_ipc_list_resume(&(mb->parent.suspend_thread)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + rt_schedule(); + + return RT_EOK; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return RT_EOK; +} +RTM_EXPORT(rt_mb_send_wait); + +/** + * This function will send a mail to mailbox object, if there are threads + * suspended on mailbox object, it will be waked up. This function will return + * immediately, if you want blocking send, use rt_mb_send_wait instead. + * + * @param mb the mailbox object + * @param value the mail + * + * @return the error code + */ +rt_err_t rt_mb_send(rt_mailbox_t mb, rt_uint32_t value) +{ + return rt_mb_send_wait(mb, value, 0); +} +RTM_EXPORT(rt_mb_send); + +/** + * This function will receive a mail from mailbox object, if there is no mail + * in mailbox object, the thread shall wait for a specified time. + * + * @param mb the mailbox object + * @param value the received mail will be saved in + * @param timeout the waiting time + * + * @return the error code + */ +rt_err_t rt_mb_recv(rt_mailbox_t mb, rt_uint32_t *value, rt_int32_t timeout) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + rt_uint32_t tick_delta; + + /* parameter check */ + RT_ASSERT(mb != RT_NULL); + RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + + /* initialize delta tick */ + tick_delta = 0; + /* get current thread */ + thread = rt_thread_self(); + + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mb->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* for non-blocking call */ + if (mb->entry == 0 && timeout == 0) + { + rt_hw_interrupt_enable(temp); + + return -RT_ETIMEOUT; + } + + /* mailbox is empty */ + while (mb->entry == 0) + { + /* reset error number in thread */ + thread->error = RT_EOK; + + /* no waiting, return timeout */ + if (timeout == 0) + { + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + thread->error = -RT_ETIMEOUT; + + return -RT_ETIMEOUT; + } + + RT_DEBUG_IN_THREAD_CONTEXT; + /* suspend current thread */ + rt_ipc_list_suspend(&(mb->parent.suspend_thread), + thread, + mb->parent.parent.flag); + + /* has waiting time, start thread timer */ + if (timeout > 0) + { + /* get the start tick of timer */ + tick_delta = rt_tick_get(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("mb_recv: start timer of thread:%s\n", + thread->name)); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &timeout); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* re-schedule */ + rt_schedule(); + + /* resume from suspend state */ + if (thread->error != RT_EOK) + { + /* return error */ + return thread->error; + } + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* if it's not waiting forever and then re-calculate timeout tick */ + if (timeout > 0) + { + tick_delta = rt_tick_get() - tick_delta; + timeout -= tick_delta; + if (timeout < 0) + timeout = 0; + } + } + + /* fill ptr */ + *value = mb->msg_pool[mb->out_offset]; + + /* increase output offset */ + ++ mb->out_offset; + if (mb->out_offset >= mb->size) + mb->out_offset = 0; + /* decrease message entry */ + mb->entry --; + + /* resume suspended thread */ + if (!rt_list_isempty(&(mb->suspend_sender_thread))) + { + rt_ipc_list_resume(&(mb->suspend_sender_thread)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mb->parent.parent))); + + rt_schedule(); + + return RT_EOK; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mb->parent.parent))); + + return RT_EOK; +} +RTM_EXPORT(rt_mb_recv); + +/** + * This function can get or set some extra attributions of a mailbox object. + * + * @param mb the mailbox object + * @param cmd the execution command + * @param arg the execution argument + * + * @return the error code + */ +rt_err_t rt_mb_control(rt_mailbox_t mb, int cmd, void *arg) +{ + rt_ubase_t level; + + /* parameter check */ + RT_ASSERT(mb != RT_NULL); + RT_ASSERT(rt_object_get_type(&mb->parent.parent) == RT_Object_Class_MailBox); + + if (cmd == RT_IPC_CMD_RESET) + { + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* resume all waiting thread */ + rt_ipc_list_resume_all(&(mb->parent.suspend_thread)); + /* also resume all mailbox private suspended thread */ + rt_ipc_list_resume_all(&(mb->suspend_sender_thread)); + + /* re-init mailbox */ + mb->entry = 0; + mb->in_offset = 0; + mb->out_offset = 0; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_schedule(); + + return RT_EOK; + } + + return -RT_ERROR; +} +RTM_EXPORT(rt_mb_control); +#endif /* end of RT_USING_MAILBOX */ + +#ifdef RT_USING_MESSAGEQUEUE +struct rt_mq_message +{ + struct rt_mq_message *next; +}; + +/** + * This function will initialize a message queue and put it under control of + * resource management. + * + * @param mq the message object + * @param name the name of message queue + * @param msgpool the beginning address of buffer to save messages + * @param msg_size the maximum size of message + * @param pool_size the size of buffer to save messages + * @param flag the flag of message queue + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_mq_init(rt_mq_t mq, + const char *name, + void *msgpool, + rt_size_t msg_size, + rt_size_t pool_size, + rt_uint8_t flag) +{ + struct rt_mq_message *head; + register rt_base_t temp; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + + /* init object */ + rt_object_init(&(mq->parent.parent), RT_Object_Class_MessageQueue, name); + + /* set parent flag */ + mq->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(mq->parent)); + + /* set messasge pool */ + mq->msg_pool = msgpool; + + /* get correct message size */ + mq->msg_size = RT_ALIGN(msg_size, RT_ALIGN_SIZE); + mq->max_msgs = pool_size / (mq->msg_size + sizeof(struct rt_mq_message)); + + /* init message list */ + mq->msg_queue_head = RT_NULL; + mq->msg_queue_tail = RT_NULL; + + /* init message empty list */ + mq->msg_queue_free = RT_NULL; + for (temp = 0; temp < mq->max_msgs; temp ++) + { + head = (struct rt_mq_message *)((rt_uint8_t *)mq->msg_pool + + temp * (mq->msg_size + sizeof(struct rt_mq_message))); + head->next = mq->msg_queue_free; + mq->msg_queue_free = head; + } + + /* the initial entry is zero */ + mq->entry = 0; + + return RT_EOK; +} +RTM_EXPORT(rt_mq_init); + +/** + * This function will detach a message queue object from resource management + * + * @param mq the message queue object + * + * @return the operation status, RT_EOK on successful + */ +rt_err_t rt_mq_detach(rt_mq_t mq) +{ + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent)); + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&mq->parent.suspend_thread); + + /* detach message queue object */ + rt_object_detach(&(mq->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mq_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a message queue object from system resource + * + * @param name the name of message queue + * @param msg_size the size of message + * @param max_msgs the maximum number of message in queue + * @param flag the flag of message queue + * + * @return the created message queue, RT_NULL on error happen + */ +rt_mq_t rt_mq_create(const char *name, + rt_size_t msg_size, + rt_size_t max_msgs, + rt_uint8_t flag) +{ + struct rt_messagequeue *mq; + struct rt_mq_message *head; + register rt_base_t temp; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* allocate object */ + mq = (rt_mq_t)rt_object_allocate(RT_Object_Class_MessageQueue, name); + if (mq == RT_NULL) + return mq; + + /* set parent */ + mq->parent.parent.flag = flag; + + /* init ipc object */ + rt_ipc_object_init(&(mq->parent)); + + /* init message queue */ + + /* get correct message size */ + mq->msg_size = RT_ALIGN(msg_size, RT_ALIGN_SIZE); + mq->max_msgs = max_msgs; + + /* allocate message pool */ + mq->msg_pool = RT_KERNEL_MALLOC((mq->msg_size + sizeof(struct rt_mq_message)) * mq->max_msgs); + if (mq->msg_pool == RT_NULL) + { + rt_mq_delete(mq); + + return RT_NULL; + } + + /* init message list */ + mq->msg_queue_head = RT_NULL; + mq->msg_queue_tail = RT_NULL; + + /* init message empty list */ + mq->msg_queue_free = RT_NULL; + for (temp = 0; temp < mq->max_msgs; temp ++) + { + head = (struct rt_mq_message *)((rt_uint8_t *)mq->msg_pool + + temp * (mq->msg_size + sizeof(struct rt_mq_message))); + head->next = mq->msg_queue_free; + mq->msg_queue_free = head; + } + + /* the initial entry is zero */ + mq->entry = 0; + + return mq; +} +RTM_EXPORT(rt_mq_create); + +/** + * This function will delete a message queue object and release the memory + * + * @param mq the message queue object + * + * @return the error code + */ +rt_err_t rt_mq_delete(rt_mq_t mq) +{ + RT_DEBUG_NOT_IN_INTERRUPT; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + RT_ASSERT(rt_object_is_systemobject(&mq->parent.parent) == RT_FALSE); + + /* resume all suspended thread */ + rt_ipc_list_resume_all(&(mq->parent.suspend_thread)); + + /* free message queue pool */ + RT_KERNEL_FREE(mq->msg_pool); + + /* delete message queue object */ + rt_object_delete(&(mq->parent.parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mq_delete); +#endif + +/** + * This function will send a message to message queue object, if there are + * threads suspended on message queue object, it will be waked up. + * + * @param mq the message queue object + * @param buffer the message + * @param size the size of buffer + * + * @return the error code + */ +rt_err_t rt_mq_send(rt_mq_t mq, void *buffer, rt_size_t size) +{ + register rt_ubase_t temp; + struct rt_mq_message *msg; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + RT_ASSERT(buffer != RT_NULL); + RT_ASSERT(size != 0); + + /* greater than one message size */ + if (size > mq->msg_size) + return -RT_ERROR; + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mq->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* get a free list, there must be an empty item */ + msg = (struct rt_mq_message *)mq->msg_queue_free; + /* message queue is full */ + if (msg == RT_NULL) + { + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return -RT_EFULL; + } + /* move free list pointer */ + mq->msg_queue_free = msg->next; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* the msg is the new tailer of list, the next shall be NULL */ + msg->next = RT_NULL; + /* copy buffer */ + rt_memcpy(msg + 1, buffer, size); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + /* link msg to message queue */ + if (mq->msg_queue_tail != RT_NULL) + { + /* if the tail exists, */ + ((struct rt_mq_message *)mq->msg_queue_tail)->next = msg; + } + + /* set new tail */ + mq->msg_queue_tail = msg; + /* if the head is empty, set head */ + if (mq->msg_queue_head == RT_NULL) + mq->msg_queue_head = msg; + + /* increase message entry */ + mq->entry ++; + + /* resume suspended thread */ + if (!rt_list_isempty(&mq->parent.suspend_thread)) + { + rt_ipc_list_resume(&(mq->parent.suspend_thread)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + rt_schedule(); + + return RT_EOK; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return RT_EOK; +} +RTM_EXPORT(rt_mq_send); + +/** + * This function will send an urgent message to message queue object, which + * means the message will be inserted to the head of message queue. If there + * are threads suspended on message queue object, it will be waked up. + * + * @param mq the message queue object + * @param buffer the message + * @param size the size of buffer + * + * @return the error code + */ +rt_err_t rt_mq_urgent(rt_mq_t mq, void *buffer, rt_size_t size) +{ + register rt_ubase_t temp; + struct rt_mq_message *msg; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + RT_ASSERT(buffer != RT_NULL); + RT_ASSERT(size != 0); + + /* greater than one message size */ + if (size > mq->msg_size) + return -RT_ERROR; + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(mq->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* get a free list, there must be an empty item */ + msg = (struct rt_mq_message *)mq->msg_queue_free; + /* message queue is full */ + if (msg == RT_NULL) + { + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return -RT_EFULL; + } + /* move free list pointer */ + mq->msg_queue_free = msg->next; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* copy buffer */ + rt_memcpy(msg + 1, buffer, size); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* link msg to the beginning of message queue */ + msg->next = mq->msg_queue_head; + mq->msg_queue_head = msg; + + /* if there is no tail */ + if (mq->msg_queue_tail == RT_NULL) + mq->msg_queue_tail = msg; + + /* increase message entry */ + mq->entry ++; + + /* resume suspended thread */ + if (!rt_list_isempty(&mq->parent.suspend_thread)) + { + rt_ipc_list_resume(&(mq->parent.suspend_thread)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + rt_schedule(); + + return RT_EOK; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + return RT_EOK; +} +RTM_EXPORT(rt_mq_urgent); + +/** + * This function will receive a message from message queue object, if there is + * no message in message queue object, the thread shall wait for a specified + * time. + * + * @param mq the message queue object + * @param buffer the received message will be saved in + * @param size the size of buffer + * @param timeout the waiting time + * + * @return the error code + */ +rt_err_t rt_mq_recv(rt_mq_t mq, + void *buffer, + rt_size_t size, + rt_int32_t timeout) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + struct rt_mq_message *msg; + rt_uint32_t tick_delta; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + RT_ASSERT(buffer != RT_NULL); + RT_ASSERT(size != 0); + + /* initialize delta tick */ + tick_delta = 0; + /* get current thread */ + thread = rt_thread_self(); + RT_OBJECT_HOOK_CALL(rt_object_trytake_hook, (&(mq->parent.parent))); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* for non-blocking call */ + if (mq->entry == 0 && timeout == 0) + { + rt_hw_interrupt_enable(temp); + + return -RT_ETIMEOUT; + } + + /* message queue is empty */ + while (mq->entry == 0) + { + RT_DEBUG_IN_THREAD_CONTEXT; + + /* reset error number in thread */ + thread->error = RT_EOK; + + /* no waiting, return timeout */ + if (timeout == 0) + { + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + thread->error = -RT_ETIMEOUT; + + return -RT_ETIMEOUT; + } + + /* suspend current thread */ + rt_ipc_list_suspend(&(mq->parent.suspend_thread), + thread, + mq->parent.parent.flag); + + /* has waiting time, start thread timer */ + if (timeout > 0) + { + /* get the start tick of timer */ + tick_delta = rt_tick_get(); + + RT_DEBUG_LOG(RT_DEBUG_IPC, ("set thread:%s to timer list\n", + thread->name)); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &timeout); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* re-schedule */ + rt_schedule(); + + /* recv message */ + if (thread->error != RT_EOK) + { + /* return error */ + return thread->error; + } + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* if it's not waiting forever and then re-calculate timeout tick */ + if (timeout > 0) + { + tick_delta = rt_tick_get() - tick_delta; + timeout -= tick_delta; + if (timeout < 0) + timeout = 0; + } + } + + /* get message from queue */ + msg = (struct rt_mq_message *)mq->msg_queue_head; + + /* move message queue head */ + mq->msg_queue_head = msg->next; + /* reach queue tail, set to NULL */ + if (mq->msg_queue_tail == msg) + mq->msg_queue_tail = RT_NULL; + + /* decrease message entry */ + mq->entry --; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* copy message */ + rt_memcpy(buffer, msg + 1, size > mq->msg_size ? mq->msg_size : size); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + /* put message to free list */ + msg->next = (struct rt_mq_message *)mq->msg_queue_free; + mq->msg_queue_free = msg; + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(mq->parent.parent))); + + return RT_EOK; +} +RTM_EXPORT(rt_mq_recv); + +/** + * This function can get or set some extra attributions of a message queue + * object. + * + * @param mq the message queue object + * @param cmd the execution command + * @param arg the execution argument + * + * @return the error code + */ +rt_err_t rt_mq_control(rt_mq_t mq, int cmd, void *arg) +{ + rt_ubase_t level; + struct rt_mq_message *msg; + + /* parameter check */ + RT_ASSERT(mq != RT_NULL); + RT_ASSERT(rt_object_get_type(&mq->parent.parent) == RT_Object_Class_MessageQueue); + + if (cmd == RT_IPC_CMD_RESET) + { + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* resume all waiting thread */ + rt_ipc_list_resume_all(&mq->parent.suspend_thread); + + /* release all message in the queue */ + while (mq->msg_queue_head != RT_NULL) + { + /* get message from queue */ + msg = (struct rt_mq_message *)mq->msg_queue_head; + + /* move message queue head */ + mq->msg_queue_head = msg->next; + /* reach queue tail, set to NULL */ + if (mq->msg_queue_tail == msg) + mq->msg_queue_tail = RT_NULL; + + /* put message to free list */ + msg->next = (struct rt_mq_message *)mq->msg_queue_free; + mq->msg_queue_free = msg; + } + + /* clean entry */ + mq->entry = 0; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_schedule(); + + return RT_EOK; + } + + return -RT_ERROR; +} +RTM_EXPORT(rt_mq_control); +#endif /* end of RT_USING_MESSAGEQUEUE */ + +/**@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/irq.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/irq.c new file mode 100644 index 0000000000..72d220bd92 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/irq.c @@ -0,0 +1,113 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-02-24 Bernard first version + * 2006-05-03 Bernard add IRQ_DEBUG + * 2016-08-09 ArdaFu add interrupt enter and leave hook. + */ + +#include +#include + +#ifdef RT_USING_HOOK + +static void (*rt_interrupt_enter_hook)(void); +static void (*rt_interrupt_leave_hook)(void); + +/** + * @ingroup Hook + * This function set a hook function when the system enter a interrupt + * + * @note the hook function must be simple and never be blocked or suspend. + */ +void rt_interrupt_enter_sethook(void (*hook)(void)) +{ + rt_interrupt_enter_hook = hook; +} +/** + * @ingroup Hook + * This function set a hook function when the system exit a interrupt. + * + * @note the hook function must be simple and never be blocked or suspend. + */ +void rt_interrupt_leave_sethook(void (*hook)(void)) +{ + rt_interrupt_leave_hook = hook; +} +#endif + +/* #define IRQ_DEBUG */ + +/** + * @addtogroup Kernel + */ + +/**@{*/ + +volatile rt_uint8_t rt_interrupt_nest; + +/** + * This function will be invoked by BSP, when enter interrupt service routine + * + * @note please don't invoke this routine in application + * + * @see rt_interrupt_leave + */ +void rt_interrupt_enter(void) +{ + rt_base_t level; + + RT_DEBUG_LOG(RT_DEBUG_IRQ, ("irq coming..., irq nest:%d\n", + rt_interrupt_nest)); + + level = rt_hw_interrupt_disable(); + rt_interrupt_nest ++; + RT_OBJECT_HOOK_CALL(rt_interrupt_enter_hook,()); + rt_hw_interrupt_enable(level); +} +RTM_EXPORT(rt_interrupt_enter); + +/** + * This function will be invoked by BSP, when leave interrupt service routine + * + * @note please don't invoke this routine in application + * + * @see rt_interrupt_enter + */ +void rt_interrupt_leave(void) +{ + rt_base_t level; + + RT_DEBUG_LOG(RT_DEBUG_IRQ, ("irq leave, irq nest:%d\n", + rt_interrupt_nest)); + + level = rt_hw_interrupt_disable(); + rt_interrupt_nest --; + RT_OBJECT_HOOK_CALL(rt_interrupt_leave_hook,()); + rt_hw_interrupt_enable(level); +} +RTM_EXPORT(rt_interrupt_leave); + +/** + * This function will return the nest of interrupt. + * + * User application can invoke this function to get whether current + * context is interrupt context. + * + * @return the number of nested interrupts. + */ +rt_uint8_t rt_interrupt_get_nest(void) +{ + return rt_interrupt_nest; +} +RTM_EXPORT(rt_interrupt_get_nest); + +RTM_EXPORT(rt_hw_interrupt_disable); +RTM_EXPORT(rt_hw_interrupt_enable); + +/**@}*/ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/kservice.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/kservice.c new file mode 100644 index 0000000000..1d3dace340 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/kservice.c @@ -0,0 +1,1397 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-16 Bernard the first version + * 2006-05-25 Bernard rewrite vsprintf + * 2006-08-10 Bernard add rt_show_version + * 2010-03-17 Bernard remove rt_strlcpy function + * fix gcc compiling issue. + * 2010-04-15 Bernard remove weak definition on ICCM16C compiler + * 2012-07-18 Arda add the alignment display for signed integer + * 2012-11-23 Bernard fix IAR compiler error. + * 2012-12-22 Bernard fix rt_kprintf issue, which found by Grissiom. + * 2013-06-24 Bernard remove rt_kprintf if RT_USING_CONSOLE is not defined. + * 2013-09-24 aozima make sure the device is in STREAM mode when used by rt_kprintf. + * 2015-07-06 Bernard Add rt_assert_handler routine. + */ + +#include +#include + +#ifdef RT_USING_MODULE +#include +#endif + +/* use precision */ +#define RT_PRINTF_PRECISION + +/** + * @addtogroup KernelService + */ + +/**@{*/ + +/* global errno in RT-Thread */ +static volatile int __rt_errno; + +#if defined(RT_USING_DEVICE) && defined(RT_USING_CONSOLE) +static rt_device_t _console_device = RT_NULL; +#endif + +/* + * This function will get errno + * + * @return errno + */ +rt_err_t rt_get_errno(void) +{ + rt_thread_t tid; + + if (rt_interrupt_get_nest() != 0) + { + /* it's in interrupt context */ + return __rt_errno; + } + + tid = rt_thread_self(); + if (tid == RT_NULL) + return __rt_errno; + + return tid->error; +} +RTM_EXPORT(rt_get_errno); + +/* + * This function will set errno + * + * @param error the errno shall be set + */ +void rt_set_errno(rt_err_t error) +{ + rt_thread_t tid; + + if (rt_interrupt_get_nest() != 0) + { + /* it's in interrupt context */ + __rt_errno = error; + + return; + } + + tid = rt_thread_self(); + if (tid == RT_NULL) + { + __rt_errno = error; + + return; + } + + tid->error = error; +} +RTM_EXPORT(rt_set_errno); + +/** + * This function returns errno. + * + * @return the errno in the system + */ +int *_rt_errno(void) +{ + rt_thread_t tid; + + if (rt_interrupt_get_nest() != 0) + return (int *)&__rt_errno; + + tid = rt_thread_self(); + if (tid != RT_NULL) + return (int *) & (tid->error); + + return (int *)&__rt_errno; +} +RTM_EXPORT(_rt_errno); + +/** + * This function will set the content of memory to specified value + * + * @param s the address of source memory + * @param c the value shall be set in content + * @param count the copied length + * + * @return the address of source memory + */ +void *rt_memset(void *s, int c, rt_ubase_t count) +{ +#ifdef RT_USING_TINY_SIZE + char *xs = (char *)s; + + while (count--) + *xs++ = c; + + return s; +#else +#define LBLOCKSIZE (sizeof(long)) +#define UNALIGNED(X) ((long)X & (LBLOCKSIZE - 1)) +#define TOO_SMALL(LEN) ((LEN) < LBLOCKSIZE) + + unsigned int i; + char *m = (char *)s; + unsigned long buffer; + unsigned long *aligned_addr; + unsigned int d = c & 0xff; /* To avoid sign extension, copy C to an + unsigned variable. */ + + if (!TOO_SMALL(count) && !UNALIGNED(s)) + { + /* If we get this far, we know that n is large and m is word-aligned. */ + aligned_addr = (unsigned long *)s; + + /* Store D into each char sized location in BUFFER so that + * we can set large blocks quickly. + */ + if (LBLOCKSIZE == 4) + { + buffer = (d << 8) | d; + buffer |= (buffer << 16); + } + else + { + buffer = 0; + for (i = 0; i < LBLOCKSIZE; i ++) + buffer = (buffer << 8) | d; + } + + while (count >= LBLOCKSIZE * 4) + { + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + *aligned_addr++ = buffer; + count -= 4 * LBLOCKSIZE; + } + + while (count >= LBLOCKSIZE) + { + *aligned_addr++ = buffer; + count -= LBLOCKSIZE; + } + + /* Pick up the remainder with a bytewise loop. */ + m = (char *)aligned_addr; + } + + while (count--) + { + *m++ = (char)d; + } + + return s; + +#undef LBLOCKSIZE +#undef UNALIGNED +#undef TOO_SMALL +#endif +} +RTM_EXPORT(rt_memset); + +/** + * This function will copy memory content from source address to destination + * address. + * + * @param dst the address of destination memory + * @param src the address of source memory + * @param count the copied length + * + * @return the address of destination memory + */ +void *rt_memcpy(void *dst, const void *src, rt_ubase_t count) +{ +#ifdef RT_USING_TINY_SIZE + char *tmp = (char *)dst, *s = (char *)src; + rt_ubase_t len; + + if (tmp <= s || tmp > (s + count)) + { + while (count--) + *tmp ++ = *s ++; + } + else + { + for (len = count; len > 0; len --) + tmp[len - 1] = s[len - 1]; + } + + return dst; +#else + +#define UNALIGNED(X, Y) \ + (((long)X & (sizeof (long) - 1)) | ((long)Y & (sizeof (long) - 1))) +#define BIGBLOCKSIZE (sizeof (long) << 2) +#define LITTLEBLOCKSIZE (sizeof (long)) +#define TOO_SMALL(LEN) ((LEN) < BIGBLOCKSIZE) + + char *dst_ptr = (char *)dst; + char *src_ptr = (char *)src; + long *aligned_dst; + long *aligned_src; + int len = count; + + /* If the size is small, or either SRC or DST is unaligned, + then punt into the byte copy loop. This should be rare. */ + if (!TOO_SMALL(len) && !UNALIGNED(src_ptr, dst_ptr)) + { + aligned_dst = (long *)dst_ptr; + aligned_src = (long *)src_ptr; + + /* Copy 4X long words at a time if possible. */ + while (len >= BIGBLOCKSIZE) + { + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + *aligned_dst++ = *aligned_src++; + len -= BIGBLOCKSIZE; + } + + /* Copy one long word at a time if possible. */ + while (len >= LITTLEBLOCKSIZE) + { + *aligned_dst++ = *aligned_src++; + len -= LITTLEBLOCKSIZE; + } + + /* Pick up any residual with a byte copier. */ + dst_ptr = (char *)aligned_dst; + src_ptr = (char *)aligned_src; + } + + while (len--) + *dst_ptr++ = *src_ptr++; + + return dst; +#undef UNALIGNED +#undef BIGBLOCKSIZE +#undef LITTLEBLOCKSIZE +#undef TOO_SMALL +#endif +} +RTM_EXPORT(rt_memcpy); + +/** + * This function will move memory content from source address to destination + * address. + * + * @param dest the address of destination memory + * @param src the address of source memory + * @param n the copied length + * + * @return the address of destination memory + */ +void *rt_memmove(void *dest, const void *src, rt_ubase_t n) +{ + char *tmp = (char *)dest, *s = (char *)src; + + if (s < tmp && tmp < s + n) + { + tmp += n; + s += n; + + while (n--) + *(--tmp) = *(--s); + } + else + { + while (n--) + *tmp++ = *s++; + } + + return dest; +} +RTM_EXPORT(rt_memmove); + +/** + * This function will compare two areas of memory + * + * @param cs one area of memory + * @param ct znother area of memory + * @param count the size of the area + * + * @return the result + */ +rt_int32_t rt_memcmp(const void *cs, const void *ct, rt_ubase_t count) +{ + const unsigned char *su1, *su2; + int res = 0; + + for (su1 = cs, su2 = ct; 0 < count; ++su1, ++su2, count--) + if ((res = *su1 - *su2) != 0) + break; + + return res; +} +RTM_EXPORT(rt_memcmp); + +/** + * This function will return the first occurrence of a string. + * + * @param s1 the source string + * @param s2 the find string + * + * @return the first occurrence of a s2 in s1, or RT_NULL if no found. + */ +char *rt_strstr(const char *s1, const char *s2) +{ + int l1, l2; + + l2 = rt_strlen(s2); + if (!l2) + return (char *)s1; + l1 = rt_strlen(s1); + while (l1 >= l2) + { + l1 --; + if (!rt_memcmp(s1, s2, l2)) + return (char *)s1; + s1 ++; + } + + return RT_NULL; +} +RTM_EXPORT(rt_strstr); + +/** + * This function will compare two strings while ignoring differences in case + * + * @param a the string to be compared + * @param b the string to be compared + * + * @return the result + */ +rt_uint32_t rt_strcasecmp(const char *a, const char *b) +{ + int ca, cb; + + do + { + ca = *a++ & 0xff; + cb = *b++ & 0xff; + if (ca >= 'A' && ca <= 'Z') + ca += 'a' - 'A'; + if (cb >= 'A' && cb <= 'Z') + cb += 'a' - 'A'; + } + while (ca == cb && ca != '\0'); + + return ca - cb; +} +RTM_EXPORT(rt_strcasecmp); + +/** + * This function will copy string no more than n bytes. + * + * @param dst the string to copy + * @param src the string to be copied + * @param n the maximum copied length + * + * @return the result + */ +char *rt_strncpy(char *dst, const char *src, rt_ubase_t n) +{ + if (n != 0) + { + char *d = dst; + const char *s = src; + + do + { + if ((*d++ = *s++) == 0) + { + /* NUL pad the remaining n-1 bytes */ + while (--n != 0) + *d++ = 0; + break; + } + } while (--n != 0); + } + + return (dst); +} +RTM_EXPORT(rt_strncpy); + +/** + * This function will compare two strings with specified maximum length + * + * @param cs the string to be compared + * @param ct the string to be compared + * @param count the maximum compare length + * + * @return the result + */ +rt_int32_t rt_strncmp(const char *cs, const char *ct, rt_ubase_t count) +{ + register signed char __res = 0; + + while (count) + { + if ((__res = *cs - *ct++) != 0 || !*cs++) + break; + count --; + } + + return __res; +} +RTM_EXPORT(rt_strncmp); + +/** + * This function will compare two strings without specified length + * + * @param cs the string to be compared + * @param ct the string to be compared + * + * @return the result + */ +rt_int32_t rt_strcmp(const char *cs, const char *ct) +{ + while (*cs && *cs == *ct) + cs++, ct++; + + return (*cs - *ct); +} +RTM_EXPORT(rt_strcmp); + +/** + * The strnlen() function returns the number of characters in the + * string pointed to by s, excluding the terminating null byte ('\0'), + * but at most maxlen. In doing this, strnlen() looks only at the + * first maxlen characters in the string pointed to by s and never + * beyond s+maxlen. + * + * @param s the string + * @param maxlen the max size + * @return the length of string + */ +rt_size_t rt_strnlen(const char *s, rt_ubase_t maxlen) +{ + const char *sc; + + for (sc = s; *sc != '\0' && (rt_ubase_t)(sc - s) < maxlen; ++sc) /* nothing */ + ; + + return sc - s; +} +RTM_EXPORT(rt_strnlen); + +/** + * This function will return the length of a string, which terminate will + * null character. + * + * @param s the string + * + * @return the length of string + */ +rt_size_t rt_strlen(const char *s) +{ + const char *sc; + + for (sc = s; *sc != '\0'; ++sc) /* nothing */ + ; + + return sc - s; +} +RTM_EXPORT(rt_strlen); + +#ifdef RT_USING_HEAP +/** + * This function will duplicate a string. + * + * @param s the string to be duplicated + * + * @return the duplicated string pointer + */ +char *rt_strdup(const char *s) +{ + rt_size_t len = rt_strlen(s) + 1; + char *tmp = (char *)rt_malloc(len); + + if (!tmp) + return RT_NULL; + + rt_memcpy(tmp, s, len); + + return tmp; +} +RTM_EXPORT(rt_strdup); +#if defined(__CC_ARM) || defined(__CLANG_ARM) +char *strdup(const char *s) __attribute__((alias("rt_strdup"))); +#endif +#endif + +/** + * This function will show the version of rt-thread rtos + */ +void rt_show_version(void) +{ + rt_kprintf("\n \\ | /\n"); + rt_kprintf("- RT - Thread Operating System\n"); + rt_kprintf(" / | \\ %d.%d.%d build %s\n", + RT_VERSION, RT_SUBVERSION, RT_REVISION, __DATE__); + rt_kprintf(" 2006 - 2019 Copyright by rt-thread team\n"); +} +RTM_EXPORT(rt_show_version); + +/* private function */ +#define isdigit(c) ((unsigned)((c) - '0') < 10) + +#ifdef RT_PRINTF_LONGLONG +rt_inline int divide(long long *n, int base) +{ + int res; + + /* optimized for processor which does not support divide instructions. */ + if (base == 10) + { + res = (int)(((unsigned long long)*n) % 10U); + *n = (long long)(((unsigned long long)*n) / 10U); + } + else + { + res = (int)(((unsigned long long)*n) % 16U); + *n = (long long)(((unsigned long long)*n) / 16U); + } + + return res; +} +#else +rt_inline int divide(long *n, int base) +{ + int res; + + /* optimized for processor which does not support divide instructions. */ + if (base == 10) + { + res = (int)(((unsigned long)*n) % 10U); + *n = (long)(((unsigned long)*n) / 10U); + } + else + { + res = (int)(((unsigned long)*n) % 16U); + *n = (long)(((unsigned long)*n) / 16U); + } + + return res; +} +#endif + +rt_inline int skip_atoi(const char **s) +{ + register int i = 0; + while (isdigit(**s)) + i = i * 10 + *((*s)++) - '0'; + + return i; +} + +#define ZEROPAD (1 << 0) /* pad with zero */ +#define SIGN (1 << 1) /* unsigned/signed long */ +#define PLUS (1 << 2) /* show plus */ +#define SPACE (1 << 3) /* space if plus */ +#define LEFT (1 << 4) /* left justified */ +#define SPECIAL (1 << 5) /* 0x */ +#define LARGE (1 << 6) /* use 'ABCDEF' instead of 'abcdef' */ + +#ifdef RT_PRINTF_PRECISION +static char *print_number(char *buf, + char *end, +#ifdef RT_PRINTF_LONGLONG + long long num, +#else + long num, +#endif + int base, + int s, + int precision, + int type) +#else +static char *print_number(char *buf, + char *end, +#ifdef RT_PRINTF_LONGLONG + long long num, +#else + long num, +#endif + int base, + int s, + int type) +#endif +{ + char c, sign; +#ifdef RT_PRINTF_LONGLONG + char tmp[32]; +#else + char tmp[16]; +#endif + int precision_bak = precision; + const char *digits; + static const char small_digits[] = "0123456789abcdef"; + static const char large_digits[] = "0123456789ABCDEF"; + register int i; + register int size; + + size = s; + + digits = (type & LARGE) ? large_digits : small_digits; + if (type & LEFT) + type &= ~ZEROPAD; + + c = (type & ZEROPAD) ? '0' : ' '; + + /* get sign */ + sign = 0; + if (type & SIGN) + { + if (num < 0) + { + sign = '-'; + num = -num; + } + else if (type & PLUS) + sign = '+'; + else if (type & SPACE) + sign = ' '; + } + +#ifdef RT_PRINTF_SPECIAL + if (type & SPECIAL) + { + if (base == 16) + size -= 2; + else if (base == 8) + size--; + } +#endif + + i = 0; + if (num == 0) + tmp[i++] = '0'; + else + { + while (num != 0) + tmp[i++] = digits[divide(&num, base)]; + } + +#ifdef RT_PRINTF_PRECISION + if (i > precision) + precision = i; + size -= precision; +#else + size -= i; +#endif + + if (!(type & (ZEROPAD | LEFT))) + { + if ((sign) && (size > 0)) + size--; + + while (size-- > 0) + { + if (buf < end) + *buf = ' '; + ++ buf; + } + } + + if (sign) + { + if (buf < end) + { + *buf = sign; + } + -- size; + ++ buf; + } + +#ifdef RT_PRINTF_SPECIAL + if (type & SPECIAL) + { + if (base == 8) + { + if (buf < end) + *buf = '0'; + ++ buf; + } + else if (base == 16) + { + if (buf < end) + *buf = '0'; + ++ buf; + if (buf < end) + { + *buf = type & LARGE ? 'X' : 'x'; + } + ++ buf; + } + } +#endif + + /* no align to the left */ + if (!(type & LEFT)) + { + while (size-- > 0) + { + if (buf < end) + *buf = c; + ++ buf; + } + } + +#ifdef RT_PRINTF_PRECISION + while (i < precision--) + { + if (buf < end) + *buf = '0'; + ++ buf; + } +#endif + + /* put number in the temporary buffer */ + while (i-- > 0 && (precision_bak != 0)) + { + if (buf < end) + *buf = tmp[i]; + ++ buf; + } + + while (size-- > 0) + { + if (buf < end) + *buf = ' '; + ++ buf; + } + + return buf; +} + +rt_int32_t rt_vsnprintf(char *buf, + rt_size_t size, + const char *fmt, + va_list args) +{ +#ifdef RT_PRINTF_LONGLONG + unsigned long long num; +#else + rt_uint32_t num; +#endif + int i, len; + char *str, *end, c; + const char *s; + + rt_uint8_t base; /* the base of number */ + rt_uint8_t flags; /* flags to print number */ + rt_uint8_t qualifier; /* 'h', 'l', or 'L' for integer fields */ + rt_int32_t field_width; /* width of output field */ + +#ifdef RT_PRINTF_PRECISION + int precision; /* min. # of digits for integers and max for a string */ +#endif + + str = buf; + end = buf + size; + + /* Make sure end is always >= buf */ + if (end < buf) + { + end = ((char *) - 1); + size = end - buf; + } + + for (; *fmt ; ++fmt) + { + if (*fmt != '%') + { + if (str < end) + *str = *fmt; + ++ str; + continue; + } + + /* process flags */ + flags = 0; + + while (1) + { + /* skips the first '%' also */ + ++ fmt; + if (*fmt == '-') flags |= LEFT; + else if (*fmt == '+') flags |= PLUS; + else if (*fmt == ' ') flags |= SPACE; + else if (*fmt == '#') flags |= SPECIAL; + else if (*fmt == '0') flags |= ZEROPAD; + else break; + } + + /* get field width */ + field_width = -1; + if (isdigit(*fmt)) field_width = skip_atoi(&fmt); + else if (*fmt == '*') + { + ++ fmt; + /* it's the next argument */ + field_width = va_arg(args, int); + if (field_width < 0) + { + field_width = -field_width; + flags |= LEFT; + } + } + +#ifdef RT_PRINTF_PRECISION + /* get the precision */ + precision = -1; + if (*fmt == '.') + { + ++ fmt; + if (isdigit(*fmt)) precision = skip_atoi(&fmt); + else if (*fmt == '*') + { + ++ fmt; + /* it's the next argument */ + precision = va_arg(args, int); + } + if (precision < 0) precision = 0; + } +#endif + /* get the conversion qualifier */ + qualifier = 0; +#ifdef RT_PRINTF_LONGLONG + if (*fmt == 'h' || *fmt == 'l' || *fmt == 'L') +#else + if (*fmt == 'h' || *fmt == 'l') +#endif + { + qualifier = *fmt; + ++ fmt; +#ifdef RT_PRINTF_LONGLONG + if (qualifier == 'l' && *fmt == 'l') + { + qualifier = 'L'; + ++ fmt; + } +#endif + } + + /* the default base */ + base = 10; + + switch (*fmt) + { + case 'c': + if (!(flags & LEFT)) + { + while (--field_width > 0) + { + if (str < end) *str = ' '; + ++ str; + } + } + + /* get character */ + c = (rt_uint8_t)va_arg(args, int); + if (str < end) *str = c; + ++ str; + + /* put width */ + while (--field_width > 0) + { + if (str < end) *str = ' '; + ++ str; + } + continue; + + case 's': + s = va_arg(args, char *); + if (!s) s = "(NULL)"; + + len = rt_strlen(s); +#ifdef RT_PRINTF_PRECISION + if (precision > 0 && len > precision) len = precision; +#endif + + if (!(flags & LEFT)) + { + while (len < field_width--) + { + if (str < end) *str = ' '; + ++ str; + } + } + + for (i = 0; i < len; ++i) + { + if (str < end) *str = *s; + ++ str; + ++ s; + } + + while (len < field_width--) + { + if (str < end) *str = ' '; + ++ str; + } + continue; + + case 'p': + if (field_width == -1) + { + field_width = sizeof(void *) << 1; + flags |= ZEROPAD; + } +#ifdef RT_PRINTF_PRECISION + str = print_number(str, end, + (long)va_arg(args, void *), + 16, field_width, precision, flags); +#else + str = print_number(str, end, + (long)va_arg(args, void *), + 16, field_width, flags); +#endif + continue; + + case '%': + if (str < end) *str = '%'; + ++ str; + continue; + + /* integer number formats - set up the flags and "break" */ + case 'o': + base = 8; + break; + + case 'X': + flags |= LARGE; + case 'x': + base = 16; + break; + + case 'd': + case 'i': + flags |= SIGN; + case 'u': + break; + + default: + if (str < end) *str = '%'; + ++ str; + + if (*fmt) + { + if (str < end) *str = *fmt; + ++ str; + } + else + { + -- fmt; + } + continue; + } + +#ifdef RT_PRINTF_LONGLONG + if (qualifier == 'L') num = va_arg(args, long long); + else if (qualifier == 'l') +#else + if (qualifier == 'l') +#endif + { + num = va_arg(args, rt_uint32_t); + if (flags & SIGN) num = (rt_int32_t)num; + } + else if (qualifier == 'h') + { + num = (rt_uint16_t)va_arg(args, rt_int32_t); + if (flags & SIGN) num = (rt_int16_t)num; + } + else + { + num = va_arg(args, rt_uint32_t); + if (flags & SIGN) num = (rt_int32_t)num; + } +#ifdef RT_PRINTF_PRECISION + str = print_number(str, end, num, base, field_width, precision, flags); +#else + str = print_number(str, end, num, base, field_width, flags); +#endif + } + + if (size > 0) + { + if (str < end) *str = '\0'; + else + { + end[-1] = '\0'; + } + } + + /* the trailing null byte doesn't count towards the total + * ++str; + */ + return str - buf; +} +RTM_EXPORT(rt_vsnprintf); + +/** + * This function will fill a formatted string to buffer + * + * @param buf the buffer to save formatted string + * @param size the size of buffer + * @param fmt the format + */ +rt_int32_t rt_snprintf(char *buf, rt_size_t size, const char *fmt, ...) +{ + rt_int32_t n; + va_list args; + + va_start(args, fmt); + n = rt_vsnprintf(buf, size, fmt, args); + va_end(args); + + return n; +} +RTM_EXPORT(rt_snprintf); + +/** + * This function will fill a formatted string to buffer + * + * @param buf the buffer to save formatted string + * @param arg_ptr the arg_ptr + * @param format the format + */ +rt_int32_t rt_vsprintf(char *buf, const char *format, va_list arg_ptr) +{ + return rt_vsnprintf(buf, (rt_size_t) - 1, format, arg_ptr); +} +RTM_EXPORT(rt_vsprintf); + +/** + * This function will fill a formatted string to buffer + * + * @param buf the buffer to save formatted string + * @param format the format + */ +rt_int32_t rt_sprintf(char *buf, const char *format, ...) +{ + rt_int32_t n; + va_list arg_ptr; + + va_start(arg_ptr, format); + n = rt_vsprintf(buf, format, arg_ptr); + va_end(arg_ptr); + + return n; +} +RTM_EXPORT(rt_sprintf); + +#ifdef RT_USING_CONSOLE + +#ifdef RT_USING_DEVICE +/** + * This function returns the device using in console. + * + * @return the device using in console or RT_NULL + */ +rt_device_t rt_console_get_device(void) +{ + return _console_device; +} +RTM_EXPORT(rt_console_get_device); + +/** + * This function will set a device as console device. + * After set a device to console, all output of rt_kprintf will be + * redirected to this new device. + * + * @param name the name of new console device + * + * @return the old console device handler + */ +rt_device_t rt_console_set_device(const char *name) +{ + rt_device_t new, old; + + /* save old device */ + old = _console_device; + + /* find new console device */ + new = rt_device_find(name); + if (new != RT_NULL) + { + if (_console_device != RT_NULL) + { + /* close old console device */ + rt_device_close(_console_device); + } + + /* set new console device */ + rt_device_open(new, RT_DEVICE_OFLAG_RDWR | RT_DEVICE_FLAG_STREAM); + _console_device = new; + } + + return old; +} +RTM_EXPORT(rt_console_set_device); +#endif + +RT_WEAK void rt_hw_console_output(const char *str) +{ + /* empty console output */ +} +RTM_EXPORT(rt_hw_console_output); + +/** + * This function will put string to the console. + * + * @param str the string output to the console. + */ +void rt_kputs(const char *str) +{ + if (!str) return; + +#ifdef RT_USING_DEVICE + if (_console_device == RT_NULL) + { + rt_hw_console_output(str); + } + else + { + rt_uint16_t old_flag = _console_device->open_flag; + + _console_device->open_flag |= RT_DEVICE_FLAG_STREAM; + rt_device_write(_console_device, 0, str, rt_strlen(str)); + _console_device->open_flag = old_flag; + } +#else + rt_hw_console_output(str); +#endif +} + +/** + * This function will print a formatted string on system console + * + * @param fmt the format + */ +void rt_kprintf(const char *fmt, ...) +{ + va_list args; + rt_size_t length; + static char rt_log_buf[RT_CONSOLEBUF_SIZE]; + + va_start(args, fmt); + /* the return value of vsnprintf is the number of bytes that would be + * written to buffer had if the size of the buffer been sufficiently + * large excluding the terminating null byte. If the output string + * would be larger than the rt_log_buf, we have to adjust the output + * length. */ + length = rt_vsnprintf(rt_log_buf, sizeof(rt_log_buf) - 1, fmt, args); + if (length > RT_CONSOLEBUF_SIZE - 1) + length = RT_CONSOLEBUF_SIZE - 1; +#ifdef RT_USING_DEVICE + if (_console_device == RT_NULL) + { + rt_hw_console_output(rt_log_buf); + } + else + { + rt_uint16_t old_flag = _console_device->open_flag; + + _console_device->open_flag |= RT_DEVICE_FLAG_STREAM; + rt_device_write(_console_device, 0, rt_log_buf, length); + _console_device->open_flag = old_flag; + } +#else + rt_hw_console_output(rt_log_buf); +#endif + va_end(args); +} +RTM_EXPORT(rt_kprintf); +#endif + +#ifdef RT_USING_HEAP +/** + * This function allocates a memory block, which address is aligned to the + * specified alignment size. + * + * @param size the allocated memory block size + * @param align the alignment size + * + * @return the allocated memory block on successful, otherwise returns RT_NULL + */ +void *rt_malloc_align(rt_size_t size, rt_size_t align) +{ + void *align_ptr; + void *ptr; + rt_size_t align_size; + + /* align the alignment size to 4 byte */ + align = ((align + 0x03) & ~0x03); + + /* get total aligned size */ + align_size = ((size + 0x03) & ~0x03) + align; + /* allocate memory block from heap */ + ptr = rt_malloc(align_size); + if (ptr != RT_NULL) + { + /* the allocated memory block is aligned */ + if (((rt_uint32_t)ptr & (align - 1)) == 0) + { + align_ptr = (void *)((rt_uint32_t)ptr + align); + } + else + { + align_ptr = (void *)(((rt_uint32_t)ptr + (align - 1)) & ~(align - 1)); + } + + /* set the pointer before alignment pointer to the real pointer */ + *((rt_uint32_t *)((rt_uint32_t)align_ptr - sizeof(void *))) = (rt_uint32_t)ptr; + + ptr = align_ptr; + } + + return ptr; +} +RTM_EXPORT(rt_malloc_align); + +/** + * This function release the memory block, which is allocated by + * rt_malloc_align function and address is aligned. + * + * @param ptr the memory block pointer + */ +void rt_free_align(void *ptr) +{ + void *real_ptr; + + real_ptr = (void *) * (rt_uint32_t *)((rt_uint32_t)ptr - sizeof(void *)); + rt_free(real_ptr); +} +RTM_EXPORT(rt_free_align); +#endif + +#ifndef RT_USING_CPU_FFS +const rt_uint8_t __lowest_bit_bitmap[] = +{ + /* 00 */ 0, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 10 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 20 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 30 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 40 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 50 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 60 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 70 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 80 */ 7, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* 90 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* A0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* B0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* C0 */ 6, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* D0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* E0 */ 5, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0, + /* F0 */ 4, 0, 1, 0, 2, 0, 1, 0, 3, 0, 1, 0, 2, 0, 1, 0 +}; + +/** + * This function finds the first bit set (beginning with the least significant bit) + * in value and return the index of that bit. + * + * Bits are numbered starting at 1 (the least significant bit). A return value of + * zero from any of these functions means that the argument was zero. + * + * @return return the index of the first bit set. If value is 0, then this function + * shall return 0. + */ +int __rt_ffs(int value) +{ + if (value == 0) return 0; + + if (value & 0xff) + return __lowest_bit_bitmap[value & 0xff] + 1; + + if (value & 0xff00) + return __lowest_bit_bitmap[(value & 0xff00) >> 8] + 9; + + if (value & 0xff0000) + return __lowest_bit_bitmap[(value & 0xff0000) >> 16] + 17; + + return __lowest_bit_bitmap[(value & 0xff000000) >> 24] + 25; +} +#endif + +#ifdef RT_DEBUG +/* RT_ASSERT(EX)'s hook */ +void (*rt_assert_hook)(const char *ex, const char *func, rt_size_t line); +/** + * This function will set a hook function to RT_ASSERT(EX). It will run when the expression is false. + * + * @param hook the hook function + */ +void rt_assert_set_hook(void (*hook)(const char *ex, const char *func, rt_size_t line)) +{ + rt_assert_hook = hook; +} + +/** + * The RT_ASSERT function. + * + * @param ex the assertion condition string + * @param func the function name when assertion. + * @param line the file line number when assertion. + */ +void rt_assert_handler(const char *ex_string, const char *func, rt_size_t line) +{ + volatile char dummy = 0; + + if (rt_assert_hook == RT_NULL) + { +#ifdef RT_USING_MODULE + if (dlmodule_self()) + { + /* close assertion module */ + dlmodule_exit(-1); + } + else +#endif + { + rt_kprintf("(%s) assertion failed at function:%s, line number:%d \n", ex_string, func, line); + while (dummy == 0); + } + } + else + { + rt_assert_hook(ex_string, func, line); + } +} +RTM_EXPORT(rt_assert_handler); +#endif /* RT_DEBUG */ + +#if !defined (RT_USING_NEWLIB) && defined (RT_USING_MINILIBC) && defined (__GNUC__) +#include +void *memcpy(void *dest, const void *src, size_t n) __attribute__((weak, alias("rt_memcpy"))); +void *memset(void *s, int c, size_t n) __attribute__((weak, alias("rt_memset"))); +void *memmove(void *dest, const void *src, size_t n) __attribute__((weak, alias("rt_memmove"))); +int memcmp(const void *s1, const void *s2, size_t n) __attribute__((weak, alias("rt_memcmp"))); + +size_t strlen(const char *s) __attribute__((weak, alias("rt_strlen"))); +char *strstr(const char *s1, const char *s2) __attribute__((weak, alias("rt_strstr"))); +int strcasecmp(const char *a, const char *b) __attribute__((weak, alias("rt_strcasecmp"))); +char *strncpy(char *dest, const char *src, size_t n) __attribute__((weak, alias("rt_strncpy"))); +int strncmp(const char *cs, const char *ct, size_t count) __attribute__((weak, alias("rt_strncmp"))); +#ifdef RT_USING_HEAP +char *strdup(const char *s) __attribute__((weak, alias("rt_strdup"))); +#endif + +int sprintf(char *buf, const char *format, ...) __attribute__((weak, alias("rt_sprintf"))); +int snprintf(char *buf, rt_size_t size, const char *fmt, ...) __attribute__((weak, alias("rt_snprintf"))); +int vsprintf(char *buf, const char *format, va_list arg_ptr) __attribute__((weak, alias("rt_vsprintf"))); + +#endif + +/**@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mem.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mem.c new file mode 100644 index 0000000000..2fefb48b67 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mem.c @@ -0,0 +1,698 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2008-7-12 Bernard the first version + * 2010-06-09 Bernard fix the end stub of heap + * fix memory check in rt_realloc function + * 2010-07-13 Bernard fix RT_ALIGN issue found by kuronca + * 2010-10-14 Bernard fix rt_realloc issue when realloc a NULL pointer. + * 2017-07-14 armink fix rt_realloc issue when new size is 0 + */ + +/* + * Copyright (c) 2001-2004 Swedish Institute of Computer Science. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. The name of the author may not be used to endorse or promote products + * derived from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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. + * + * This file is part of the lwIP TCP/IP stack. + * + * Author: Adam Dunkels + * Simon Goldschmidt + * + */ + +#include +#include + +#ifndef RT_USING_MEMHEAP_AS_HEAP + +/* #define RT_MEM_DEBUG */ +#define RT_MEM_STATS + +#if defined (RT_USING_HEAP) && defined (RT_USING_SMALL_MEM) +#ifdef RT_USING_HOOK +static void (*rt_malloc_hook)(void *ptr, rt_size_t size); +static void (*rt_free_hook)(void *ptr); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when a memory + * block is allocated from heap memory. + * + * @param hook the hook function + */ +void rt_malloc_sethook(void (*hook)(void *ptr, rt_size_t size)) +{ + rt_malloc_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when a memory + * block is released to heap memory. + * + * @param hook the hook function + */ +void rt_free_sethook(void (*hook)(void *ptr)) +{ + rt_free_hook = hook; +} + +/**@}*/ + +#endif + +#define HEAP_MAGIC 0x1ea0 +struct heap_mem +{ + /* magic and used flag */ + rt_uint16_t magic; + rt_uint16_t used; + + rt_size_t next, prev; + +#ifdef RT_USING_MEMTRACE + rt_uint8_t thread[4]; /* thread name */ +#endif +}; + +/** pointer to the heap: for alignment, heap_ptr is now a pointer instead of an array */ +static rt_uint8_t *heap_ptr; + +/** the last entry, always unused! */ +static struct heap_mem *heap_end; + +#define MIN_SIZE 12 +#define MIN_SIZE_ALIGNED RT_ALIGN(MIN_SIZE, RT_ALIGN_SIZE) +#define SIZEOF_STRUCT_MEM RT_ALIGN(sizeof(struct heap_mem), RT_ALIGN_SIZE) + +static struct heap_mem *lfree; /* pointer to the lowest free block */ + +static struct rt_semaphore heap_sem; +static rt_size_t mem_size_aligned; + +#ifdef RT_MEM_STATS +static rt_size_t used_mem, max_mem; +#endif +#ifdef RT_USING_MEMTRACE +rt_inline void rt_mem_setname(struct heap_mem *mem, const char *name) +{ + int index; + for (index = 0; index < sizeof(mem->thread); index ++) + { + if (name[index] == '\0') break; + mem->thread[index] = name[index]; + } + + for (; index < sizeof(mem->thread); index ++) + { + mem->thread[index] = ' '; + } +} +#endif + +static void plug_holes(struct heap_mem *mem) +{ + struct heap_mem *nmem; + struct heap_mem *pmem; + + RT_ASSERT((rt_uint8_t *)mem >= heap_ptr); + RT_ASSERT((rt_uint8_t *)mem < (rt_uint8_t *)heap_end); + RT_ASSERT(mem->used == 0); + + /* plug hole forward */ + nmem = (struct heap_mem *)&heap_ptr[mem->next]; + if (mem != nmem && + nmem->used == 0 && + (rt_uint8_t *)nmem != (rt_uint8_t *)heap_end) + { + /* if mem->next is unused and not end of heap_ptr, + * combine mem and mem->next + */ + if (lfree == nmem) + { + lfree = mem; + } + mem->next = nmem->next; + ((struct heap_mem *)&heap_ptr[nmem->next])->prev = (rt_uint8_t *)mem - heap_ptr; + } + + /* plug hole backward */ + pmem = (struct heap_mem *)&heap_ptr[mem->prev]; + if (pmem != mem && pmem->used == 0) + { + /* if mem->prev is unused, combine mem and mem->prev */ + if (lfree == mem) + { + lfree = pmem; + } + pmem->next = mem->next; + ((struct heap_mem *)&heap_ptr[mem->next])->prev = (rt_uint8_t *)pmem - heap_ptr; + } +} + +/** + * @ingroup SystemInit + * + * This function will initialize system heap memory. + * + * @param begin_addr the beginning address of system heap memory. + * @param end_addr the end address of system heap memory. + */ +void rt_system_heap_init(void *begin_addr, void *end_addr) +{ + struct heap_mem *mem; + rt_uint32_t begin_align = RT_ALIGN((rt_uint32_t)begin_addr, RT_ALIGN_SIZE); + rt_uint32_t end_align = RT_ALIGN_DOWN((rt_uint32_t)end_addr, RT_ALIGN_SIZE); + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* alignment addr */ + if ((end_align > (2 * SIZEOF_STRUCT_MEM)) && + ((end_align - 2 * SIZEOF_STRUCT_MEM) >= begin_align)) + { + /* calculate the aligned memory size */ + mem_size_aligned = end_align - begin_align - 2 * SIZEOF_STRUCT_MEM; + } + else + { + rt_kprintf("mem init, error begin address 0x%x, and end address 0x%x\n", + (rt_uint32_t)begin_addr, (rt_uint32_t)end_addr); + + return; + } + + /* point to begin address of heap */ + heap_ptr = (rt_uint8_t *)begin_align; + + RT_DEBUG_LOG(RT_DEBUG_MEM, ("mem init, heap begin address 0x%x, size %d\n", + (rt_uint32_t)heap_ptr, mem_size_aligned)); + + /* initialize the start of the heap */ + mem = (struct heap_mem *)heap_ptr; + mem->magic = HEAP_MAGIC; + mem->next = mem_size_aligned + SIZEOF_STRUCT_MEM; + mem->prev = 0; + mem->used = 0; +#ifdef RT_USING_MEMTRACE + rt_mem_setname(mem, "INIT"); +#endif + + /* initialize the end of the heap */ + heap_end = (struct heap_mem *)&heap_ptr[mem->next]; + heap_end->magic = HEAP_MAGIC; + heap_end->used = 1; + heap_end->next = mem_size_aligned + SIZEOF_STRUCT_MEM; + heap_end->prev = mem_size_aligned + SIZEOF_STRUCT_MEM; +#ifdef RT_USING_MEMTRACE + rt_mem_setname(heap_end, "INIT"); +#endif + + rt_sem_init(&heap_sem, "heap", 1, RT_IPC_FLAG_FIFO); + + /* initialize the lowest-free pointer to the start of the heap */ + lfree = (struct heap_mem *)heap_ptr; +} + +/** + * @addtogroup MM + */ + +/**@{*/ + +/** + * Allocate a block of memory with a minimum of 'size' bytes. + * + * @param size is the minimum size of the requested block in bytes. + * + * @return pointer to allocated memory or NULL if no free memory was found. + */ +void *rt_malloc(rt_size_t size) +{ + rt_size_t ptr, ptr2; + struct heap_mem *mem, *mem2; + + if (size == 0) + return RT_NULL; + + RT_DEBUG_NOT_IN_INTERRUPT; + + if (size != RT_ALIGN(size, RT_ALIGN_SIZE)) + RT_DEBUG_LOG(RT_DEBUG_MEM, ("malloc size %d, but align to %d\n", + size, RT_ALIGN(size, RT_ALIGN_SIZE))); + else + RT_DEBUG_LOG(RT_DEBUG_MEM, ("malloc size %d\n", size)); + + /* alignment size */ + size = RT_ALIGN(size, RT_ALIGN_SIZE); + + if (size > mem_size_aligned) + { + RT_DEBUG_LOG(RT_DEBUG_MEM, ("no memory\n")); + + return RT_NULL; + } + + /* every data block must be at least MIN_SIZE_ALIGNED long */ + if (size < MIN_SIZE_ALIGNED) + size = MIN_SIZE_ALIGNED; + + /* take memory semaphore */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + for (ptr = (rt_uint8_t *)lfree - heap_ptr; + ptr < mem_size_aligned - size; + ptr = ((struct heap_mem *)&heap_ptr[ptr])->next) + { + mem = (struct heap_mem *)&heap_ptr[ptr]; + + if ((!mem->used) && (mem->next - (ptr + SIZEOF_STRUCT_MEM)) >= size) + { + /* mem is not used and at least perfect fit is possible: + * mem->next - (ptr + SIZEOF_STRUCT_MEM) gives us the 'user data size' of mem */ + + if (mem->next - (ptr + SIZEOF_STRUCT_MEM) >= + (size + SIZEOF_STRUCT_MEM + MIN_SIZE_ALIGNED)) + { + /* (in addition to the above, we test if another struct heap_mem (SIZEOF_STRUCT_MEM) containing + * at least MIN_SIZE_ALIGNED of data also fits in the 'user data space' of 'mem') + * -> split large block, create empty remainder, + * remainder must be large enough to contain MIN_SIZE_ALIGNED data: if + * mem->next - (ptr + (2*SIZEOF_STRUCT_MEM)) == size, + * struct heap_mem would fit in but no data between mem2 and mem2->next + * @todo we could leave out MIN_SIZE_ALIGNED. We would create an empty + * region that couldn't hold data, but when mem->next gets freed, + * the 2 regions would be combined, resulting in more free memory + */ + ptr2 = ptr + SIZEOF_STRUCT_MEM + size; + + /* create mem2 struct */ + mem2 = (struct heap_mem *)&heap_ptr[ptr2]; + mem2->magic = HEAP_MAGIC; + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; +#ifdef RT_USING_MEMTRACE + rt_mem_setname(mem2, " "); +#endif + + /* and insert it between mem and mem->next */ + mem->next = ptr2; + mem->used = 1; + + if (mem2->next != mem_size_aligned + SIZEOF_STRUCT_MEM) + { + ((struct heap_mem *)&heap_ptr[mem2->next])->prev = ptr2; + } +#ifdef RT_MEM_STATS + used_mem += (size + SIZEOF_STRUCT_MEM); + if (max_mem < used_mem) + max_mem = used_mem; +#endif + } + else + { + /* (a mem2 struct does no fit into the user data space of mem and mem->next will always + * be used at this point: if not we have 2 unused structs in a row, plug_holes should have + * take care of this). + * -> near fit or excact fit: do not split, no mem2 creation + * also can't move mem->next directly behind mem, since mem->next + * will always be used at this point! + */ + mem->used = 1; +#ifdef RT_MEM_STATS + used_mem += mem->next - ((rt_uint8_t *)mem - heap_ptr); + if (max_mem < used_mem) + max_mem = used_mem; +#endif + } + /* set memory block magic */ + mem->magic = HEAP_MAGIC; +#ifdef RT_USING_MEMTRACE + if (rt_thread_self()) + rt_mem_setname(mem, rt_thread_self()->name); + else + rt_mem_setname(mem, "NONE"); +#endif + + if (mem == lfree) + { + /* Find next free block after mem and update lowest free pointer */ + while (lfree->used && lfree != heap_end) + lfree = (struct heap_mem *)&heap_ptr[lfree->next]; + + RT_ASSERT(((lfree == heap_end) || (!lfree->used))); + } + + rt_sem_release(&heap_sem); + RT_ASSERT((rt_uint32_t)mem + SIZEOF_STRUCT_MEM + size <= (rt_uint32_t)heap_end); + RT_ASSERT((rt_uint32_t)((rt_uint8_t *)mem + SIZEOF_STRUCT_MEM) % RT_ALIGN_SIZE == 0); + RT_ASSERT((((rt_uint32_t)mem) & (RT_ALIGN_SIZE - 1)) == 0); + + RT_DEBUG_LOG(RT_DEBUG_MEM, + ("allocate memory at 0x%x, size: %d\n", + (rt_uint32_t)((rt_uint8_t *)mem + SIZEOF_STRUCT_MEM), + (rt_uint32_t)(mem->next - ((rt_uint8_t *)mem - heap_ptr)))); + + RT_OBJECT_HOOK_CALL(rt_malloc_hook, + (((void *)((rt_uint8_t *)mem + SIZEOF_STRUCT_MEM)), size)); + + /* return the memory data except mem struct */ + return (rt_uint8_t *)mem + SIZEOF_STRUCT_MEM; + } + } + + rt_sem_release(&heap_sem); + + return RT_NULL; +} +RTM_EXPORT(rt_malloc); + +/** + * This function will change the previously allocated memory block. + * + * @param rmem pointer to memory allocated by rt_malloc + * @param newsize the required new size + * + * @return the changed memory block address + */ +void *rt_realloc(void *rmem, rt_size_t newsize) +{ + rt_size_t size; + rt_size_t ptr, ptr2; + struct heap_mem *mem, *mem2; + void *nmem; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* alignment size */ + newsize = RT_ALIGN(newsize, RT_ALIGN_SIZE); + if (newsize > mem_size_aligned) + { + RT_DEBUG_LOG(RT_DEBUG_MEM, ("realloc: out of memory\n")); + + return RT_NULL; + } + else if (newsize == 0) + { + rt_free(rmem); + return RT_NULL; + } + + /* allocate a new memory block */ + if (rmem == RT_NULL) + return rt_malloc(newsize); + + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + if ((rt_uint8_t *)rmem < (rt_uint8_t *)heap_ptr || + (rt_uint8_t *)rmem >= (rt_uint8_t *)heap_end) + { + /* illegal memory */ + rt_sem_release(&heap_sem); + + return rmem; + } + + mem = (struct heap_mem *)((rt_uint8_t *)rmem - SIZEOF_STRUCT_MEM); + + ptr = (rt_uint8_t *)mem - heap_ptr; + size = mem->next - ptr - SIZEOF_STRUCT_MEM; + if (size == newsize) + { + /* the size is the same as */ + rt_sem_release(&heap_sem); + + return rmem; + } + + if (newsize + SIZEOF_STRUCT_MEM + MIN_SIZE < size) + { + /* split memory block */ +#ifdef RT_MEM_STATS + used_mem -= (size - newsize); +#endif + + ptr2 = ptr + SIZEOF_STRUCT_MEM + newsize; + mem2 = (struct heap_mem *)&heap_ptr[ptr2]; + mem2->magic = HEAP_MAGIC; + mem2->used = 0; + mem2->next = mem->next; + mem2->prev = ptr; +#ifdef RT_USING_MEMTRACE + rt_mem_setname(mem2, " "); +#endif + mem->next = ptr2; + if (mem2->next != mem_size_aligned + SIZEOF_STRUCT_MEM) + { + ((struct heap_mem *)&heap_ptr[mem2->next])->prev = ptr2; + } + + plug_holes(mem2); + + rt_sem_release(&heap_sem); + + return rmem; + } + rt_sem_release(&heap_sem); + + /* expand memory */ + nmem = rt_malloc(newsize); + if (nmem != RT_NULL) /* check memory */ + { + rt_memcpy(nmem, rmem, size < newsize ? size : newsize); + rt_free(rmem); + } + + return nmem; +} +RTM_EXPORT(rt_realloc); + +/** + * This function will contiguously allocate enough space for count objects + * that are size bytes of memory each and returns a pointer to the allocated + * memory. + * + * The allocated memory is filled with bytes of value zero. + * + * @param count number of objects to allocate + * @param size size of the objects to allocate + * + * @return pointer to allocated memory / NULL pointer if there is an error + */ +void *rt_calloc(rt_size_t count, rt_size_t size) +{ + void *p; + + /* allocate 'count' objects of size 'size' */ + p = rt_malloc(count * size); + + /* zero the memory */ + if (p) + rt_memset(p, 0, count * size); + + return p; +} +RTM_EXPORT(rt_calloc); + +/** + * This function will release the previously allocated memory block by + * rt_malloc. The released memory block is taken back to system heap. + * + * @param rmem the address of memory which will be released + */ +void rt_free(void *rmem) +{ + struct heap_mem *mem; + + if (rmem == RT_NULL) + return; + + RT_DEBUG_NOT_IN_INTERRUPT; + + RT_ASSERT((((rt_uint32_t)rmem) & (RT_ALIGN_SIZE - 1)) == 0); + RT_ASSERT((rt_uint8_t *)rmem >= (rt_uint8_t *)heap_ptr && + (rt_uint8_t *)rmem < (rt_uint8_t *)heap_end); + + RT_OBJECT_HOOK_CALL(rt_free_hook, (rmem)); + + if ((rt_uint8_t *)rmem < (rt_uint8_t *)heap_ptr || + (rt_uint8_t *)rmem >= (rt_uint8_t *)heap_end) + { + RT_DEBUG_LOG(RT_DEBUG_MEM, ("illegal memory\n")); + + return; + } + + /* Get the corresponding struct heap_mem ... */ + mem = (struct heap_mem *)((rt_uint8_t *)rmem - SIZEOF_STRUCT_MEM); + + RT_DEBUG_LOG(RT_DEBUG_MEM, + ("release memory 0x%x, size: %d\n", + (rt_uint32_t)rmem, + (rt_uint32_t)(mem->next - ((rt_uint8_t *)mem - heap_ptr)))); + + + /* protect the heap from concurrent access */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + /* ... which has to be in a used state ... */ + if (!mem->used || mem->magic != HEAP_MAGIC) + { + rt_kprintf("to free a bad data block:\n"); + rt_kprintf("mem: 0x%08x, used flag: %d, magic code: 0x%04x\n", mem, mem->used, mem->magic); + } + RT_ASSERT(mem->used); + RT_ASSERT(mem->magic == HEAP_MAGIC); + /* ... and is now unused. */ + mem->used = 0; + mem->magic = HEAP_MAGIC; +#ifdef RT_USING_MEMTRACE + rt_mem_setname(mem, " "); +#endif + + if (mem < lfree) + { + /* the newly freed struct is now the lowest */ + lfree = mem; + } + +#ifdef RT_MEM_STATS + used_mem -= (mem->next - ((rt_uint8_t *)mem - heap_ptr)); +#endif + + /* finally, see if prev or next are free also */ + plug_holes(mem); + rt_sem_release(&heap_sem); +} +RTM_EXPORT(rt_free); + +#ifdef RT_MEM_STATS +void rt_memory_info(rt_uint32_t *total, + rt_uint32_t *used, + rt_uint32_t *max_used) +{ + if (total != RT_NULL) + *total = mem_size_aligned; + if (used != RT_NULL) + *used = used_mem; + if (max_used != RT_NULL) + *max_used = max_mem; +} + +#ifdef RT_USING_FINSH +#include + +void list_mem(void) +{ + rt_kprintf("total memory: %d\n", mem_size_aligned); + rt_kprintf("used memory : %d\n", used_mem); + rt_kprintf("maximum allocated memory: %d\n", max_mem); +} +FINSH_FUNCTION_EXPORT(list_mem, list memory usage information) + +#ifdef RT_USING_MEMTRACE +int memcheck(void) +{ + int position; + rt_uint32_t level; + struct heap_mem *mem; + level = rt_hw_interrupt_disable(); + for (mem = (struct heap_mem *)heap_ptr; mem != heap_end; mem = (struct heap_mem *)&heap_ptr[mem->next]) + { + position = (rt_uint32_t)mem - (rt_uint32_t)heap_ptr; + if (position < 0) goto __exit; + if (position > mem_size_aligned) goto __exit; + if (mem->magic != HEAP_MAGIC) goto __exit; + if (mem->used != 0 && mem->used != 1) goto __exit; + } + rt_hw_interrupt_enable(level); + + return 0; +__exit: + rt_kprintf("Memory block wrong:\n"); + rt_kprintf("address: 0x%08x\n", mem); + rt_kprintf(" magic: 0x%04x\n", mem->magic); + rt_kprintf(" used: %d\n", mem->used); + rt_kprintf(" size: %d\n", mem->next - position - SIZEOF_STRUCT_MEM); + rt_hw_interrupt_enable(level); + + return 0; +} +MSH_CMD_EXPORT(memcheck, check memory data); + +int memtrace(int argc, char **argv) +{ + struct heap_mem *mem; + + list_mem(); + + rt_kprintf("\nmemory heap address:\n"); + rt_kprintf("heap_ptr: 0x%08x\n", heap_ptr); + rt_kprintf("lfree : 0x%08x\n", lfree); + rt_kprintf("heap_end: 0x%08x\n", heap_end); + + rt_kprintf("\n--memory item information --\n"); + for (mem = (struct heap_mem *)heap_ptr; mem != heap_end; mem = (struct heap_mem *)&heap_ptr[mem->next]) + { + int position = (rt_uint32_t)mem - (rt_uint32_t)heap_ptr; + int size; + + rt_kprintf("[0x%08x - ", mem); + + size = mem->next - position - SIZEOF_STRUCT_MEM; + if (size < 1024) + rt_kprintf("%5d", size); + else if (size < 1024 * 1024) + rt_kprintf("%4dK", size / 1024); + else + rt_kprintf("%4dM", size / (1024 * 1024)); + + rt_kprintf("] %c%c%c%c", mem->thread[0], mem->thread[1], mem->thread[2], mem->thread[3]); + if (mem->magic != HEAP_MAGIC) + rt_kprintf(": ***\n"); + else + rt_kprintf("\n"); + } + + return 0; +} +MSH_CMD_EXPORT(memtrace, dump memory trace information); +#endif /* end of RT_USING_MEMTRACE */ +#endif /* end of RT_USING_FINSH */ + +#endif + +/**@}*/ + +#endif /* end of RT_USING_HEAP */ +#endif /* end of RT_USING_MEMHEAP_AS_HEAP */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/memheap.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/memheap.c new file mode 100644 index 0000000000..eb5d710029 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/memheap.c @@ -0,0 +1,717 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * File : memheap.c + * + * Change Logs: + * Date Author Notes + * 2012-04-10 Bernard first implementation + * 2012-10-16 Bernard add the mutex lock for heap object. + * 2012-12-29 Bernard memheap can be used as system heap. + * change mutex lock to semaphore lock. + * 2013-04-10 Bernard add rt_memheap_realloc function. + * 2013-05-24 Bernard fix the rt_memheap_realloc issue. + * 2013-07-11 Grissiom fix the memory block splitting issue. + * 2013-07-15 Grissiom optimize rt_memheap_realloc + */ + +#include +#include + +#ifdef RT_USING_MEMHEAP + +/* dynamic pool magic and mask */ +#define RT_MEMHEAP_MAGIC 0x1ea01ea0 +#define RT_MEMHEAP_MASK 0xfffffffe +#define RT_MEMHEAP_USED 0x01 +#define RT_MEMHEAP_FREED 0x00 + +#define RT_MEMHEAP_IS_USED(i) ((i)->magic & RT_MEMHEAP_USED) +#define RT_MEMHEAP_MINIALLOC 12 + +#define RT_MEMHEAP_SIZE RT_ALIGN(sizeof(struct rt_memheap_item), RT_ALIGN_SIZE) +#define MEMITEM_SIZE(item) ((rt_uint32_t)item->next - (rt_uint32_t)item - RT_MEMHEAP_SIZE) + +/* + * The initialized memory pool will be: + * +-----------------------------------+--------------------------+ + * | whole freed memory block | Used Memory Block Tailer | + * +-----------------------------------+--------------------------+ + * + * block_list --> whole freed memory block + * + * The length of Used Memory Block Tailer is 0, + * which is prevents block merging across list + */ +rt_err_t rt_memheap_init(struct rt_memheap *memheap, + const char *name, + void *start_addr, + rt_size_t size) +{ + struct rt_memheap_item *item; + + RT_ASSERT(memheap != RT_NULL); + + /* initialize pool object */ + rt_object_init(&(memheap->parent), RT_Object_Class_MemHeap, name); + + memheap->start_addr = start_addr; + memheap->pool_size = RT_ALIGN_DOWN(size, RT_ALIGN_SIZE); + memheap->available_size = memheap->pool_size - (2 * RT_MEMHEAP_SIZE); + memheap->max_used_size = memheap->pool_size - memheap->available_size; + + /* initialize the free list header */ + item = &(memheap->free_header); + item->magic = RT_MEMHEAP_MAGIC; + item->pool_ptr = memheap; + item->next = RT_NULL; + item->prev = RT_NULL; + item->next_free = item; + item->prev_free = item; + + /* set the free list to free list header */ + memheap->free_list = item; + + /* initialize the first big memory block */ + item = (struct rt_memheap_item *)start_addr; + item->magic = RT_MEMHEAP_MAGIC; + item->pool_ptr = memheap; + item->next = RT_NULL; + item->prev = RT_NULL; + item->next_free = item; + item->prev_free = item; + + item->next = (struct rt_memheap_item *) + ((rt_uint8_t *)item + memheap->available_size + RT_MEMHEAP_SIZE); + item->prev = item->next; + + /* block list header */ + memheap->block_list = item; + + /* place the big memory block to free list */ + item->next_free = memheap->free_list->next_free; + item->prev_free = memheap->free_list; + memheap->free_list->next_free->prev_free = item; + memheap->free_list->next_free = item; + + /* move to the end of memory pool to build a small tailer block, + * which prevents block merging + */ + item = item->next; + /* it's a used memory block */ + item->magic = RT_MEMHEAP_MAGIC | RT_MEMHEAP_USED; + item->pool_ptr = memheap; + item->next = (struct rt_memheap_item *)start_addr; + item->prev = (struct rt_memheap_item *)start_addr; + /* not in free list */ + item->next_free = item->prev_free = RT_NULL; + + /* initialize semaphore lock */ + rt_sem_init(&(memheap->lock), name, 1, RT_IPC_FLAG_FIFO); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("memory heap: start addr 0x%08x, size %d, free list header 0x%08x\n", + start_addr, size, &(memheap->free_header))); + + return RT_EOK; +} +RTM_EXPORT(rt_memheap_init); + +rt_err_t rt_memheap_detach(struct rt_memheap *heap) +{ + RT_ASSERT(heap); + RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); + RT_ASSERT(rt_object_is_systemobject(&heap->parent)); + + rt_object_detach(&(heap->lock.parent.parent)); + rt_object_detach(&(heap->parent)); + + /* Return a successful completion. */ + return RT_EOK; +} +RTM_EXPORT(rt_memheap_detach); + +void *rt_memheap_alloc(struct rt_memheap *heap, rt_size_t size) +{ + rt_err_t result; + rt_uint32_t free_size; + struct rt_memheap_item *header_ptr; + + RT_ASSERT(heap != RT_NULL); + RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); + + /* align allocated size */ + size = RT_ALIGN(size, RT_ALIGN_SIZE); + if (size < RT_MEMHEAP_MINIALLOC) + size = RT_MEMHEAP_MINIALLOC; + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("allocate %d on heap:%8.*s", + size, RT_NAME_MAX, heap->parent.name)); + + if (size < heap->available_size) + { + /* search on free list */ + free_size = 0; + + /* lock memheap */ + result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); + if (result != RT_EOK) + { + rt_set_errno(result); + + return RT_NULL; + } + + /* get the first free memory block */ + header_ptr = heap->free_list->next_free; + while (header_ptr != heap->free_list && free_size < size) + { + /* get current freed memory block size */ + free_size = MEMITEM_SIZE(header_ptr); + if (free_size < size) + { + /* move to next free memory block */ + header_ptr = header_ptr->next_free; + } + } + + /* determine if the memory is available. */ + if (free_size >= size) + { + /* a block that satisfies the request has been found. */ + + /* determine if the block needs to be split. */ + if (free_size >= (size + RT_MEMHEAP_SIZE + RT_MEMHEAP_MINIALLOC)) + { + struct rt_memheap_item *new_ptr; + + /* split the block. */ + new_ptr = (struct rt_memheap_item *) + (((rt_uint8_t *)header_ptr) + size + RT_MEMHEAP_SIZE); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("split: block[0x%08x] nextm[0x%08x] prevm[0x%08x] to new[0x%08x]\n", + header_ptr, + header_ptr->next, + header_ptr->prev, + new_ptr)); + + /* mark the new block as a memory block and freed. */ + new_ptr->magic = RT_MEMHEAP_MAGIC; + + /* put the pool pointer into the new block. */ + new_ptr->pool_ptr = heap; + + /* break down the block list */ + new_ptr->prev = header_ptr; + new_ptr->next = header_ptr->next; + header_ptr->next->prev = new_ptr; + header_ptr->next = new_ptr; + + /* remove header ptr from free list */ + header_ptr->next_free->prev_free = header_ptr->prev_free; + header_ptr->prev_free->next_free = header_ptr->next_free; + header_ptr->next_free = RT_NULL; + header_ptr->prev_free = RT_NULL; + + /* insert new_ptr to free list */ + new_ptr->next_free = heap->free_list->next_free; + new_ptr->prev_free = heap->free_list; + heap->free_list->next_free->prev_free = new_ptr; + heap->free_list->next_free = new_ptr; + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("new ptr: next_free 0x%08x, prev_free 0x%08x\n", + new_ptr->next_free, + new_ptr->prev_free)); + + /* decrement the available byte count. */ + heap->available_size = heap->available_size - + size - + RT_MEMHEAP_SIZE; + if (heap->pool_size - heap->available_size > heap->max_used_size) + heap->max_used_size = heap->pool_size - heap->available_size; + } + else + { + /* decrement the entire free size from the available bytes count. */ + heap->available_size = heap->available_size - free_size; + if (heap->pool_size - heap->available_size > heap->max_used_size) + heap->max_used_size = heap->pool_size - heap->available_size; + + /* remove header_ptr from free list */ + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("one block: block[0x%08x], next_free 0x%08x, prev_free 0x%08x\n", + header_ptr, + header_ptr->next_free, + header_ptr->prev_free)); + + header_ptr->next_free->prev_free = header_ptr->prev_free; + header_ptr->prev_free->next_free = header_ptr->next_free; + header_ptr->next_free = RT_NULL; + header_ptr->prev_free = RT_NULL; + } + + /* Mark the allocated block as not available. */ + header_ptr->magic |= RT_MEMHEAP_USED; + + /* release lock */ + rt_sem_release(&(heap->lock)); + + /* Return a memory address to the caller. */ + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("alloc mem: memory[0x%08x], heap[0x%08x], size: %d\n", + (void *)((rt_uint8_t *)header_ptr + RT_MEMHEAP_SIZE), + header_ptr, + size)); + + return (void *)((rt_uint8_t *)header_ptr + RT_MEMHEAP_SIZE); + } + + /* release lock */ + rt_sem_release(&(heap->lock)); + } + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("allocate memory: failed\n")); + + /* Return the completion status. */ + return RT_NULL; +} +RTM_EXPORT(rt_memheap_alloc); + +void *rt_memheap_realloc(struct rt_memheap *heap, void *ptr, rt_size_t newsize) +{ + rt_err_t result; + rt_size_t oldsize; + struct rt_memheap_item *header_ptr; + struct rt_memheap_item *new_ptr; + + RT_ASSERT(heap); + RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); + + if (newsize == 0) + { + rt_memheap_free(ptr); + + return RT_NULL; + } + /* align allocated size */ + newsize = RT_ALIGN(newsize, RT_ALIGN_SIZE); + if (newsize < RT_MEMHEAP_MINIALLOC) + newsize = RT_MEMHEAP_MINIALLOC; + + if (ptr == RT_NULL) + { + return rt_memheap_alloc(heap, newsize); + } + + /* get memory block header and get the size of memory block */ + header_ptr = (struct rt_memheap_item *) + ((rt_uint8_t *)ptr - RT_MEMHEAP_SIZE); + oldsize = MEMITEM_SIZE(header_ptr); + /* re-allocate memory */ + if (newsize > oldsize) + { + void *new_ptr; + struct rt_memheap_item *next_ptr; + + /* lock memheap */ + result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); + if (result != RT_EOK) + { + rt_set_errno(result); + return RT_NULL; + } + + next_ptr = header_ptr->next; + + /* header_ptr should not be the tail */ + RT_ASSERT(next_ptr > header_ptr); + + /* check whether the following free space is enough to expand */ + if (!RT_MEMHEAP_IS_USED(next_ptr)) + { + rt_int32_t nextsize; + + nextsize = MEMITEM_SIZE(next_ptr); + RT_ASSERT(next_ptr > 0); + + /* Here is the ASCII art of the situation that we can make use of + * the next free node without alloc/memcpy, |*| is the control + * block: + * + * oldsize free node + * |*|-----------|*|----------------------|*| + * newsize >= minialloc + * |*|----------------|*|-----------------|*| + */ + if (nextsize + oldsize > newsize + RT_MEMHEAP_MINIALLOC) + { + /* decrement the entire free size from the available bytes count. */ + heap->available_size = heap->available_size - (newsize - oldsize); + if (heap->pool_size - heap->available_size > heap->max_used_size) + heap->max_used_size = heap->pool_size - heap->available_size; + + /* remove next_ptr from free list */ + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("remove block: block[0x%08x], next_free 0x%08x, prev_free 0x%08x", + next_ptr, + next_ptr->next_free, + next_ptr->prev_free)); + + next_ptr->next_free->prev_free = next_ptr->prev_free; + next_ptr->prev_free->next_free = next_ptr->next_free; + next_ptr->next->prev = next_ptr->prev; + next_ptr->prev->next = next_ptr->next; + + /* build a new one on the right place */ + next_ptr = (struct rt_memheap_item *)((char *)ptr + newsize); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("new free block: block[0x%08x] nextm[0x%08x] prevm[0x%08x]", + next_ptr, + next_ptr->next, + next_ptr->prev)); + + /* mark the new block as a memory block and freed. */ + next_ptr->magic = RT_MEMHEAP_MAGIC; + + /* put the pool pointer into the new block. */ + next_ptr->pool_ptr = heap; + + next_ptr->prev = header_ptr; + next_ptr->next = header_ptr->next; + header_ptr->next->prev = next_ptr; + header_ptr->next = next_ptr; + + /* insert next_ptr to free list */ + next_ptr->next_free = heap->free_list->next_free; + next_ptr->prev_free = heap->free_list; + heap->free_list->next_free->prev_free = next_ptr; + heap->free_list->next_free = next_ptr; + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("new ptr: next_free 0x%08x, prev_free 0x%08x", + next_ptr->next_free, + next_ptr->prev_free)); + + /* release lock */ + rt_sem_release(&(heap->lock)); + + return ptr; + } + } + + /* release lock */ + rt_sem_release(&(heap->lock)); + + /* re-allocate a memory block */ + new_ptr = (void *)rt_memheap_alloc(heap, newsize); + if (new_ptr != RT_NULL) + { + rt_memcpy(new_ptr, ptr, oldsize < newsize ? oldsize : newsize); + rt_memheap_free(ptr); + } + + return new_ptr; + } + + /* don't split when there is less than one node space left */ + if (newsize + RT_MEMHEAP_SIZE + RT_MEMHEAP_MINIALLOC >= oldsize) + return ptr; + + /* lock memheap */ + result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); + if (result != RT_EOK) + { + rt_set_errno(result); + + return RT_NULL; + } + + /* split the block. */ + new_ptr = (struct rt_memheap_item *) + (((rt_uint8_t *)header_ptr) + newsize + RT_MEMHEAP_SIZE); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("split: block[0x%08x] nextm[0x%08x] prevm[0x%08x] to new[0x%08x]\n", + header_ptr, + header_ptr->next, + header_ptr->prev, + new_ptr)); + + /* mark the new block as a memory block and freed. */ + new_ptr->magic = RT_MEMHEAP_MAGIC; + /* put the pool pointer into the new block. */ + new_ptr->pool_ptr = heap; + + /* break down the block list */ + new_ptr->prev = header_ptr; + new_ptr->next = header_ptr->next; + header_ptr->next->prev = new_ptr; + header_ptr->next = new_ptr; + + /* determine if the block can be merged with the next neighbor. */ + if (!RT_MEMHEAP_IS_USED(new_ptr->next)) + { + struct rt_memheap_item *free_ptr; + + /* merge block with next neighbor. */ + free_ptr = new_ptr->next; + heap->available_size = heap->available_size - MEMITEM_SIZE(free_ptr); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("merge: right node 0x%08x, next_free 0x%08x, prev_free 0x%08x\n", + header_ptr, header_ptr->next_free, header_ptr->prev_free)); + + free_ptr->next->prev = new_ptr; + new_ptr->next = free_ptr->next; + + /* remove free ptr from free list */ + free_ptr->next_free->prev_free = free_ptr->prev_free; + free_ptr->prev_free->next_free = free_ptr->next_free; + } + + /* insert the split block to free list */ + new_ptr->next_free = heap->free_list->next_free; + new_ptr->prev_free = heap->free_list; + heap->free_list->next_free->prev_free = new_ptr; + heap->free_list->next_free = new_ptr; + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("new free ptr: next_free 0x%08x, prev_free 0x%08x\n", + new_ptr->next_free, + new_ptr->prev_free)); + + /* increment the available byte count. */ + heap->available_size = heap->available_size + MEMITEM_SIZE(new_ptr); + + /* release lock */ + rt_sem_release(&(heap->lock)); + + /* return the old memory block */ + return ptr; +} +RTM_EXPORT(rt_memheap_realloc); + +void rt_memheap_free(void *ptr) +{ + rt_err_t result; + struct rt_memheap *heap; + struct rt_memheap_item *header_ptr, *new_ptr; + rt_uint32_t insert_header; + + /* NULL check */ + if (ptr == RT_NULL) return; + + /* set initial status as OK */ + insert_header = 1; + new_ptr = RT_NULL; + header_ptr = (struct rt_memheap_item *) + ((rt_uint8_t *)ptr - RT_MEMHEAP_SIZE); + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("free memory: memory[0x%08x], block[0x%08x]\n", + ptr, header_ptr)); + + /* check magic */ + RT_ASSERT((header_ptr->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC); + RT_ASSERT(header_ptr->magic & RT_MEMHEAP_USED); + /* check whether this block of memory has been over-written. */ + RT_ASSERT((header_ptr->next->magic & RT_MEMHEAP_MASK) == RT_MEMHEAP_MAGIC); + + /* get pool ptr */ + heap = header_ptr->pool_ptr; + + RT_ASSERT(heap); + RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); + + /* lock memheap */ + result = rt_sem_take(&(heap->lock), RT_WAITING_FOREVER); + if (result != RT_EOK) + { + rt_set_errno(result); + + return ; + } + + /* Mark the memory as available. */ + header_ptr->magic &= ~RT_MEMHEAP_USED; + /* Adjust the available number of bytes. */ + heap->available_size = heap->available_size + MEMITEM_SIZE(header_ptr); + + /* Determine if the block can be merged with the previous neighbor. */ + if (!RT_MEMHEAP_IS_USED(header_ptr->prev)) + { + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, ("merge: left node 0x%08x\n", + header_ptr->prev)); + + /* adjust the available number of bytes. */ + heap->available_size = heap->available_size + RT_MEMHEAP_SIZE; + + /* yes, merge block with previous neighbor. */ + (header_ptr->prev)->next = header_ptr->next; + (header_ptr->next)->prev = header_ptr->prev; + + /* move header pointer to previous. */ + header_ptr = header_ptr->prev; + /* don't insert header to free list */ + insert_header = 0; + } + + /* determine if the block can be merged with the next neighbor. */ + if (!RT_MEMHEAP_IS_USED(header_ptr->next)) + { + /* adjust the available number of bytes. */ + heap->available_size = heap->available_size + RT_MEMHEAP_SIZE; + + /* merge block with next neighbor. */ + new_ptr = header_ptr->next; + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("merge: right node 0x%08x, next_free 0x%08x, prev_free 0x%08x\n", + new_ptr, new_ptr->next_free, new_ptr->prev_free)); + + new_ptr->next->prev = header_ptr; + header_ptr->next = new_ptr->next; + + /* remove new ptr from free list */ + new_ptr->next_free->prev_free = new_ptr->prev_free; + new_ptr->prev_free->next_free = new_ptr->next_free; + } + + if (insert_header) + { + /* no left merge, insert to free list */ + header_ptr->next_free = heap->free_list->next_free; + header_ptr->prev_free = heap->free_list; + heap->free_list->next_free->prev_free = header_ptr; + heap->free_list->next_free = header_ptr; + + RT_DEBUG_LOG(RT_DEBUG_MEMHEAP, + ("insert to free list: next_free 0x%08x, prev_free 0x%08x\n", + header_ptr->next_free, header_ptr->prev_free)); + } + + /* release lock */ + rt_sem_release(&(heap->lock)); +} +RTM_EXPORT(rt_memheap_free); + +#ifdef RT_USING_MEMHEAP_AS_HEAP +static struct rt_memheap _heap; + +void rt_system_heap_init(void *begin_addr, void *end_addr) +{ + /* initialize a default heap in the system */ + rt_memheap_init(&_heap, + "heap", + begin_addr, + (rt_uint32_t)end_addr - (rt_uint32_t)begin_addr); +} + +void *rt_malloc(rt_size_t size) +{ + void *ptr; + + /* try to allocate in system heap */ + ptr = rt_memheap_alloc(&_heap, size); + if (ptr == RT_NULL) + { + struct rt_object *object; + struct rt_list_node *node; + struct rt_memheap *heap; + struct rt_object_information *information; + + /* try to allocate on other memory heap */ + information = rt_object_get_information(RT_Object_Class_MemHeap); + RT_ASSERT(information != RT_NULL); + for (node = information->object_list.next; + node != &(information->object_list); + node = node->next) + { + object = rt_list_entry(node, struct rt_object, list); + heap = (struct rt_memheap *)object; + + RT_ASSERT(heap); + RT_ASSERT(rt_object_get_type(&heap->parent) == RT_Object_Class_MemHeap); + + /* not allocate in the default system heap */ + if (heap == &_heap) + continue; + + ptr = rt_memheap_alloc(heap, size); + if (ptr != RT_NULL) + break; + } + } + + return ptr; +} +RTM_EXPORT(rt_malloc); + +void rt_free(void *rmem) +{ + rt_memheap_free(rmem); +} +RTM_EXPORT(rt_free); + +void *rt_realloc(void *rmem, rt_size_t newsize) +{ + void *new_ptr; + struct rt_memheap_item *header_ptr; + + if (rmem == RT_NULL) + return rt_malloc(newsize); + + if (newsize == 0) + { + rt_free(rmem); + return RT_NULL; + } + + /* get old memory item */ + header_ptr = (struct rt_memheap_item *) + ((rt_uint8_t *)rmem - RT_MEMHEAP_SIZE); + + new_ptr = rt_memheap_realloc(header_ptr->pool_ptr, rmem, newsize); + if (new_ptr == RT_NULL && newsize != 0) + { + /* allocate memory block from other memheap */ + new_ptr = rt_malloc(newsize); + if (new_ptr != RT_NULL && rmem != RT_NULL) + { + rt_size_t oldsize; + + /* get the size of old memory block */ + oldsize = MEMITEM_SIZE(header_ptr); + if (newsize > oldsize) + rt_memcpy(new_ptr, rmem, oldsize); + else + rt_memcpy(new_ptr, rmem, newsize); + + rt_free(rmem); + } + } + + return new_ptr; +} +RTM_EXPORT(rt_realloc); + +void *rt_calloc(rt_size_t count, rt_size_t size) +{ + void *ptr; + rt_size_t total_size; + + total_size = count * size; + ptr = rt_malloc(total_size); + if (ptr != RT_NULL) + { + /* clean memory */ + rt_memset(ptr, 0, total_size); + } + + return ptr; +} +RTM_EXPORT(rt_calloc); + +#endif + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mempool.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mempool.c new file mode 100644 index 0000000000..2184586aba --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/mempool.c @@ -0,0 +1,454 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-05-27 Bernard implement memory pool + * 2006-06-03 Bernard fix the thread timer init bug + * 2006-06-30 Bernard fix the allocate/free block bug + * 2006-08-04 Bernard add hook support + * 2006-08-10 Bernard fix interrupt bug in rt_mp_alloc + * 2010-07-13 Bernard fix RT_ALIGN issue found by kuronca + * 2010-10-26 yi.qiu add module support in rt_mp_delete + * 2011-01-24 Bernard add object allocation check. + * 2012-03-22 Bernard fix align issue in rt_mp_init and rt_mp_create. + */ + +#include +#include + +#ifdef RT_USING_MEMPOOL + +#ifdef RT_USING_HOOK +static void (*rt_mp_alloc_hook)(struct rt_mempool *mp, void *block); +static void (*rt_mp_free_hook)(struct rt_mempool *mp, void *block); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when a memory + * block is allocated from memory pool. + * + * @param hook the hook function + */ +void rt_mp_alloc_sethook(void (*hook)(struct rt_mempool *mp, void *block)) +{ + rt_mp_alloc_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when a memory + * block is released to memory pool. + * + * @param hook the hook function + */ +void rt_mp_free_sethook(void (*hook)(struct rt_mempool *mp, void *block)) +{ + rt_mp_free_hook = hook; +} + +/**@}*/ +#endif + +/** + * @addtogroup MM + */ + +/**@{*/ + +/** + * This function will initialize a memory pool object, normally which is used + * for static object. + * + * @param mp the memory pool object + * @param name the name of memory pool + * @param start the star address of memory pool + * @param size the total size of memory pool + * @param block_size the size for each block + * + * @return RT_EOK + */ +rt_err_t rt_mp_init(struct rt_mempool *mp, + const char *name, + void *start, + rt_size_t size, + rt_size_t block_size) +{ + rt_uint8_t *block_ptr; + register rt_size_t offset; + + /* parameter check */ + RT_ASSERT(mp != RT_NULL); + + /* initialize object */ + rt_object_init(&(mp->parent), RT_Object_Class_MemPool, name); + + /* initialize memory pool */ + mp->start_address = start; + mp->size = RT_ALIGN_DOWN(size, RT_ALIGN_SIZE); + + /* align the block size */ + block_size = RT_ALIGN(block_size, RT_ALIGN_SIZE); + mp->block_size = block_size; + + /* align to align size byte */ + mp->block_total_count = mp->size / (mp->block_size + sizeof(rt_uint8_t *)); + mp->block_free_count = mp->block_total_count; + + /* initialize suspended thread list */ + rt_list_init(&(mp->suspend_thread)); + mp->suspend_thread_count = 0; + + /* initialize free block list */ + block_ptr = (rt_uint8_t *)mp->start_address; + for (offset = 0; offset < mp->block_total_count; offset ++) + { + *(rt_uint8_t **)(block_ptr + offset * (block_size + sizeof(rt_uint8_t *))) = + (rt_uint8_t *)(block_ptr + (offset + 1) * (block_size + sizeof(rt_uint8_t *))); + } + + *(rt_uint8_t **)(block_ptr + (offset - 1) * (block_size + sizeof(rt_uint8_t *))) = + RT_NULL; + + mp->block_list = block_ptr; + + return RT_EOK; +} +RTM_EXPORT(rt_mp_init); + +/** + * This function will detach a memory pool from system object management. + * + * @param mp the memory pool object + * + * @return RT_EOK + */ +rt_err_t rt_mp_detach(struct rt_mempool *mp) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + + /* parameter check */ + RT_ASSERT(mp != RT_NULL); + RT_ASSERT(rt_object_get_type(&mp->parent) == RT_Object_Class_MemPool); + RT_ASSERT(rt_object_is_systemobject(&mp->parent)); + + /* wake up all suspended threads */ + while (!rt_list_isempty(&(mp->suspend_thread))) + { + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* get next suspend thread */ + thread = rt_list_entry(mp->suspend_thread.next, struct rt_thread, tlist); + /* set error code to RT_ERROR */ + thread->error = -RT_ERROR; + + /* + * resume thread + * In rt_thread_resume function, it will remove current thread from + * suspend list + */ + rt_thread_resume(thread); + + /* decrease suspended thread count */ + mp->suspend_thread_count --; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + } + + /* detach object */ + rt_object_detach(&(mp->parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mp_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a mempool object and allocate the memory pool from + * heap. + * + * @param name the name of memory pool + * @param block_count the count of blocks in memory pool + * @param block_size the size for each block + * + * @return the created mempool object + */ +rt_mp_t rt_mp_create(const char *name, + rt_size_t block_count, + rt_size_t block_size) +{ + rt_uint8_t *block_ptr; + struct rt_mempool *mp; + register rt_size_t offset; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* allocate object */ + mp = (struct rt_mempool *)rt_object_allocate(RT_Object_Class_MemPool, name); + /* allocate object failed */ + if (mp == RT_NULL) + return RT_NULL; + + /* initialize memory pool */ + block_size = RT_ALIGN(block_size, RT_ALIGN_SIZE); + mp->block_size = block_size; + mp->size = (block_size + sizeof(rt_uint8_t *)) * block_count; + + /* allocate memory */ + mp->start_address = rt_malloc((block_size + sizeof(rt_uint8_t *)) * + block_count); + if (mp->start_address == RT_NULL) + { + /* no memory, delete memory pool object */ + rt_object_delete(&(mp->parent)); + + return RT_NULL; + } + + mp->block_total_count = block_count; + mp->block_free_count = mp->block_total_count; + + /* initialize suspended thread list */ + rt_list_init(&(mp->suspend_thread)); + mp->suspend_thread_count = 0; + + /* initialize free block list */ + block_ptr = (rt_uint8_t *)mp->start_address; + for (offset = 0; offset < mp->block_total_count; offset ++) + { + *(rt_uint8_t **)(block_ptr + offset * (block_size + sizeof(rt_uint8_t *))) + = block_ptr + (offset + 1) * (block_size + sizeof(rt_uint8_t *)); + } + + *(rt_uint8_t **)(block_ptr + (offset - 1) * (block_size + sizeof(rt_uint8_t *))) + = RT_NULL; + + mp->block_list = block_ptr; + + return mp; +} +RTM_EXPORT(rt_mp_create); + +/** + * This function will delete a memory pool and release the object memory. + * + * @param mp the memory pool object + * + * @return RT_EOK + */ +rt_err_t rt_mp_delete(rt_mp_t mp) +{ + struct rt_thread *thread; + register rt_ubase_t temp; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* parameter check */ + RT_ASSERT(mp != RT_NULL); + RT_ASSERT(rt_object_get_type(&mp->parent) == RT_Object_Class_MemPool); + RT_ASSERT(rt_object_is_systemobject(&mp->parent) == RT_FALSE); + + /* wake up all suspended threads */ + while (!rt_list_isempty(&(mp->suspend_thread))) + { + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* get next suspend thread */ + thread = rt_list_entry(mp->suspend_thread.next, struct rt_thread, tlist); + /* set error code to RT_ERROR */ + thread->error = -RT_ERROR; + + /* + * resume thread + * In rt_thread_resume function, it will remove current thread from + * suspend list + */ + rt_thread_resume(thread); + + /* decrease suspended thread count */ + mp->suspend_thread_count --; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + } + + /* release allocated room */ + rt_free(mp->start_address); + + /* detach object */ + rt_object_delete(&(mp->parent)); + + return RT_EOK; +} +RTM_EXPORT(rt_mp_delete); +#endif + +/** + * This function will allocate a block from memory pool + * + * @param mp the memory pool object + * @param time the waiting time + * + * @return the allocated memory block or RT_NULL on allocated failed + */ +void *rt_mp_alloc(rt_mp_t mp, rt_int32_t time) +{ + rt_uint8_t *block_ptr; + register rt_base_t level; + struct rt_thread *thread; + rt_uint32_t before_sleep = 0; + + /* get current thread */ + thread = rt_thread_self(); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + while (mp->block_free_count == 0) + { + /* memory block is unavailable. */ + if (time == 0) + { + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_set_errno(-RT_ETIMEOUT); + + return RT_NULL; + } + + RT_DEBUG_NOT_IN_INTERRUPT; + + thread->error = RT_EOK; + + /* need suspend thread */ + rt_thread_suspend(thread); + rt_list_insert_after(&(mp->suspend_thread), &(thread->tlist)); + mp->suspend_thread_count++; + + if (time > 0) + { + /* get the start tick of timer */ + before_sleep = rt_tick_get(); + + /* init thread timer and start it */ + rt_timer_control(&(thread->thread_timer), + RT_TIMER_CTRL_SET_TIME, + &time); + rt_timer_start(&(thread->thread_timer)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* do a schedule */ + rt_schedule(); + + if (thread->error != RT_EOK) + return RT_NULL; + + if (time > 0) + { + time -= rt_tick_get() - before_sleep; + if (time < 0) + time = 0; + } + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + } + + /* memory block is available. decrease the free block counter */ + mp->block_free_count--; + + /* get block from block list */ + block_ptr = mp->block_list; + RT_ASSERT(block_ptr != RT_NULL); + + /* Setup the next free node. */ + mp->block_list = *(rt_uint8_t **)block_ptr; + + /* point to memory pool */ + *(rt_uint8_t **)block_ptr = (rt_uint8_t *)mp; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + RT_OBJECT_HOOK_CALL(rt_mp_alloc_hook, + (mp, (rt_uint8_t *)(block_ptr + sizeof(rt_uint8_t *)))); + + return (rt_uint8_t *)(block_ptr + sizeof(rt_uint8_t *)); +} +RTM_EXPORT(rt_mp_alloc); + +/** + * This function will release a memory block + * + * @param block the address of memory block to be released + */ +void rt_mp_free(void *block) +{ + rt_uint8_t **block_ptr; + struct rt_mempool *mp; + struct rt_thread *thread; + register rt_base_t level; + + /* get the control block of pool which the block belongs to */ + block_ptr = (rt_uint8_t **)((rt_uint8_t *)block - sizeof(rt_uint8_t *)); + mp = (struct rt_mempool *)*block_ptr; + + RT_OBJECT_HOOK_CALL(rt_mp_free_hook, (mp, block)); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* increase the free block count */ + mp->block_free_count ++; + + /* link the block into the block list */ + *block_ptr = mp->block_list; + mp->block_list = (rt_uint8_t *)block_ptr; + + if (mp->suspend_thread_count > 0) + { + /* get the suspended thread */ + thread = rt_list_entry(mp->suspend_thread.next, + struct rt_thread, + tlist); + + /* set error */ + thread->error = RT_EOK; + + /* resume thread */ + rt_thread_resume(thread); + + /* decrease suspended thread count */ + mp->suspend_thread_count --; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* do a schedule */ + rt_schedule(); + + return; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); +} +RTM_EXPORT(rt_mp_free); + +/**@}*/ + +#endif + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/object.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/object.c new file mode 100644 index 0000000000..e85737ce8f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/object.c @@ -0,0 +1,518 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-14 Bernard the first version + * 2006-04-21 Bernard change the scheduler lock to interrupt lock + * 2006-05-18 Bernard fix the object init bug + * 2006-08-03 Bernard add hook support + * 2007-01-28 Bernard rename RT_OBJECT_Class_Static to RT_Object_Class_Static + * 2010-10-26 yi.qiu add module support in rt_object_allocate and rt_object_free + * 2017-12-10 Bernard Add object_info enum. + * 2018-01-25 Bernard Fix the object find issue when enable MODULE. + */ + +#include +#include + +#ifdef RT_USING_MODULE +#include +#endif + +/* + * define object_info for the number of rt_object_container items. + */ +enum rt_object_info_type +{ + RT_Object_Info_Thread = 0, /**< The object is a thread. */ +#ifdef RT_USING_SEMAPHORE + RT_Object_Info_Semaphore, /**< The object is a semaphore. */ +#endif +#ifdef RT_USING_MUTEX + RT_Object_Info_Mutex, /**< The object is a mutex. */ +#endif +#ifdef RT_USING_EVENT + RT_Object_Info_Event, /**< The object is a event. */ +#endif +#ifdef RT_USING_MAILBOX + RT_Object_Info_MailBox, /**< The object is a mail box. */ +#endif +#ifdef RT_USING_MESSAGEQUEUE + RT_Object_Info_MessageQueue, /**< The object is a message queue. */ +#endif +#ifdef RT_USING_MEMHEAP + RT_Object_Info_MemHeap, /**< The object is a memory heap */ +#endif +#ifdef RT_USING_MEMPOOL + RT_Object_Info_MemPool, /**< The object is a memory pool. */ +#endif +#ifdef RT_USING_DEVICE + RT_Object_Info_Device, /**< The object is a device */ +#endif + RT_Object_Info_Timer, /**< The object is a timer. */ +#ifdef RT_USING_MODULE + RT_Object_Info_Module, /**< The object is a module. */ +#endif + RT_Object_Info_Unknown, /**< The object is unknown. */ +}; + +#define _OBJ_CONTAINER_LIST_INIT(c) \ + {&(rt_object_container[c].object_list), &(rt_object_container[c].object_list)} +static struct rt_object_information rt_object_container[RT_Object_Info_Unknown] = +{ + /* initialize object container - thread */ + {RT_Object_Class_Thread, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Thread), sizeof(struct rt_thread)}, +#ifdef RT_USING_SEMAPHORE + /* initialize object container - semaphore */ + {RT_Object_Class_Semaphore, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Semaphore), sizeof(struct rt_semaphore)}, +#endif +#ifdef RT_USING_MUTEX + /* initialize object container - mutex */ + {RT_Object_Class_Mutex, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Mutex), sizeof(struct rt_mutex)}, +#endif +#ifdef RT_USING_EVENT + /* initialize object container - event */ + {RT_Object_Class_Event, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Event), sizeof(struct rt_event)}, +#endif +#ifdef RT_USING_MAILBOX + /* initialize object container - mailbox */ + {RT_Object_Class_MailBox, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_MailBox), sizeof(struct rt_mailbox)}, +#endif +#ifdef RT_USING_MESSAGEQUEUE + /* initialize object container - message queue */ + {RT_Object_Class_MessageQueue, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_MessageQueue), sizeof(struct rt_messagequeue)}, +#endif +#ifdef RT_USING_MEMHEAP + /* initialize object container - memory heap */ + {RT_Object_Class_MemHeap, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_MemHeap), sizeof(struct rt_memheap)}, +#endif +#ifdef RT_USING_MEMPOOL + /* initialize object container - memory pool */ + {RT_Object_Class_MemPool, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_MemPool), sizeof(struct rt_mempool)}, +#endif +#ifdef RT_USING_DEVICE + /* initialize object container - device */ + {RT_Object_Class_Device, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Device), sizeof(struct rt_device)}, +#endif + /* initialize object container - timer */ + {RT_Object_Class_Timer, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Timer), sizeof(struct rt_timer)}, +#ifdef RT_USING_MODULE + /* initialize object container - module */ + {RT_Object_Class_Module, _OBJ_CONTAINER_LIST_INIT(RT_Object_Info_Module), sizeof(struct rt_dlmodule)}, +#endif +}; + +#ifdef RT_USING_HOOK +static void (*rt_object_attach_hook)(struct rt_object *object); +static void (*rt_object_detach_hook)(struct rt_object *object); +void (*rt_object_trytake_hook)(struct rt_object *object); +void (*rt_object_take_hook)(struct rt_object *object); +void (*rt_object_put_hook)(struct rt_object *object); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when object + * attaches to kernel object system. + * + * @param hook the hook function + */ +void rt_object_attach_sethook(void (*hook)(struct rt_object *object)) +{ + rt_object_attach_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when object + * detaches from kernel object system. + * + * @param hook the hook function + */ +void rt_object_detach_sethook(void (*hook)(struct rt_object *object)) +{ + rt_object_detach_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when object + * is taken from kernel object system. + * + * The object is taken means: + * semaphore - semaphore is taken by thread + * mutex - mutex is taken by thread + * event - event is received by thread + * mailbox - mail is received by thread + * message queue - message is received by thread + * + * @param hook the hook function + */ +void rt_object_trytake_sethook(void (*hook)(struct rt_object *object)) +{ + rt_object_trytake_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when object + * have been taken from kernel object system. + * + * The object have been taken means: + * semaphore - semaphore have been taken by thread + * mutex - mutex have been taken by thread + * event - event have been received by thread + * mailbox - mail have been received by thread + * message queue - message have been received by thread + * timer - timer is started + * + * @param hook the hook function + */ +void rt_object_take_sethook(void (*hook)(struct rt_object *object)) +{ + rt_object_take_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when object + * is put to kernel object system. + * + * @param hook the hook function + */ +void rt_object_put_sethook(void (*hook)(struct rt_object *object)) +{ + rt_object_put_hook = hook; +} + +/**@}*/ +#endif + +/** + * @ingroup SystemInit + * + * This function will initialize system object management. + * + * @deprecated since 0.3.0, this function does not need to be invoked + * in the system initialization. + */ +void rt_system_object_init(void) +{ +} + +/** + * @addtogroup KernelObject + */ + +/**@{*/ + +/** + * This function will return the specified type of object information. + * + * @param type the type of object + * @return the object type information or RT_NULL + */ +struct rt_object_information * +rt_object_get_information(enum rt_object_class_type type) +{ + int index; + + for (index = 0; index < RT_Object_Info_Unknown; index ++) + if (rt_object_container[index].type == type) return &rt_object_container[index]; + + return RT_NULL; +} +RTM_EXPORT(rt_object_get_information); + +/** + * This function will initialize an object and add it to object system + * management. + * + * @param object the specified object to be initialized. + * @param type the object type. + * @param name the object name. In system, the object's name must be unique. + */ +void rt_object_init(struct rt_object *object, + enum rt_object_class_type type, + const char *name) +{ + register rt_base_t temp; + struct rt_list_node *node = RT_NULL; + struct rt_object_information *information; +#ifdef RT_USING_MODULE + struct rt_dlmodule *module = dlmodule_self(); +#endif + + /* get object information */ + information = rt_object_get_information(type); + RT_ASSERT(information != RT_NULL); + + /* check object type to avoid re-initialization */ + + /* enter critical */ + rt_enter_critical(); + /* try to find object */ + for (node = information->object_list.next; + node != &(information->object_list); + node = node->next) + { + struct rt_object *obj; + + obj = rt_list_entry(node, struct rt_object, list); + RT_ASSERT(obj != object); + } + /* leave critical */ + rt_exit_critical(); + + /* initialize object's parameters */ + /* set object type to static */ + object->type = type | RT_Object_Class_Static; + /* copy name */ + rt_strncpy(object->name, name, RT_NAME_MAX); + + RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object)); + + /* lock interrupt */ + temp = rt_hw_interrupt_disable(); + +#ifdef RT_USING_MODULE + if (module) + { + rt_list_insert_after(&(module->object_list), &(object->list)); + object->module_id = (void *)module; + } + else +#endif + { + /* insert object into information object list */ + rt_list_insert_after(&(information->object_list), &(object->list)); + } + + /* unlock interrupt */ + rt_hw_interrupt_enable(temp); +} + +/** + * This function will detach a static object from object system, + * and the memory of static object is not freed. + * + * @param object the specified object to be detached. + */ +void rt_object_detach(rt_object_t object) +{ + register rt_base_t temp; + + /* object check */ + RT_ASSERT(object != RT_NULL); + + RT_OBJECT_HOOK_CALL(rt_object_detach_hook, (object)); + + /* reset object type */ + object->type = 0; + + /* lock interrupt */ + temp = rt_hw_interrupt_disable(); + + /* remove from old list */ + rt_list_remove(&(object->list)); + + /* unlock interrupt */ + rt_hw_interrupt_enable(temp); +} + +#ifdef RT_USING_HEAP +/** + * This function will allocate an object from object system + * + * @param type the type of object + * @param name the object name. In system, the object's name must be unique. + * + * @return object + */ +rt_object_t rt_object_allocate(enum rt_object_class_type type, const char *name) +{ + struct rt_object *object; + register rt_base_t temp; + struct rt_object_information *information; +#ifdef RT_USING_MODULE + struct rt_dlmodule *module = dlmodule_self(); +#endif + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* get object information */ + information = rt_object_get_information(type); + RT_ASSERT(information != RT_NULL); + + object = (struct rt_object *)RT_KERNEL_MALLOC(information->object_size); + if (object == RT_NULL) + { + /* no memory can be allocated */ + return RT_NULL; + } + + /* clean memory data of object */ + rt_memset(object, 0x0, information->object_size); + + /* initialize object's parameters */ + + /* set object type */ + object->type = type; + + /* set object flag */ + object->flag = 0; + + /* copy name */ + rt_strncpy(object->name, name, RT_NAME_MAX); + + RT_OBJECT_HOOK_CALL(rt_object_attach_hook, (object)); + + /* lock interrupt */ + temp = rt_hw_interrupt_disable(); + +#ifdef RT_USING_MODULE + if (module) + { + rt_list_insert_after(&(module->object_list), &(object->list)); + object->module_id = (void *)module; + } + else +#endif + { + /* insert object into information object list */ + rt_list_insert_after(&(information->object_list), &(object->list)); + } + + /* unlock interrupt */ + rt_hw_interrupt_enable(temp); + + /* return object */ + return object; +} + +/** + * This function will delete an object and release object memory. + * + * @param object the specified object to be deleted. + */ +void rt_object_delete(rt_object_t object) +{ + register rt_base_t temp; + + /* object check */ + RT_ASSERT(object != RT_NULL); + RT_ASSERT(!(object->type & RT_Object_Class_Static)); + + RT_OBJECT_HOOK_CALL(rt_object_detach_hook, (object)); + + /* reset object type */ + object->type = 0; + + /* lock interrupt */ + temp = rt_hw_interrupt_disable(); + + /* remove from old list */ + rt_list_remove(&(object->list)); + + /* unlock interrupt */ + rt_hw_interrupt_enable(temp); + + /* free the memory of object */ + RT_KERNEL_FREE(object); +} +#endif + +/** + * This function will judge the object is system object or not. + * Normally, the system object is a static object and the type + * of object set to RT_Object_Class_Static. + * + * @param object the specified object to be judged. + * + * @return RT_TRUE if a system object, RT_FALSE for others. + */ +rt_bool_t rt_object_is_systemobject(rt_object_t object) +{ + /* object check */ + RT_ASSERT(object != RT_NULL); + + if (object->type & RT_Object_Class_Static) + return RT_TRUE; + + return RT_FALSE; +} + +/** + * This function will return the type of object without + * RT_Object_Class_Static flag. + * + * @param object the specified object to be get type. + * + * @return the type of object. + */ +rt_uint8_t rt_object_get_type(rt_object_t object) +{ + /* object check */ + RT_ASSERT(object != RT_NULL); + + return object->type & ~RT_Object_Class_Static; +} + +/** + * This function will find specified name object from object + * container. + * + * @param name the specified name of object. + * @param type the type of object + * + * @return the found object or RT_NULL if there is no this object + * in object container. + * + * @note this function shall not be invoked in interrupt status. + */ +rt_object_t rt_object_find(const char *name, rt_uint8_t type) +{ + struct rt_object *object = RT_NULL; + struct rt_list_node *node = RT_NULL; + struct rt_object_information *information = RT_NULL; + + /* parameter check */ + if ((name == RT_NULL) || (type > RT_Object_Class_Unknown)) + return RT_NULL; + + /* which is invoke in interrupt status */ + RT_DEBUG_NOT_IN_INTERRUPT; + + /* enter critical */ + rt_enter_critical(); + + /* try to find object */ + if (information == RT_NULL) + { + information = rt_object_get_information((enum rt_object_class_type)type); + RT_ASSERT(information != RT_NULL); + } + for (node = information->object_list.next; + node != &(information->object_list); + node = node->next) + { + object = rt_list_entry(node, struct rt_object, list); + if (rt_strncmp(object->name, name, RT_NAME_MAX) == 0) + { + /* leave critical */ + rt_exit_critical(); + + return object; + } + } + + /* leave critical */ + rt_exit_critical(); + + return RT_NULL; +} + +/**@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/scheduler.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/scheduler.c new file mode 100644 index 0000000000..513c5a70eb --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/scheduler.c @@ -0,0 +1,437 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-17 Bernard the first version + * 2006-04-28 Bernard fix the scheduler algorthm + * 2006-04-30 Bernard add SCHEDULER_DEBUG + * 2006-05-27 Bernard fix the scheduler algorthm for same priority + * thread schedule + * 2006-06-04 Bernard rewrite the scheduler algorithm + * 2006-08-03 Bernard add hook support + * 2006-09-05 Bernard add 32 priority level support + * 2006-09-24 Bernard add rt_system_scheduler_start function + * 2009-09-16 Bernard fix _rt_scheduler_stack_check + * 2010-04-11 yi.qiu add module feature + * 2010-07-13 Bernard fix the maximal number of rt_scheduler_lock_nest + * issue found by kuronca + * 2010-12-13 Bernard add defunct list initialization even if not use heap. + * 2011-05-10 Bernard clean scheduler debug log. + * 2013-12-21 Grissiom add rt_critical_level + */ + +#include +#include + +static rt_int16_t rt_scheduler_lock_nest; +extern volatile rt_uint8_t rt_interrupt_nest; + +rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; +struct rt_thread *rt_current_thread; + +rt_uint8_t rt_current_priority; + +#if RT_THREAD_PRIORITY_MAX > 32 +/* Maximum priority level, 256 */ +rt_uint32_t rt_thread_ready_priority_group; +rt_uint8_t rt_thread_ready_table[32]; +#else +/* Maximum priority level, 32 */ +rt_uint32_t rt_thread_ready_priority_group; +#endif + +rt_list_t rt_thread_defunct; + +#ifdef RT_USING_HOOK +static void (*rt_scheduler_hook)(struct rt_thread *from, struct rt_thread *to); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when thread + * switch happens. + * + * @param hook the hook function + */ +void +rt_scheduler_sethook(void (*hook)(struct rt_thread *from, struct rt_thread *to)) +{ + rt_scheduler_hook = hook; +} + +/**@}*/ +#endif + +#ifdef RT_USING_OVERFLOW_CHECK +static void _rt_scheduler_stack_check(struct rt_thread *thread) +{ + RT_ASSERT(thread != RT_NULL); + +#if defined(ARCH_CPU_STACK_GROWS_UPWARD) + if (*((rt_uint8_t *)((rt_ubase_t)thread->stack_addr + thread->stack_size - 1)) != '#' || +#else + if (*((rt_uint8_t *)thread->stack_addr) != '#' || +#endif + (rt_uint32_t)thread->sp <= (rt_uint32_t)thread->stack_addr || + (rt_uint32_t)thread->sp > + (rt_uint32_t)thread->stack_addr + (rt_uint32_t)thread->stack_size) + { + rt_uint32_t level; + + rt_kprintf("thread:%s stack overflow\n", thread->name); +#ifdef RT_USING_FINSH + { + extern long list_thread(void); + list_thread(); + } +#endif + level = rt_hw_interrupt_disable(); + while (level); + } +#if defined(ARCH_CPU_STACK_GROWS_UPWARD) + else if ((rt_uint32_t)thread->sp > ((rt_uint32_t)thread->stack_addr + thread->stack_size)) + { + rt_kprintf("warning: %s stack is close to the top of stack address.\n", + thread->name); + } +#else + else if ((rt_uint32_t)thread->sp <= ((rt_uint32_t)thread->stack_addr + 32)) + { + rt_kprintf("warning: %s stack is close to the bottom of stack address.\n", + thread->name); + } +#endif +} +#endif + +/** + * @ingroup SystemInit + * This function will initialize the system scheduler + */ +void rt_system_scheduler_init(void) +{ + register rt_base_t offset; + + rt_scheduler_lock_nest = 0; + + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("start scheduler: max priority 0x%02x\n", + RT_THREAD_PRIORITY_MAX)); + + for (offset = 0; offset < RT_THREAD_PRIORITY_MAX; offset ++) + { + rt_list_init(&rt_thread_priority_table[offset]); + } + + rt_current_priority = RT_THREAD_PRIORITY_MAX - 1; + rt_current_thread = RT_NULL; + + /* initialize ready priority group */ + rt_thread_ready_priority_group = 0; + +#if RT_THREAD_PRIORITY_MAX > 32 + /* initialize ready table */ + rt_memset(rt_thread_ready_table, 0, sizeof(rt_thread_ready_table)); +#endif + + /* initialize thread defunct */ + rt_list_init(&rt_thread_defunct); +} + +/** + * @ingroup SystemInit + * This function will startup scheduler. It will select one thread + * with the highest priority level, then switch to it. + */ +void rt_system_scheduler_start(void) +{ + register struct rt_thread *to_thread; + register rt_ubase_t highest_ready_priority; + +#if RT_THREAD_PRIORITY_MAX > 32 + register rt_ubase_t number; + + number = __rt_ffs(rt_thread_ready_priority_group) - 1; + highest_ready_priority = (number << 3) + __rt_ffs(rt_thread_ready_table[number]) - 1; +#else + highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1; +#endif + + /* get switch to thread */ + to_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next, + struct rt_thread, + tlist); + + rt_current_thread = to_thread; + + /* switch to new thread */ + rt_hw_context_switch_to((rt_uint32_t)&to_thread->sp); + + /* never come back */ +} + +/** + * @addtogroup Thread + */ + +/**@{*/ + +/** + * This function will perform one schedule. It will select one thread + * with the highest priority level, then switch to it. + */ +void rt_schedule(void) +{ + rt_base_t level; + struct rt_thread *to_thread; + struct rt_thread *from_thread; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* check the scheduler is enabled or not */ + if (rt_scheduler_lock_nest == 0) + { + register rt_ubase_t highest_ready_priority; + +#if RT_THREAD_PRIORITY_MAX <= 32 + highest_ready_priority = __rt_ffs(rt_thread_ready_priority_group) - 1; +#else + register rt_ubase_t number; + + number = __rt_ffs(rt_thread_ready_priority_group) - 1; + highest_ready_priority = (number << 3) + __rt_ffs(rt_thread_ready_table[number]) - 1; +#endif + + /* get switch to thread */ + to_thread = rt_list_entry(rt_thread_priority_table[highest_ready_priority].next, + struct rt_thread, + tlist); + + /* if the destination thread is not the same as current thread */ + if (to_thread != rt_current_thread) + { + rt_current_priority = (rt_uint8_t)highest_ready_priority; + from_thread = rt_current_thread; + rt_current_thread = to_thread; + + RT_OBJECT_HOOK_CALL(rt_scheduler_hook, (from_thread, to_thread)); + + /* switch to new thread */ + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, + ("[%d]switch to priority#%d " + "thread:%.*s(sp:0x%p), " + "from thread:%.*s(sp: 0x%p)\n", + rt_interrupt_nest, highest_ready_priority, + RT_NAME_MAX, to_thread->name, to_thread->sp, + RT_NAME_MAX, from_thread->name, from_thread->sp)); + +#ifdef RT_USING_OVERFLOW_CHECK + _rt_scheduler_stack_check(to_thread); +#endif + + if (rt_interrupt_nest == 0) + { + rt_hw_context_switch((rt_uint32_t)&from_thread->sp, + (rt_uint32_t)&to_thread->sp); + +#ifdef RT_USING_SIGNALS + if (rt_current_thread->stat & RT_THREAD_STAT_SIGNAL_PENDING) + { + extern void rt_thread_handle_sig(rt_bool_t clean_state); + + rt_current_thread->stat &= ~RT_THREAD_STAT_SIGNAL_PENDING; + + rt_hw_interrupt_enable(level); + + /* check signal status */ + rt_thread_handle_sig(RT_TRUE); + } + else +#endif + { + /* enable interrupt */ + rt_hw_interrupt_enable(level); + } + + return ; + } + else + { + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("switch in interrupt\n")); + + rt_hw_context_switch_interrupt((rt_uint32_t)&from_thread->sp, + (rt_uint32_t)&to_thread->sp); + } + } + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); +} + +/* + * This function will insert a thread to system ready queue. The state of + * thread will be set as READY and remove from suspend queue. + * + * @param thread the thread to be inserted + * @note Please do not invoke this function in user application. + */ +void rt_schedule_insert_thread(struct rt_thread *thread) +{ + register rt_base_t temp; + + RT_ASSERT(thread != RT_NULL); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* change stat */ + thread->stat = RT_THREAD_READY | (thread->stat & ~RT_THREAD_STAT_MASK); + + /* insert thread to ready list */ + rt_list_insert_before(&(rt_thread_priority_table[thread->current_priority]), + &(thread->tlist)); + + /* set priority mask */ +#if RT_THREAD_PRIORITY_MAX <= 32 + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("insert thread[%.*s], the priority: %d\n", + RT_NAME_MAX, thread->name, thread->current_priority)); +#else + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, + ("insert thread[%.*s], the priority: %d 0x%x %d\n", + RT_NAME_MAX, + thread->name, + thread->number, + thread->number_mask, + thread->high_mask)); +#endif + +#if RT_THREAD_PRIORITY_MAX > 32 + rt_thread_ready_table[thread->number] |= thread->high_mask; +#endif + rt_thread_ready_priority_group |= thread->number_mask; + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); +} + +/* + * This function will remove a thread from system ready queue. + * + * @param thread the thread to be removed + * + * @note Please do not invoke this function in user application. + */ +void rt_schedule_remove_thread(struct rt_thread *thread) +{ + register rt_base_t temp; + + RT_ASSERT(thread != RT_NULL); + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + +#if RT_THREAD_PRIORITY_MAX <= 32 + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, ("remove thread[%.*s], the priority: %d\n", + RT_NAME_MAX, thread->name, + thread->current_priority)); +#else + RT_DEBUG_LOG(RT_DEBUG_SCHEDULER, + ("remove thread[%.*s], the priority: %d 0x%x %d\n", + RT_NAME_MAX, + thread->name, + thread->number, + thread->number_mask, + thread->high_mask)); +#endif + + /* remove thread from ready list */ + rt_list_remove(&(thread->tlist)); + if (rt_list_isempty(&(rt_thread_priority_table[thread->current_priority]))) + { +#if RT_THREAD_PRIORITY_MAX > 32 + rt_thread_ready_table[thread->number] &= ~thread->high_mask; + if (rt_thread_ready_table[thread->number] == 0) + { + rt_thread_ready_priority_group &= ~thread->number_mask; + } +#else + rt_thread_ready_priority_group &= ~thread->number_mask; +#endif + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); +} + +/** + * This function will lock the thread scheduler. + */ +void rt_enter_critical(void) +{ + register rt_base_t level; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* + * the maximal number of nest is RT_UINT16_MAX, which is big + * enough and does not check here + */ + rt_scheduler_lock_nest ++; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); +} +RTM_EXPORT(rt_enter_critical); + +/** + * This function will unlock the thread scheduler. + */ +void rt_exit_critical(void) +{ + register rt_base_t level; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + rt_scheduler_lock_nest --; + if (rt_scheduler_lock_nest <= 0) + { + rt_scheduler_lock_nest = 0; + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + if (rt_current_thread) + { + /* if scheduler is started, do a schedule */ + rt_schedule(); + } + } + else + { + /* enable interrupt */ + rt_hw_interrupt_enable(level); + } +} +RTM_EXPORT(rt_exit_critical); + +/** + * Get the scheduler lock level + * + * @return the level of the scheduler lock. 0 means unlocked. + */ +rt_uint16_t rt_critical_level(void) +{ + return rt_scheduler_lock_nest; +} +RTM_EXPORT(rt_critical_level); +/**@}*/ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/slab.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/slab.c new file mode 100644 index 0000000000..f4806ddb60 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/slab.c @@ -0,0 +1,937 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + */ + +/* + * File : slab.c + * + * Change Logs: + * Date Author Notes + * 2008-07-12 Bernard the first version + * 2010-07-13 Bernard fix RT_ALIGN issue found by kuronca + * 2010-10-23 yi.qiu add module memory allocator + * 2010-12-18 yi.qiu fix zone release bug + */ + +/* + * KERN_SLABALLOC.C - Kernel SLAB memory allocator + * + * Copyright (c) 2003,2004 The DragonFly Project. All rights reserved. + * + * This code is derived from software contributed to The DragonFly Project + * by Matthew Dillon + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of The DragonFly Project 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 HOLDERS 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 +#include + +#define RT_MEM_STATS + +#if defined (RT_USING_HEAP) && defined (RT_USING_SLAB) +/* some statistical variable */ +#ifdef RT_MEM_STATS +static rt_size_t used_mem, max_mem; +#endif + +#ifdef RT_USING_HOOK +static void (*rt_malloc_hook)(void *ptr, rt_size_t size); +static void (*rt_free_hook)(void *ptr); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when a memory + * block is allocated from heap memory. + * + * @param hook the hook function + */ +void rt_malloc_sethook(void (*hook)(void *ptr, rt_size_t size)) +{ + rt_malloc_hook = hook; +} +RTM_EXPORT(rt_malloc_sethook); + +/** + * This function will set a hook function, which will be invoked when a memory + * block is released to heap memory. + * + * @param hook the hook function + */ +void rt_free_sethook(void (*hook)(void *ptr)) +{ + rt_free_hook = hook; +} +RTM_EXPORT(rt_free_sethook); + +/**@}*/ + +#endif + +/* + * slab allocator implementation + * + * A slab allocator reserves a ZONE for each chunk size, then lays the + * chunks out in an array within the zone. Allocation and deallocation + * is nearly instantanious, and fragmentation/overhead losses are limited + * to a fixed worst-case amount. + * + * The downside of this slab implementation is in the chunk size + * multiplied by the number of zones. ~80 zones * 128K = 10MB of VM per cpu. + * In a kernel implementation all this memory will be physical so + * the zone size is adjusted downward on machines with less physical + * memory. The upside is that overhead is bounded... this is the *worst* + * case overhead. + * + * Slab management is done on a per-cpu basis and no locking or mutexes + * are required, only a critical section. When one cpu frees memory + * belonging to another cpu's slab manager an asynchronous IPI message + * will be queued to execute the operation. In addition, both the + * high level slab allocator and the low level zone allocator optimize + * M_ZERO requests, and the slab allocator does not have to pre initialize + * the linked list of chunks. + * + * XXX Balancing is needed between cpus. Balance will be handled through + * asynchronous IPIs primarily by reassigning the z_Cpu ownership of chunks. + * + * XXX If we have to allocate a new zone and M_USE_RESERVE is set, use of + * the new zone should be restricted to M_USE_RESERVE requests only. + * + * Alloc Size Chunking Number of zones + * 0-127 8 16 + * 128-255 16 8 + * 256-511 32 8 + * 512-1023 64 8 + * 1024-2047 128 8 + * 2048-4095 256 8 + * 4096-8191 512 8 + * 8192-16383 1024 8 + * 16384-32767 2048 8 + * (if RT_MM_PAGE_SIZE is 4K the maximum zone allocation is 16383) + * + * Allocations >= zone_limit go directly to kmem. + * + * API REQUIREMENTS AND SIDE EFFECTS + * + * To operate as a drop-in replacement to the FreeBSD-4.x malloc() we + * have remained compatible with the following API requirements: + * + * + small power-of-2 sized allocations are power-of-2 aligned (kern_tty) + * + all power-of-2 sized allocations are power-of-2 aligned (twe) + * + malloc(0) is allowed and returns non-RT_NULL (ahc driver) + * + ability to allocate arbitrarily large chunks of memory + */ + +/* + * Chunk structure for free elements + */ +typedef struct slab_chunk +{ + struct slab_chunk *c_next; +} slab_chunk; + +/* + * The IN-BAND zone header is placed at the beginning of each zone. + */ +typedef struct slab_zone +{ + rt_int32_t z_magic; /* magic number for sanity check */ + rt_int32_t z_nfree; /* total free chunks / ualloc space in zone */ + rt_int32_t z_nmax; /* maximum free chunks */ + + struct slab_zone *z_next; /* zoneary[] link if z_nfree non-zero */ + rt_uint8_t *z_baseptr; /* pointer to start of chunk array */ + + rt_int32_t z_uindex; /* current initial allocation index */ + rt_int32_t z_chunksize; /* chunk size for validation */ + + rt_int32_t z_zoneindex; /* zone index */ + slab_chunk *z_freechunk; /* free chunk list */ +} slab_zone; + +#define ZALLOC_SLAB_MAGIC 0x51ab51ab +#define ZALLOC_ZONE_LIMIT (16 * 1024) /* max slab-managed alloc */ +#define ZALLOC_MIN_ZONE_SIZE (32 * 1024) /* minimum zone size */ +#define ZALLOC_MAX_ZONE_SIZE (128 * 1024) /* maximum zone size */ +#define NZONES 72 /* number of zones */ +#define ZONE_RELEASE_THRESH 2 /* threshold number of zones */ + +static slab_zone *zone_array[NZONES]; /* linked list of zones NFree > 0 */ +static slab_zone *zone_free; /* whole zones that have become free */ + +static int zone_free_cnt; +static int zone_size; +static int zone_limit; +static int zone_page_cnt; + +/* + * Misc constants. Note that allocations that are exact multiples of + * RT_MM_PAGE_SIZE, or exceed the zone limit, fall through to the kmem module. + */ +#define MIN_CHUNK_SIZE 8 /* in bytes */ +#define MIN_CHUNK_MASK (MIN_CHUNK_SIZE - 1) + +/* + * Array of descriptors that describe the contents of each page + */ +#define PAGE_TYPE_FREE 0x00 +#define PAGE_TYPE_SMALL 0x01 +#define PAGE_TYPE_LARGE 0x02 +struct memusage +{ + rt_uint32_t type: 2 ; /* page type */ + rt_uint32_t size: 30; /* pages allocated or offset from zone */ +}; +static struct memusage *memusage = RT_NULL; +#define btokup(addr) \ + (&memusage[((rt_uint32_t)(addr) - heap_start) >> RT_MM_PAGE_BITS]) + +static rt_uint32_t heap_start, heap_end; + +/* page allocator */ +struct rt_page_head +{ + struct rt_page_head *next; /* next valid page */ + rt_size_t page; /* number of page */ + + /* dummy */ + char dummy[RT_MM_PAGE_SIZE - (sizeof(struct rt_page_head *) + sizeof(rt_size_t))]; +}; +static struct rt_page_head *rt_page_list; +static struct rt_semaphore heap_sem; + +void *rt_page_alloc(rt_size_t npages) +{ + struct rt_page_head *b, *n; + struct rt_page_head **prev; + + if (npages == 0) + return RT_NULL; + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + for (prev = &rt_page_list; (b = *prev) != RT_NULL; prev = &(b->next)) + { + if (b->page > npages) + { + /* splite pages */ + n = b + npages; + n->next = b->next; + n->page = b->page - npages; + *prev = n; + break; + } + + if (b->page == npages) + { + /* this node fit, remove this node */ + *prev = b->next; + break; + } + } + + /* unlock heap */ + rt_sem_release(&heap_sem); + + return b; +} + +void rt_page_free(void *addr, rt_size_t npages) +{ + struct rt_page_head *b, *n; + struct rt_page_head **prev; + + RT_ASSERT(addr != RT_NULL); + RT_ASSERT((rt_uint32_t)addr % RT_MM_PAGE_SIZE == 0); + RT_ASSERT(npages != 0); + + n = (struct rt_page_head *)addr; + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + for (prev = &rt_page_list; (b = *prev) != RT_NULL; prev = &(b->next)) + { + RT_ASSERT(b->page > 0); + RT_ASSERT(b > n || b + b->page <= n); + + if (b + b->page == n) + { + if (b + (b->page += npages) == b->next) + { + b->page += b->next->page; + b->next = b->next->next; + } + + goto _return; + } + + if (b == n + npages) + { + n->page = b->page + npages; + n->next = b->next; + *prev = n; + + goto _return; + } + + if (b > n + npages) + break; + } + + n->page = npages; + n->next = b; + *prev = n; + +_return: + /* unlock heap */ + rt_sem_release(&heap_sem); +} + +/* + * Initialize the page allocator + */ +static void rt_page_init(void *addr, rt_size_t npages) +{ + RT_ASSERT(addr != RT_NULL); + RT_ASSERT(npages != 0); + + rt_page_list = RT_NULL; + rt_page_free(addr, npages); +} + +/** + * @ingroup SystemInit + * + * This function will init system heap + * + * @param begin_addr the beginning address of system page + * @param end_addr the end address of system page + */ +void rt_system_heap_init(void *begin_addr, void *end_addr) +{ + rt_uint32_t limsize, npages; + + RT_DEBUG_NOT_IN_INTERRUPT; + + /* align begin and end addr to page */ + heap_start = RT_ALIGN((rt_uint32_t)begin_addr, RT_MM_PAGE_SIZE); + heap_end = RT_ALIGN_DOWN((rt_uint32_t)end_addr, RT_MM_PAGE_SIZE); + + if (heap_start >= heap_end) + { + rt_kprintf("rt_system_heap_init, wrong address[0x%x - 0x%x]\n", + (rt_uint32_t)begin_addr, (rt_uint32_t)end_addr); + + return; + } + + limsize = heap_end - heap_start; + npages = limsize / RT_MM_PAGE_SIZE; + + /* initialize heap semaphore */ + rt_sem_init(&heap_sem, "heap", 1, RT_IPC_FLAG_FIFO); + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("heap[0x%x - 0x%x], size 0x%x, 0x%x pages\n", + heap_start, heap_end, limsize, npages)); + + /* init pages */ + rt_page_init((void *)heap_start, npages); + + /* calculate zone size */ + zone_size = ZALLOC_MIN_ZONE_SIZE; + while (zone_size < ZALLOC_MAX_ZONE_SIZE && (zone_size << 1) < (limsize / 1024)) + zone_size <<= 1; + + zone_limit = zone_size / 4; + if (zone_limit > ZALLOC_ZONE_LIMIT) + zone_limit = ZALLOC_ZONE_LIMIT; + + zone_page_cnt = zone_size / RT_MM_PAGE_SIZE; + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("zone size 0x%x, zone page count 0x%x\n", + zone_size, zone_page_cnt)); + + /* allocate memusage array */ + limsize = npages * sizeof(struct memusage); + limsize = RT_ALIGN(limsize, RT_MM_PAGE_SIZE); + memusage = rt_page_alloc(limsize / RT_MM_PAGE_SIZE); + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("memusage 0x%x, size 0x%x\n", + (rt_uint32_t)memusage, limsize)); +} + +/* + * Calculate the zone index for the allocation request size and set the + * allocation request size to that particular zone's chunk size. + */ +rt_inline int zoneindex(rt_size_t *bytes) +{ + /* unsigned for shift opt */ + rt_uint32_t n = (rt_uint32_t)(*bytes); + + if (n < 128) + { + *bytes = n = (n + 7) & ~7; + + /* 8 byte chunks, 16 zones */ + return (n / 8 - 1); + } + if (n < 256) + { + *bytes = n = (n + 15) & ~15; + + return (n / 16 + 7); + } + if (n < 8192) + { + if (n < 512) + { + *bytes = n = (n + 31) & ~31; + + return (n / 32 + 15); + } + if (n < 1024) + { + *bytes = n = (n + 63) & ~63; + + return (n / 64 + 23); + } + if (n < 2048) + { + *bytes = n = (n + 127) & ~127; + + return (n / 128 + 31); + } + if (n < 4096) + { + *bytes = n = (n + 255) & ~255; + + return (n / 256 + 39); + } + *bytes = n = (n + 511) & ~511; + + return (n / 512 + 47); + } + if (n < 16384) + { + *bytes = n = (n + 1023) & ~1023; + + return (n / 1024 + 55); + } + + rt_kprintf("Unexpected byte count %d", n); + + return 0; +} + +/** + * @addtogroup MM + */ + +/**@{*/ + +/** + * This function will allocate a block from system heap memory. + * - If the nbytes is less than zero, + * or + * - If there is no nbytes sized memory valid in system, + * the RT_NULL is returned. + * + * @param size the size of memory to be allocated + * + * @return the allocated memory + */ +void *rt_malloc(rt_size_t size) +{ + slab_zone *z; + rt_int32_t zi; + slab_chunk *chunk; + struct memusage *kup; + + /* zero size, return RT_NULL */ + if (size == 0) + return RT_NULL; + + /* + * Handle large allocations directly. There should not be very many of + * these so performance is not a big issue. + */ + if (size >= zone_limit) + { + size = RT_ALIGN(size, RT_MM_PAGE_SIZE); + + chunk = rt_page_alloc(size >> RT_MM_PAGE_BITS); + if (chunk == RT_NULL) + return RT_NULL; + + /* set kup */ + kup = btokup(chunk); + kup->type = PAGE_TYPE_LARGE; + kup->size = size >> RT_MM_PAGE_BITS; + + RT_DEBUG_LOG(RT_DEBUG_SLAB, + ("malloc a large memory 0x%x, page cnt %d, kup %d\n", + size, + size >> RT_MM_PAGE_BITS, + ((rt_uint32_t)chunk - heap_start) >> RT_MM_PAGE_BITS)); + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + +#ifdef RT_MEM_STATS + used_mem += size; + if (used_mem > max_mem) + max_mem = used_mem; +#endif + goto done; + } + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + /* + * Attempt to allocate out of an existing zone. First try the free list, + * then allocate out of unallocated space. If we find a good zone move + * it to the head of the list so later allocations find it quickly + * (we might have thousands of zones in the list). + * + * Note: zoneindex() will panic of size is too large. + */ + zi = zoneindex(&size); + RT_ASSERT(zi < NZONES); + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("try to malloc 0x%x on zone: %d\n", size, zi)); + + if ((z = zone_array[zi]) != RT_NULL) + { + RT_ASSERT(z->z_nfree > 0); + + /* Remove us from the zone_array[] when we become empty */ + if (--z->z_nfree == 0) + { + zone_array[zi] = z->z_next; + z->z_next = RT_NULL; + } + + /* + * No chunks are available but nfree said we had some memory, so + * it must be available in the never-before-used-memory area + * governed by uindex. The consequences are very serious if our zone + * got corrupted so we use an explicit rt_kprintf rather then a KASSERT. + */ + if (z->z_uindex + 1 != z->z_nmax) + { + z->z_uindex = z->z_uindex + 1; + chunk = (slab_chunk *)(z->z_baseptr + z->z_uindex * size); + } + else + { + /* find on free chunk list */ + chunk = z->z_freechunk; + + /* remove this chunk from list */ + z->z_freechunk = z->z_freechunk->c_next; + } + +#ifdef RT_MEM_STATS + used_mem += z->z_chunksize; + if (used_mem > max_mem) + max_mem = used_mem; +#endif + + goto done; + } + + /* + * If all zones are exhausted we need to allocate a new zone for this + * index. + * + * At least one subsystem, the tty code (see CROUND) expects power-of-2 + * allocations to be power-of-2 aligned. We maintain compatibility by + * adjusting the base offset below. + */ + { + rt_int32_t off; + + if ((z = zone_free) != RT_NULL) + { + /* remove zone from free zone list */ + zone_free = z->z_next; + -- zone_free_cnt; + } + else + { + /* unlock heap, since page allocator will think about lock */ + rt_sem_release(&heap_sem); + + /* allocate a zone from page */ + z = rt_page_alloc(zone_size / RT_MM_PAGE_SIZE); + if (z == RT_NULL) + { + chunk = RT_NULL; + goto __exit; + } + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("alloc a new zone: 0x%x\n", + (rt_uint32_t)z)); + + /* set message usage */ + for (off = 0, kup = btokup(z); off < zone_page_cnt; off ++) + { + kup->type = PAGE_TYPE_SMALL; + kup->size = off; + + kup ++; + } + } + + /* clear to zero */ + rt_memset(z, 0, sizeof(slab_zone)); + + /* offset of slab zone struct in zone */ + off = sizeof(slab_zone); + + /* + * Guarentee power-of-2 alignment for power-of-2-sized chunks. + * Otherwise just 8-byte align the data. + */ + if ((size | (size - 1)) + 1 == (size << 1)) + off = (off + size - 1) & ~(size - 1); + else + off = (off + MIN_CHUNK_MASK) & ~MIN_CHUNK_MASK; + + z->z_magic = ZALLOC_SLAB_MAGIC; + z->z_zoneindex = zi; + z->z_nmax = (zone_size - off) / size; + z->z_nfree = z->z_nmax - 1; + z->z_baseptr = (rt_uint8_t *)z + off; + z->z_uindex = 0; + z->z_chunksize = size; + + chunk = (slab_chunk *)(z->z_baseptr + z->z_uindex * size); + + /* link to zone array */ + z->z_next = zone_array[zi]; + zone_array[zi] = z; + +#ifdef RT_MEM_STATS + used_mem += z->z_chunksize; + if (used_mem > max_mem) + max_mem = used_mem; +#endif + } + +done: + rt_sem_release(&heap_sem); + RT_OBJECT_HOOK_CALL(rt_malloc_hook, ((char *)chunk, size)); + +__exit: + return chunk; +} +RTM_EXPORT(rt_malloc); + +/** + * This function will change the size of previously allocated memory block. + * + * @param ptr the previously allocated memory block + * @param size the new size of memory block + * + * @return the allocated memory + */ +void *rt_realloc(void *ptr, rt_size_t size) +{ + void *nptr; + slab_zone *z; + struct memusage *kup; + + if (ptr == RT_NULL) + return rt_malloc(size); + if (size == 0) + { + rt_free(ptr); + + return RT_NULL; + } + + /* + * Get the original allocation's zone. If the new request winds up + * using the same chunk size we do not have to do anything. + */ + kup = btokup((rt_uint32_t)ptr & ~RT_MM_PAGE_MASK); + if (kup->type == PAGE_TYPE_LARGE) + { + rt_size_t osize; + + osize = kup->size << RT_MM_PAGE_BITS; + if ((nptr = rt_malloc(size)) == RT_NULL) + return RT_NULL; + rt_memcpy(nptr, ptr, size > osize ? osize : size); + rt_free(ptr); + + return nptr; + } + else if (kup->type == PAGE_TYPE_SMALL) + { + z = (slab_zone *)(((rt_uint32_t)ptr & ~RT_MM_PAGE_MASK) - + kup->size * RT_MM_PAGE_SIZE); + RT_ASSERT(z->z_magic == ZALLOC_SLAB_MAGIC); + + zoneindex(&size); + if (z->z_chunksize == size) + return (ptr); /* same chunk */ + + /* + * Allocate memory for the new request size. Note that zoneindex has + * already adjusted the request size to the appropriate chunk size, which + * should optimize our bcopy(). Then copy and return the new pointer. + */ + if ((nptr = rt_malloc(size)) == RT_NULL) + return RT_NULL; + + rt_memcpy(nptr, ptr, size > z->z_chunksize ? z->z_chunksize : size); + rt_free(ptr); + + return nptr; + } + + return RT_NULL; +} +RTM_EXPORT(rt_realloc); + +/** + * This function will contiguously allocate enough space for count objects + * that are size bytes of memory each and returns a pointer to the allocated + * memory. + * + * The allocated memory is filled with bytes of value zero. + * + * @param count number of objects to allocate + * @param size size of the objects to allocate + * + * @return pointer to allocated memory / NULL pointer if there is an error + */ +void *rt_calloc(rt_size_t count, rt_size_t size) +{ + void *p; + + /* allocate 'count' objects of size 'size' */ + p = rt_malloc(count * size); + + /* zero the memory */ + if (p) + rt_memset(p, 0, count * size); + + return p; +} +RTM_EXPORT(rt_calloc); + +/** + * This function will release the previous allocated memory block by rt_malloc. + * The released memory block is taken back to system heap. + * + * @param ptr the address of memory which will be released + */ +void rt_free(void *ptr) +{ + slab_zone *z; + slab_chunk *chunk; + struct memusage *kup; + + /* free a RT_NULL pointer */ + if (ptr == RT_NULL) + return ; + + RT_OBJECT_HOOK_CALL(rt_free_hook, (ptr)); + + /* get memory usage */ +#if RT_DEBUG_SLAB + { + rt_uint32_t addr = ((rt_uint32_t)ptr & ~RT_MM_PAGE_MASK); + RT_DEBUG_LOG(RT_DEBUG_SLAB, + ("free a memory 0x%x and align to 0x%x, kup index %d\n", + (rt_uint32_t)ptr, + (rt_uint32_t)addr, + ((rt_uint32_t)(addr) - heap_start) >> RT_MM_PAGE_BITS)); + } +#endif + + kup = btokup((rt_uint32_t)ptr & ~RT_MM_PAGE_MASK); + /* release large allocation */ + if (kup->type == PAGE_TYPE_LARGE) + { + rt_uint32_t size; + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + /* clear page counter */ + size = kup->size; + kup->size = 0; + +#ifdef RT_MEM_STATS + used_mem -= size * RT_MM_PAGE_SIZE; +#endif + rt_sem_release(&heap_sem); + + RT_DEBUG_LOG(RT_DEBUG_SLAB, + ("free large memory block 0x%x, page count %d\n", + (rt_uint32_t)ptr, size)); + + /* free this page */ + rt_page_free(ptr, size); + + return; + } + + /* lock heap */ + rt_sem_take(&heap_sem, RT_WAITING_FOREVER); + + /* zone case. get out zone. */ + z = (slab_zone *)(((rt_uint32_t)ptr & ~RT_MM_PAGE_MASK) - + kup->size * RT_MM_PAGE_SIZE); + RT_ASSERT(z->z_magic == ZALLOC_SLAB_MAGIC); + + chunk = (slab_chunk *)ptr; + chunk->c_next = z->z_freechunk; + z->z_freechunk = chunk; + +#ifdef RT_MEM_STATS + used_mem -= z->z_chunksize; +#endif + + /* + * Bump the number of free chunks. If it becomes non-zero the zone + * must be added back onto the appropriate list. + */ + if (z->z_nfree++ == 0) + { + z->z_next = zone_array[z->z_zoneindex]; + zone_array[z->z_zoneindex] = z; + } + + /* + * If the zone becomes totally free, and there are other zones we + * can allocate from, move this zone to the FreeZones list. Since + * this code can be called from an IPI callback, do *NOT* try to mess + * with kernel_map here. Hysteresis will be performed at malloc() time. + */ + if (z->z_nfree == z->z_nmax && + (z->z_next || zone_array[z->z_zoneindex] != z)) + { + slab_zone **pz; + + RT_DEBUG_LOG(RT_DEBUG_SLAB, ("free zone 0x%x\n", + (rt_uint32_t)z, z->z_zoneindex)); + + /* remove zone from zone array list */ + for (pz = &zone_array[z->z_zoneindex]; z != *pz; pz = &(*pz)->z_next) + ; + *pz = z->z_next; + + /* reset zone */ + z->z_magic = -1; + + /* insert to free zone list */ + z->z_next = zone_free; + zone_free = z; + + ++ zone_free_cnt; + + /* release zone to page allocator */ + if (zone_free_cnt > ZONE_RELEASE_THRESH) + { + register rt_base_t i; + + z = zone_free; + zone_free = z->z_next; + -- zone_free_cnt; + + /* set message usage */ + for (i = 0, kup = btokup(z); i < zone_page_cnt; i ++) + { + kup->type = PAGE_TYPE_FREE; + kup->size = 0; + kup ++; + } + + /* unlock heap */ + rt_sem_release(&heap_sem); + + /* release pages */ + rt_page_free(z, zone_size / RT_MM_PAGE_SIZE); + + return; + } + } + /* unlock heap */ + rt_sem_release(&heap_sem); +} +RTM_EXPORT(rt_free); + +#ifdef RT_MEM_STATS +void rt_memory_info(rt_uint32_t *total, + rt_uint32_t *used, + rt_uint32_t *max_used) +{ + if (total != RT_NULL) + *total = heap_end - heap_start; + + if (used != RT_NULL) + *used = used_mem; + + if (max_used != RT_NULL) + *max_used = max_mem; +} + +#ifdef RT_USING_FINSH +#include + +void list_mem(void) +{ + rt_kprintf("total memory: %d\n", heap_end - heap_start); + rt_kprintf("used memory : %d\n", used_mem); + rt_kprintf("maximum allocated memory: %d\n", max_mem); +} +FINSH_FUNCTION_EXPORT(list_mem, list memory usage information) +#endif +#endif + +/**@}*/ + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/thread.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/thread.c new file mode 100644 index 0000000000..940d24e6f2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/thread.c @@ -0,0 +1,802 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-28 Bernard first version + * 2006-04-29 Bernard implement thread timer + * 2006-04-30 Bernard added THREAD_DEBUG + * 2006-05-27 Bernard fixed the rt_thread_yield bug + * 2006-06-03 Bernard fixed the thread timer init bug + * 2006-08-10 Bernard fixed the timer bug in thread_sleep + * 2006-09-03 Bernard changed rt_timer_delete to rt_timer_detach + * 2006-09-03 Bernard implement rt_thread_detach + * 2008-02-16 Bernard fixed the rt_thread_timeout bug + * 2010-03-21 Bernard change the errno of rt_thread_delay/sleep to + * RT_EOK. + * 2010-11-10 Bernard add cleanup callback function in thread exit. + * 2011-09-01 Bernard fixed rt_thread_exit issue when the current + * thread preempted, which reported by Jiaxing Lee. + * 2011-09-08 Bernard fixed the scheduling issue in rt_thread_startup. + * 2012-12-29 Bernard fixed compiling warning. + * 2016-08-09 ArdaFu add thread suspend and resume hook. + * 2017-04-10 armink fixed the rt_thread_delete and rt_thread_detach + bug when thread has not startup. + */ + +#include +#include + +extern rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; +extern struct rt_thread *rt_current_thread; +extern rt_list_t rt_thread_defunct; + +#ifdef RT_USING_HOOK + +static void (*rt_thread_suspend_hook)(rt_thread_t thread); +static void (*rt_thread_resume_hook) (rt_thread_t thread); +static void (*rt_thread_inited_hook) (rt_thread_t thread); + +/** + * @ingroup Hook + * This function sets a hook function when the system suspend a thread. + * + * @param hook the specified hook function + * + * @note the hook function must be simple and never be blocked or suspend. + */ +void rt_thread_suspend_sethook(void (*hook)(rt_thread_t thread)) +{ + rt_thread_suspend_hook = hook; +} + +/** + * @ingroup Hook + * This function sets a hook function when the system resume a thread. + * + * @param hook the specified hook function + * + * @note the hook function must be simple and never be blocked or suspend. + */ +void rt_thread_resume_sethook(void (*hook)(rt_thread_t thread)) +{ + rt_thread_resume_hook = hook; +} + +/** + * @ingroup Hook + * This function sets a hook function when a thread is initialized. + * + * @param hook the specified hook function + */ +void rt_thread_inited_sethook(void (*hook)(rt_thread_t thread)) +{ + rt_thread_inited_hook = hook; +} + +#endif + +void rt_thread_exit(void) +{ + struct rt_thread *thread; + register rt_base_t level; + + /* get current thread */ + thread = rt_current_thread; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* remove from schedule */ + rt_schedule_remove_thread(thread); + /* change stat */ + thread->stat = RT_THREAD_CLOSE; + + /* remove it from timer list */ + rt_timer_detach(&thread->thread_timer); + + if ((rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) && + thread->cleanup == RT_NULL) + { + rt_object_detach((rt_object_t)thread); + } + else + { + /* insert to defunct thread list */ + rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* switch to next task */ + rt_schedule(); +} + +static rt_err_t _rt_thread_init(struct rt_thread *thread, + const char *name, + void (*entry)(void *parameter), + void *parameter, + void *stack_start, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick) +{ + /* init thread list */ + rt_list_init(&(thread->tlist)); + + thread->entry = (void *)entry; + thread->parameter = parameter; + + /* stack init */ + thread->stack_addr = stack_start; + thread->stack_size = stack_size; + + /* init thread stack */ + rt_memset(thread->stack_addr, '#', thread->stack_size); +#ifdef ARCH_CPU_STACK_GROWS_UPWARD + thread->sp = (void *)rt_hw_stack_init(thread->entry, thread->parameter, + (void *)((char *)thread->stack_addr), + (void *)rt_thread_exit); +#else + thread->sp = (void *)rt_hw_stack_init(thread->entry, thread->parameter, + (void *)((char *)thread->stack_addr + thread->stack_size - 4), + (void *)rt_thread_exit); +#endif + + /* priority init */ + RT_ASSERT(priority < RT_THREAD_PRIORITY_MAX); + thread->init_priority = priority; + thread->current_priority = priority; + + thread->number_mask = 0; +#if RT_THREAD_PRIORITY_MAX > 32 + thread->number = 0; + thread->high_mask = 0; +#endif + + /* tick init */ + thread->init_tick = tick; + thread->remaining_tick = tick; + + /* error and flags */ + thread->error = RT_EOK; + thread->stat = RT_THREAD_INIT; + + /* initialize cleanup function and user data */ + thread->cleanup = 0; + thread->user_data = 0; + + /* init thread timer */ + rt_timer_init(&(thread->thread_timer), + thread->name, + rt_thread_timeout, + thread, + 0, + RT_TIMER_FLAG_ONE_SHOT); + + /* initialize signal */ +#ifdef RT_USING_SIGNALS + thread->sig_mask = 0x00; + thread->sig_pending = 0x00; + + thread->sig_ret = RT_NULL; + thread->sig_vectors = RT_NULL; + thread->si_list = RT_NULL; +#endif + +#ifdef RT_USING_LWP + thread->lwp = RT_NULL; +#endif + + RT_OBJECT_HOOK_CALL(rt_thread_inited_hook, (thread)); + + return RT_EOK; +} + +/** + * @addtogroup Thread + */ + +/**@{*/ + +/** + * This function will initialize a thread, normally it's used to initialize a + * static thread object. + * + * @param thread the static thread object + * @param name the name of thread, which shall be unique + * @param entry the entry function of thread + * @param parameter the parameter of thread enter function + * @param stack_start the start address of thread stack + * @param stack_size the size of thread stack + * @param priority the priority of thread + * @param tick the time slice if there are same priority thread + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_thread_init(struct rt_thread *thread, + const char *name, + void (*entry)(void *parameter), + void *parameter, + void *stack_start, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick) +{ + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(stack_start != RT_NULL); + + /* init thread object */ + rt_object_init((rt_object_t)thread, RT_Object_Class_Thread, name); + + return _rt_thread_init(thread, + name, + entry, + parameter, + stack_start, + stack_size, + priority, + tick); +} +RTM_EXPORT(rt_thread_init); + +/** + * This function will return self thread object + * + * @return the self thread object + */ +rt_thread_t rt_thread_self(void) +{ + return rt_current_thread; +} +RTM_EXPORT(rt_thread_self); + +/** + * This function will start a thread and put it to system ready queue + * + * @param thread the thread to be started + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_thread_startup(rt_thread_t thread) +{ + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_INIT); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + /* set current priority to init priority */ + thread->current_priority = thread->init_priority; + + /* calculate priority attribute */ +#if RT_THREAD_PRIORITY_MAX > 32 + thread->number = thread->current_priority >> 3; /* 5bit */ + thread->number_mask = 1L << thread->number; + thread->high_mask = 1L << (thread->current_priority & 0x07); /* 3bit */ +#else + thread->number_mask = 1L << thread->current_priority; +#endif + + RT_DEBUG_LOG(RT_DEBUG_THREAD, ("startup a thread:%s with priority:%d\n", + thread->name, thread->init_priority)); + /* change thread stat */ + thread->stat = RT_THREAD_SUSPEND; + /* then resume it */ + rt_thread_resume(thread); + if (rt_thread_self() != RT_NULL) + { + /* do a scheduling */ + rt_schedule(); + } + + return RT_EOK; +} +RTM_EXPORT(rt_thread_startup); + +/** + * This function will detach a thread. The thread object will be removed from + * thread queue and detached/deleted from system object management. + * + * @param thread the thread to be deleted + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_thread_detach(rt_thread_t thread) +{ + rt_base_t lock; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + RT_ASSERT(rt_object_is_systemobject((rt_object_t)thread)); + + if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_INIT) + { + /* remove from schedule */ + rt_schedule_remove_thread(thread); + } + + /* release thread timer */ + rt_timer_detach(&(thread->thread_timer)); + + /* change stat */ + thread->stat = RT_THREAD_CLOSE; + + if ((rt_object_is_systemobject((rt_object_t)thread) == RT_TRUE) && + thread->cleanup == RT_NULL) + { + rt_object_detach((rt_object_t)thread); + } + else + { + /* disable interrupt */ + lock = rt_hw_interrupt_disable(); + /* insert to defunct thread list */ + rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); + /* enable interrupt */ + rt_hw_interrupt_enable(lock); + } + + return RT_EOK; +} +RTM_EXPORT(rt_thread_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a thread object and allocate thread object memory + * and stack. + * + * @param name the name of thread, which shall be unique + * @param entry the entry function of thread + * @param parameter the parameter of thread enter function + * @param stack_size the size of thread stack + * @param priority the priority of thread + * @param tick the time slice if there are same priority thread + * + * @return the created thread object + */ +rt_thread_t rt_thread_create(const char *name, + void (*entry)(void *parameter), + void *parameter, + rt_uint32_t stack_size, + rt_uint8_t priority, + rt_uint32_t tick) +{ + struct rt_thread *thread; + void *stack_start; + + thread = (struct rt_thread *)rt_object_allocate(RT_Object_Class_Thread, + name); + if (thread == RT_NULL) + return RT_NULL; + + stack_start = (void *)RT_KERNEL_MALLOC(stack_size); + if (stack_start == RT_NULL) + { + /* allocate stack failure */ + rt_object_delete((rt_object_t)thread); + + return RT_NULL; + } + + _rt_thread_init(thread, + name, + entry, + parameter, + stack_start, + stack_size, + priority, + tick); + + return thread; +} +RTM_EXPORT(rt_thread_create); + +/** + * This function will delete a thread. The thread object will be removed from + * thread queue and deleted from system object management in the idle thread. + * + * @param thread the thread to be deleted + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_thread_delete(rt_thread_t thread) +{ + rt_base_t lock; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + RT_ASSERT(rt_object_is_systemobject((rt_object_t)thread) == RT_FALSE); + + if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_INIT) + { + /* remove from schedule */ + rt_schedule_remove_thread(thread); + } + + /* release thread timer */ + rt_timer_detach(&(thread->thread_timer)); + + /* change stat */ + thread->stat = RT_THREAD_CLOSE; + + /* disable interrupt */ + lock = rt_hw_interrupt_disable(); + + /* insert to defunct thread list */ + rt_list_insert_after(&rt_thread_defunct, &(thread->tlist)); + + /* enable interrupt */ + rt_hw_interrupt_enable(lock); + + return RT_EOK; +} +RTM_EXPORT(rt_thread_delete); +#endif + +/** + * This function will let current thread yield processor, and scheduler will + * choose a highest thread to run. After yield processor, the current thread + * is still in READY state. + * + * @return RT_EOK + */ +rt_err_t rt_thread_yield(void) +{ + register rt_base_t level; + struct rt_thread *thread; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + /* set to current thread */ + thread = rt_current_thread; + + /* if the thread stat is READY and on ready queue list */ + if ((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_READY && + thread->tlist.next != thread->tlist.prev) + { + /* remove thread from thread list */ + rt_list_remove(&(thread->tlist)); + + /* put thread to end of ready queue */ + rt_list_insert_before(&(rt_thread_priority_table[thread->current_priority]), + &(thread->tlist)); + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_schedule(); + + return RT_EOK; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + return RT_EOK; +} +RTM_EXPORT(rt_thread_yield); + +/** + * This function will let current thread sleep for some ticks. + * + * @param tick the sleep ticks + * + * @return RT_EOK + */ +rt_err_t rt_thread_sleep(rt_tick_t tick) +{ + register rt_base_t temp; + struct rt_thread *thread; + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + /* set to current thread */ + thread = rt_current_thread; + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + /* suspend thread */ + rt_thread_suspend(thread); + + /* reset the timeout of thread timer and start it */ + rt_timer_control(&(thread->thread_timer), RT_TIMER_CTRL_SET_TIME, &tick); + rt_timer_start(&(thread->thread_timer)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + rt_schedule(); + + /* clear error number of this thread to RT_EOK */ + if (thread->error == -RT_ETIMEOUT) + thread->error = RT_EOK; + + return RT_EOK; +} + +/** + * This function will let current thread delay for some ticks. + * + * @param tick the delay ticks + * + * @return RT_EOK + */ +rt_err_t rt_thread_delay(rt_tick_t tick) +{ + return rt_thread_sleep(tick); +} +RTM_EXPORT(rt_thread_delay); + +/** + * This function will let current thread delay for some milliseconds. + * + * @param tick the delay time + * + * @return RT_EOK + */ +rt_err_t rt_thread_mdelay(rt_int32_t ms) +{ + rt_tick_t tick; + + tick = rt_tick_from_millisecond(ms); + + return rt_thread_sleep(tick); +} +RTM_EXPORT(rt_thread_mdelay); + +/** + * This function will control thread behaviors according to control command. + * + * @param thread the specified thread to be controlled + * @param cmd the control command, which includes + * RT_THREAD_CTRL_CHANGE_PRIORITY for changing priority level of thread; + * RT_THREAD_CTRL_STARTUP for starting a thread; + * RT_THREAD_CTRL_CLOSE for delete a thread. + * @param arg the argument of control command + * + * @return RT_EOK + */ +rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg) +{ + register rt_base_t temp; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + switch (cmd) + { + case RT_THREAD_CTRL_CHANGE_PRIORITY: + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* for ready thread, change queue */ + if ((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_READY) + { + /* remove thread from schedule queue first */ + rt_schedule_remove_thread(thread); + + /* change thread priority */ + thread->current_priority = *(rt_uint8_t *)arg; + + /* recalculate priority attribute */ +#if RT_THREAD_PRIORITY_MAX > 32 + thread->number = thread->current_priority >> 3; /* 5bit */ + thread->number_mask = 1 << thread->number; + thread->high_mask = 1 << (thread->current_priority & 0x07); /* 3bit */ +#else + thread->number_mask = 1 << thread->current_priority; +#endif + + /* insert thread to schedule queue again */ + rt_schedule_insert_thread(thread); + } + else + { + thread->current_priority = *(rt_uint8_t *)arg; + + /* recalculate priority attribute */ +#if RT_THREAD_PRIORITY_MAX > 32 + thread->number = thread->current_priority >> 3; /* 5bit */ + thread->number_mask = 1 << thread->number; + thread->high_mask = 1 << (thread->current_priority & 0x07); /* 3bit */ +#else + thread->number_mask = 1 << thread->current_priority; +#endif + } + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + break; + + case RT_THREAD_CTRL_STARTUP: + return rt_thread_startup(thread); + +#ifdef RT_USING_HEAP + case RT_THREAD_CTRL_CLOSE: + return rt_thread_delete(thread); +#endif + + default: + break; + } + + return RT_EOK; +} +RTM_EXPORT(rt_thread_control); + +/** + * This function will suspend the specified thread. + * + * @param thread the thread to be suspended + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + * + * @note if suspend self thread, after this function call, the + * rt_schedule() must be invoked. + */ +rt_err_t rt_thread_suspend(rt_thread_t thread) +{ + register rt_base_t temp; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread suspend: %s\n", thread->name)); + + if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_READY) + { + RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread suspend: thread disorder, 0x%2x\n", + thread->stat)); + + return -RT_ERROR; + } + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* change thread stat */ + thread->stat = RT_THREAD_SUSPEND | (thread->stat & ~RT_THREAD_STAT_MASK); + rt_schedule_remove_thread(thread); + + /* stop thread timer anyway */ + rt_timer_stop(&(thread->thread_timer)); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + RT_OBJECT_HOOK_CALL(rt_thread_suspend_hook, (thread)); + return RT_EOK; +} +RTM_EXPORT(rt_thread_suspend); + +/** + * This function will resume a thread and put it to system ready queue. + * + * @param thread the thread to be resumed + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_thread_resume(rt_thread_t thread) +{ + register rt_base_t temp; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread resume: %s\n", thread->name)); + + if ((thread->stat & RT_THREAD_STAT_MASK) != RT_THREAD_SUSPEND) + { + RT_DEBUG_LOG(RT_DEBUG_THREAD, ("thread resume: thread disorder, %d\n", + thread->stat)); + + return -RT_ERROR; + } + + /* disable interrupt */ + temp = rt_hw_interrupt_disable(); + + /* remove from suspend list */ + rt_list_remove(&(thread->tlist)); + + rt_timer_stop(&thread->thread_timer); + + /* enable interrupt */ + rt_hw_interrupt_enable(temp); + + /* insert to schedule ready list */ + rt_schedule_insert_thread(thread); + + RT_OBJECT_HOOK_CALL(rt_thread_resume_hook, (thread)); + return RT_EOK; +} +RTM_EXPORT(rt_thread_resume); + +/** + * This function is the timeout function for thread, normally which is invoked + * when thread is timeout to wait some resource. + * + * @param parameter the parameter of thread timeout function + */ +void rt_thread_timeout(void *parameter) +{ + struct rt_thread *thread; + + thread = (struct rt_thread *)parameter; + + /* thread check */ + RT_ASSERT(thread != RT_NULL); + RT_ASSERT((thread->stat & RT_THREAD_STAT_MASK) == RT_THREAD_SUSPEND); + RT_ASSERT(rt_object_get_type((rt_object_t)thread) == RT_Object_Class_Thread); + + /* set error number */ + thread->error = -RT_ETIMEOUT; + + /* remove from suspend list */ + rt_list_remove(&(thread->tlist)); + + /* insert to schedule ready list */ + rt_schedule_insert_thread(thread); + + /* do schedule */ + rt_schedule(); +} +RTM_EXPORT(rt_thread_timeout); + +/** + * This function will find the specified thread. + * + * @param name the name of thread finding + * + * @return the found thread + * + * @note please don't invoke this function in interrupt status. + */ +rt_thread_t rt_thread_find(char *name) +{ + struct rt_object_information *information; + struct rt_object *object; + struct rt_list_node *node; + + /* enter critical */ + if (rt_thread_self() != RT_NULL) + rt_enter_critical(); + + /* try to find device object */ + information = rt_object_get_information(RT_Object_Class_Thread); + RT_ASSERT(information != RT_NULL); + for (node = information->object_list.next; + node != &(information->object_list); + node = node->next) + { + object = rt_list_entry(node, struct rt_object, list); + if (rt_strncmp(object->name, name, RT_NAME_MAX) == 0) + { + /* leave critical */ + if (rt_thread_self() != RT_NULL) + rt_exit_critical(); + + return (rt_thread_t)object; + } + } + + /* leave critical */ + if (rt_thread_self() != RT_NULL) + rt_exit_critical(); + + /* not found */ + return RT_NULL; +} +RTM_EXPORT(rt_thread_find); + +/**@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/timer.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/timer.c new file mode 100644 index 0000000000..fd938065db --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/rtthread/src/timer.c @@ -0,0 +1,721 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2006-03-12 Bernard first version + * 2006-04-29 Bernard implement thread timer + * 2006-06-04 Bernard implement rt_timer_control + * 2006-08-10 Bernard fix the periodic timer bug + * 2006-09-03 Bernard implement rt_timer_detach + * 2009-11-11 LiJin add soft timer + * 2010-05-12 Bernard fix the timer check bug. + * 2010-11-02 Charlie re-implement tick overflow issue + * 2012-12-15 Bernard fix the next timeout issue in soft timer + * 2014-07-12 Bernard does not lock scheduler when invoking soft-timer + * timeout function. + */ + +#include +#include + +/* hard timer list */ +static rt_list_t rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL]; + +#ifdef RT_USING_TIMER_SOFT +#ifndef RT_TIMER_THREAD_STACK_SIZE +#define RT_TIMER_THREAD_STACK_SIZE 512 +#endif + +#ifndef RT_TIMER_THREAD_PRIO +#define RT_TIMER_THREAD_PRIO 0 +#endif + +/* soft timer list */ +static rt_list_t rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL]; +static struct rt_thread timer_thread; +ALIGN(RT_ALIGN_SIZE) +static rt_uint8_t timer_thread_stack[RT_TIMER_THREAD_STACK_SIZE]; +#endif + +#ifdef RT_USING_HOOK +extern void (*rt_object_take_hook)(struct rt_object *object); +extern void (*rt_object_put_hook)(struct rt_object *object); +static void (*rt_timer_enter_hook)(struct rt_timer *timer); +static void (*rt_timer_exit_hook)(struct rt_timer *timer); + +/** + * @addtogroup Hook + */ + +/**@{*/ + +/** + * This function will set a hook function, which will be invoked when enter + * timer timeout callback function. + * + * @param hook the hook function + */ +void rt_timer_enter_sethook(void (*hook)(struct rt_timer *timer)) +{ + rt_timer_enter_hook = hook; +} + +/** + * This function will set a hook function, which will be invoked when exit + * timer timeout callback function. + * + * @param hook the hook function + */ +void rt_timer_exit_sethook(void (*hook)(struct rt_timer *timer)) +{ + rt_timer_exit_hook = hook; +} + +/**@}*/ +#endif + +static void _rt_timer_init(rt_timer_t timer, + void (*timeout)(void *parameter), + void *parameter, + rt_tick_t time, + rt_uint8_t flag) +{ + int i; + + /* set flag */ + timer->parent.flag = flag; + + /* set deactivated */ + timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + + timer->timeout_func = timeout; + timer->parameter = parameter; + + timer->timeout_tick = 0; + timer->init_tick = time; + + /* initialize timer list */ + for (i = 0; i < RT_TIMER_SKIP_LIST_LEVEL; i++) + { + rt_list_init(&(timer->row[i])); + } +} + +/* the fist timer always in the last row */ +static rt_tick_t rt_timer_list_next_timeout(rt_list_t timer_list[]) +{ + struct rt_timer *timer; + + if (rt_list_isempty(&timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1])) + return RT_TICK_MAX; + + timer = rt_list_entry(timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next, + struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]); + + return timer->timeout_tick; +} + +rt_inline void _rt_timer_remove(rt_timer_t timer) +{ + int i; + + for (i = 0; i < RT_TIMER_SKIP_LIST_LEVEL; i++) + { + rt_list_remove(&timer->row[i]); + } +} + +#if RT_DEBUG_TIMER +static int rt_timer_count_height(struct rt_timer *timer) +{ + int i, cnt = 0; + + for (i = 0; i < RT_TIMER_SKIP_LIST_LEVEL; i++) + { + if (!rt_list_isempty(&timer->row[i])) + cnt++; + } + return cnt; +} + +void rt_timer_dump(rt_list_t timer_heads[]) +{ + rt_list_t *list; + + for (list = timer_heads[RT_TIMER_SKIP_LIST_LEVEL - 1].next; + list != &timer_heads[RT_TIMER_SKIP_LIST_LEVEL - 1]; + list = list->next) + { + struct rt_timer *timer = rt_list_entry(list, + struct rt_timer, + row[RT_TIMER_SKIP_LIST_LEVEL - 1]); + rt_kprintf("%d", rt_timer_count_height(timer)); + } + rt_kprintf("\n"); +} +#endif + +/** + * @addtogroup Clock + */ + +/**@{*/ + +/** + * This function will initialize a timer, normally this function is used to + * initialize a static timer object. + * + * @param timer the static timer object + * @param name the name of timer + * @param timeout the timeout function + * @param parameter the parameter of timeout function + * @param time the tick of timer + * @param flag the flag of timer + */ +void rt_timer_init(rt_timer_t timer, + const char *name, + void (*timeout)(void *parameter), + void *parameter, + rt_tick_t time, + rt_uint8_t flag) +{ + /* timer check */ + RT_ASSERT(timer != RT_NULL); + + /* timer object initialization */ + rt_object_init((rt_object_t)timer, RT_Object_Class_Timer, name); + + _rt_timer_init(timer, timeout, parameter, time, flag); +} +RTM_EXPORT(rt_timer_init); + +/** + * This function will detach a timer from timer management. + * + * @param timer the static timer object + * + * @return the operation status, RT_EOK on OK; RT_ERROR on error + */ +rt_err_t rt_timer_detach(rt_timer_t timer) +{ + register rt_base_t level; + + /* timer check */ + RT_ASSERT(timer != RT_NULL); + RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + RT_ASSERT(rt_object_is_systemobject(&timer->parent)); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + _rt_timer_remove(timer); + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_object_detach((rt_object_t)timer); + + return RT_EOK; +} +RTM_EXPORT(rt_timer_detach); + +#ifdef RT_USING_HEAP +/** + * This function will create a timer + * + * @param name the name of timer + * @param timeout the timeout function + * @param parameter the parameter of timeout function + * @param time the tick of timer + * @param flag the flag of timer + * + * @return the created timer object + */ +rt_timer_t rt_timer_create(const char *name, + void (*timeout)(void *parameter), + void *parameter, + rt_tick_t time, + rt_uint8_t flag) +{ + struct rt_timer *timer; + + /* allocate a object */ + timer = (struct rt_timer *)rt_object_allocate(RT_Object_Class_Timer, name); + if (timer == RT_NULL) + { + return RT_NULL; + } + + _rt_timer_init(timer, timeout, parameter, time, flag); + + return timer; +} +RTM_EXPORT(rt_timer_create); + +/** + * This function will delete a timer and release timer memory + * + * @param timer the timer to be deleted + * + * @return the operation status, RT_EOK on OK; RT_ERROR on error + */ +rt_err_t rt_timer_delete(rt_timer_t timer) +{ + register rt_base_t level; + + /* timer check */ + RT_ASSERT(timer != RT_NULL); + RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + RT_ASSERT(rt_object_is_systemobject(&timer->parent) == RT_FALSE); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + _rt_timer_remove(timer); + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + rt_object_delete((rt_object_t)timer); + + return RT_EOK; +} +RTM_EXPORT(rt_timer_delete); +#endif + +/** + * This function will start the timer + * + * @param timer the timer to be started + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_timer_start(rt_timer_t timer) +{ + unsigned int row_lvl; + rt_list_t *timer_list; + register rt_base_t level; + rt_list_t *row_head[RT_TIMER_SKIP_LIST_LEVEL]; + unsigned int tst_nr; + static unsigned int random_nr; + + /* timer check */ + RT_ASSERT(timer != RT_NULL); + RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + + /* stop timer firstly */ + level = rt_hw_interrupt_disable(); + /* remove timer from list */ + _rt_timer_remove(timer); + /* change status of timer */ + timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + rt_hw_interrupt_enable(level); + + RT_OBJECT_HOOK_CALL(rt_object_take_hook, (&(timer->parent))); + + /* + * get timeout tick, + * the max timeout tick shall not great than RT_TICK_MAX/2 + */ + RT_ASSERT(timer->init_tick < RT_TICK_MAX / 2); + timer->timeout_tick = rt_tick_get() + timer->init_tick; + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + +#ifdef RT_USING_TIMER_SOFT + if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) + { + /* insert timer to soft timer list */ + timer_list = rt_soft_timer_list; + } + else +#endif + { + /* insert timer to system timer list */ + timer_list = rt_timer_list; + } + + row_head[0] = &timer_list[0]; + for (row_lvl = 0; row_lvl < RT_TIMER_SKIP_LIST_LEVEL; row_lvl++) + { + for (; row_head[row_lvl] != timer_list[row_lvl].prev; + row_head[row_lvl] = row_head[row_lvl]->next) + { + struct rt_timer *t; + rt_list_t *p = row_head[row_lvl]->next; + + /* fix up the entry pointer */ + t = rt_list_entry(p, struct rt_timer, row[row_lvl]); + + /* If we have two timers that timeout at the same time, it's + * preferred that the timer inserted early get called early. + * So insert the new timer to the end the the some-timeout timer + * list. + */ + if ((t->timeout_tick - timer->timeout_tick) == 0) + { + continue; + } + else if ((t->timeout_tick - timer->timeout_tick) < RT_TICK_MAX / 2) + { + break; + } + } + if (row_lvl != RT_TIMER_SKIP_LIST_LEVEL - 1) + row_head[row_lvl + 1] = row_head[row_lvl] + 1; + } + + /* Interestingly, this super simple timer insert counter works very very + * well on distributing the list height uniformly. By means of "very very + * well", I mean it beats the randomness of timer->timeout_tick very easily + * (actually, the timeout_tick is not random and easy to be attacked). */ + random_nr++; + tst_nr = random_nr; + + rt_list_insert_after(row_head[RT_TIMER_SKIP_LIST_LEVEL - 1], + &(timer->row[RT_TIMER_SKIP_LIST_LEVEL - 1])); + for (row_lvl = 2; row_lvl <= RT_TIMER_SKIP_LIST_LEVEL; row_lvl++) + { + if (!(tst_nr & RT_TIMER_SKIP_LIST_MASK)) + rt_list_insert_after(row_head[RT_TIMER_SKIP_LIST_LEVEL - row_lvl], + &(timer->row[RT_TIMER_SKIP_LIST_LEVEL - row_lvl])); + else + break; + /* Shift over the bits we have tested. Works well with 1 bit and 2 + * bits. */ + tst_nr >>= (RT_TIMER_SKIP_LIST_MASK + 1) >> 1; + } + + timer->parent.flag |= RT_TIMER_FLAG_ACTIVATED; + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + +#ifdef RT_USING_TIMER_SOFT + if (timer->parent.flag & RT_TIMER_FLAG_SOFT_TIMER) + { + /* check whether timer thread is ready */ + if ((timer_thread.stat & RT_THREAD_STAT_MASK) != RT_THREAD_READY) + { + /* resume timer thread to check soft timer */ + rt_thread_resume(&timer_thread); + rt_schedule(); + } + } +#endif + + return RT_EOK; +} +RTM_EXPORT(rt_timer_start); + +/** + * This function will stop the timer + * + * @param timer the timer to be stopped + * + * @return the operation status, RT_EOK on OK, -RT_ERROR on error + */ +rt_err_t rt_timer_stop(rt_timer_t timer) +{ + register rt_base_t level; + + /* timer check */ + RT_ASSERT(timer != RT_NULL); + RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + + if (!(timer->parent.flag & RT_TIMER_FLAG_ACTIVATED)) + return -RT_ERROR; + + RT_OBJECT_HOOK_CALL(rt_object_put_hook, (&(timer->parent))); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + _rt_timer_remove(timer); + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + /* change stat */ + timer->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + + return RT_EOK; +} +RTM_EXPORT(rt_timer_stop); + +/** + * This function will get or set some options of the timer + * + * @param timer the timer to be get or set + * @param cmd the control command + * @param arg the argument + * + * @return RT_EOK + */ +rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg) +{ + /* timer check */ + RT_ASSERT(timer != RT_NULL); + RT_ASSERT(rt_object_get_type(&timer->parent) == RT_Object_Class_Timer); + + switch (cmd) + { + case RT_TIMER_CTRL_GET_TIME: + *(rt_tick_t *)arg = timer->init_tick; + break; + + case RT_TIMER_CTRL_SET_TIME: + timer->init_tick = *(rt_tick_t *)arg; + break; + + case RT_TIMER_CTRL_SET_ONESHOT: + timer->parent.flag &= ~RT_TIMER_FLAG_PERIODIC; + break; + + case RT_TIMER_CTRL_SET_PERIODIC: + timer->parent.flag |= RT_TIMER_FLAG_PERIODIC; + break; + } + + return RT_EOK; +} +RTM_EXPORT(rt_timer_control); + +/** + * This function will check timer list, if a timeout event happens, the + * corresponding timeout function will be invoked. + * + * @note this function shall be invoked in operating system timer interrupt. + */ +void rt_timer_check(void) +{ + struct rt_timer *t; + rt_tick_t current_tick; + register rt_base_t level; + + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("timer check enter\n")); + + current_tick = rt_tick_get(); + + /* disable interrupt */ + level = rt_hw_interrupt_disable(); + + while (!rt_list_isempty(&rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1])) + { + t = rt_list_entry(rt_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next, + struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]); + + /* + * It supposes that the new tick shall less than the half duration of + * tick max. + */ + if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2) + { + RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t)); + + /* remove timer from timer list firstly */ + _rt_timer_remove(t); + + /* call timeout function */ + t->timeout_func(t->parameter); + + /* re-get tick */ + current_tick = rt_tick_get(); + + RT_OBJECT_HOOK_CALL(rt_timer_exit_hook, (t)); + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick)); + + if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) && + (t->parent.flag & RT_TIMER_FLAG_ACTIVATED)) + { + /* start it */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + rt_timer_start(t); + } + else + { + /* stop timer */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + } + } + else + break; + } + + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("timer check leave\n")); +} + +/** + * This function will return the next timeout tick in the system. + * + * @return the next timeout tick in the system + */ +rt_tick_t rt_timer_next_timeout_tick(void) +{ + return rt_timer_list_next_timeout(rt_timer_list); +} + +#ifdef RT_USING_TIMER_SOFT +/** + * This function will check timer list, if a timeout event happens, the + * corresponding timeout function will be invoked. + */ +void rt_soft_timer_check(void) +{ + rt_tick_t current_tick; + rt_list_t *n; + struct rt_timer *t; + + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check enter\n")); + + current_tick = rt_tick_get(); + + /* lock scheduler */ + rt_enter_critical(); + + for (n = rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1].next; + n != &(rt_soft_timer_list[RT_TIMER_SKIP_LIST_LEVEL - 1]);) + { + t = rt_list_entry(n, struct rt_timer, row[RT_TIMER_SKIP_LIST_LEVEL - 1]); + + /* + * It supposes that the new tick shall less than the half duration of + * tick max. + */ + if ((current_tick - t->timeout_tick) < RT_TICK_MAX / 2) + { + RT_OBJECT_HOOK_CALL(rt_timer_enter_hook, (t)); + + /* move node to the next */ + n = n->next; + + /* remove timer from timer list firstly */ + _rt_timer_remove(t); + + /* not lock scheduler when performing timeout function */ + rt_exit_critical(); + /* call timeout function */ + t->timeout_func(t->parameter); + + /* re-get tick */ + current_tick = rt_tick_get(); + + RT_OBJECT_HOOK_CALL(rt_timer_exit_hook, (t)); + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("current tick: %d\n", current_tick)); + + /* lock scheduler */ + rt_enter_critical(); + + if ((t->parent.flag & RT_TIMER_FLAG_PERIODIC) && + (t->parent.flag & RT_TIMER_FLAG_ACTIVATED)) + { + /* start it */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + rt_timer_start(t); + } + else + { + /* stop timer */ + t->parent.flag &= ~RT_TIMER_FLAG_ACTIVATED; + } + } + else break; /* not check anymore */ + } + + /* unlock scheduler */ + rt_exit_critical(); + + RT_DEBUG_LOG(RT_DEBUG_TIMER, ("software timer check leave\n")); +} + +/* system timer thread entry */ +static void rt_thread_timer_entry(void *parameter) +{ + rt_tick_t next_timeout; + + while (1) + { + /* get the next timeout tick */ + next_timeout = rt_timer_list_next_timeout(rt_soft_timer_list); + if (next_timeout == RT_TICK_MAX) + { + /* no software timer exist, suspend self. */ + rt_thread_suspend(rt_thread_self()); + rt_schedule(); + } + else + { + rt_tick_t current_tick; + + /* get current tick */ + current_tick = rt_tick_get(); + + if ((next_timeout - current_tick) < RT_TICK_MAX / 2) + { + /* get the delta timeout tick */ + next_timeout = next_timeout - current_tick; + rt_thread_delay(next_timeout); + } + } + + /* check software timer */ + rt_soft_timer_check(); + } +} +#endif + +/** + * @ingroup SystemInit + * + * This function will initialize system timer + */ +void rt_system_timer_init(void) +{ + int i; + + for (i = 0; i < sizeof(rt_timer_list) / sizeof(rt_timer_list[0]); i++) + { + rt_list_init(rt_timer_list + i); + } +} + +/** + * @ingroup SystemInit + * + * This function will initialize system timer thread + */ +void rt_system_timer_thread_init(void) +{ +#ifdef RT_USING_TIMER_SOFT + int i; + + for (i = 0; + i < sizeof(rt_soft_timer_list) / sizeof(rt_soft_timer_list[0]); + i++) + { + rt_list_init(rt_soft_timer_list + i); + } + + /* start software timer thread */ + rt_thread_init(&timer_thread, + "timer", + rt_thread_timer_entry, + RT_NULL, + &timer_thread_stack[0], + sizeof(timer_thread_stack), + RT_TIMER_THREAD_PRIO, + 10); + + /* startup */ + rt_thread_startup(&timer_thread); +#endif +} + +/**@}*/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/startup_target.s new file mode 100644 index 0000000000..56a1163207 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/startup_target.s @@ -0,0 +1,500 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + +__CHIPINITIAL EQU 0 + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + IF (__CHIPINITIAL != 0) + PUBWEAK __CHIP_INIT + EXTERN SystemInit + ENDIF + + PUBLIC __vector_table + + DATA +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler ; Reset Handler + + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; PMU, IRQ0 + DCD RTC_IRQHandler ; RTC, IRQ1 + DCD U32K0_IRQHandler ; UART 32K 0, IRQ2 + DCD U32K1_IRQHandler ; UART 32K 1, IRQ3 + DCD I2C_IRQHandler ; I2C, IRQ4 + DCD SPI1_IRQHandler ; SPI1, IRQ5 + DCD UART0_IRQHandler ; UART0, IRQ6 + DCD UART1_IRQHandler ; UART1, IRQ7 + DCD UART2_IRQHandler ; UART2, IRQ8 + DCD UART3_IRQHandler ; UART3, IRQ9 + DCD UART4_IRQHandler ; UART4, IRQ10 + DCD UART5_IRQHandler ; UART5, IRQ11 + DCD ISO78160_IRQHandler ; ISO78160, IRQ12 + DCD ISO78161_IRQHandler ; ISO78161, IRQ13 + DCD TMR0_IRQHandler ; Timer 0, IRQ14 + DCD TMR1_IRQHandler ; Timer 1, IRQ15 + DCD TMR2_IRQHandler ; Timer 2, IRQ16 + DCD TMR3_IRQHandler ; Timer 3, IRQ17 + DCD PWM0_IRQHandler ; PWM0, IRQ18 + DCD PWM1_IRQHandler ; PWM1, IRQ19 + DCD PWM2_IRQHandler ; PWM2, IRQ20 + DCD PWM3_IRQHandler ; PWM3, IRQ21 + DCD DMA_IRQHandler ; DMA, IRQ22 + DCD FLASH_IRQHandler ; FLASH, IRQ23 + DCD ANA_IRQHandler ; ANA, IRQ24 + DCD 0 ; Reserved, IRQ25 + DCD 0 ; Reserved, IRQ26 + DCD SPI2_IRQHandler ; SPI2, IRQ27 + DCD SPI3_IRQHandler ; SPI3, IRQ28 + DCD 0 ; Reserved, IRQ29 + DCD 0 ; Reserved, IRQ30 + DCD 0 ; Reserved, IRQ31 + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT:REORDER(2) +Reset_Handler + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ELSE + SECTION .text:CODE:NOROOT:REORDER(2) +Reset_Handler + ENDIF + LDR R0, =__iar_program_start + BX R0 + + + PUBWEAK NMI_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +NMI_Handler + B NMI_Handler + + + PUBWEAK HardFault_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +HardFault_Handler + B HardFault_Handler + + + PUBWEAK SVC_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SVC_Handler + B SVC_Handler + + + PUBWEAK PendSV_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +PendSV_Handler + B PendSV_Handler + + + PUBWEAK SysTick_Handler + SECTION .text:CODE:NOROOT:REORDER(1) +SysTick_Handler + B SysTick_Handler + + + PUBWEAK PMU_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PMU_IRQHandler + B PMU_IRQHandler + + + PUBWEAK RTC_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +RTC_IRQHandler + B RTC_IRQHandler + + + PUBWEAK U32K0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K0_IRQHandler + B U32K0_IRQHandler + + + PUBWEAK U32K1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +U32K1_IRQHandler + B U32K1_IRQHandler + + + PUBWEAK I2C_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +I2C_IRQHandler + B I2C_IRQHandler + + + PUBWEAK SPI1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI1_IRQHandler + B SPI1_IRQHandler + + + PUBWEAK UART0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART0_IRQHandler + B UART0_IRQHandler + + + PUBWEAK UART1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART1_IRQHandler + B UART1_IRQHandler + + + PUBWEAK UART2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART2_IRQHandler + B UART2_IRQHandler + + + PUBWEAK UART3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART3_IRQHandler + B UART3_IRQHandler + + + PUBWEAK UART4_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART4_IRQHandler + B UART4_IRQHandler + + + PUBWEAK UART5_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +UART5_IRQHandler + B UART5_IRQHandler + + + PUBWEAK ISO78160_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78160_IRQHandler + B ISO78160_IRQHandler + + + PUBWEAK ISO78161_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ISO78161_IRQHandler + B ISO78161_IRQHandler + + + PUBWEAK TMR0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR0_IRQHandler + B TMR0_IRQHandler + + + PUBWEAK TMR1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR1_IRQHandler + B TMR1_IRQHandler + + + PUBWEAK TMR2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR2_IRQHandler + B TMR2_IRQHandler + + + PUBWEAK TMR3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +TMR3_IRQHandler + B TMR3_IRQHandler + + + PUBWEAK PWM0_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM0_IRQHandler + B PWM0_IRQHandler + + + PUBWEAK PWM1_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM1_IRQHandler + B PWM1_IRQHandler + + + PUBWEAK PWM2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM2_IRQHandler + B PWM2_IRQHandler + + + PUBWEAK PWM3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +PWM3_IRQHandler + B PWM3_IRQHandler + + + PUBWEAK DMA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +DMA_IRQHandler + B DMA_IRQHandler + + + PUBWEAK FLASH_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +FLASH_IRQHandler + B FLASH_IRQHandler + + + PUBWEAK ANA_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +ANA_IRQHandler + B ANA_IRQHandler + + + PUBWEAK SPI2_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI2_IRQHandler + B SPI2_IRQHandler + + + PUBWEAK SPI3_IRQHandler + SECTION .text:CODE:NOROOT:REORDER(1) +SPI3_IRQHandler + B SPI3_IRQHandler + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + SECTION .Reset_Handler_text:CODE:NOROOT(2) +__CHIP_INIT +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =000FFFE0H + LDR R1, =55AAAA55H + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =00080E00H + LDR R1, =20H + LDR R2, =000FFFE8H + LDR R3, =000FFFF0H + LDR R4, =0 + LDR R7, =0FFH +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =30H + LDR R7, =81FF81FFH +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =000FFFE0H + LDR R1, =0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =4001422CH + LDR R5, =40014230H + LDR R6, =40014234H + LDR R7, =40014238H + LDR R0, =80DC0H + LDR R0, [R0] + LDR R1, =80DC4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DCCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =80DD0H + LDR R0, [R0] + LDR R1, =80DD4H + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0FFFFFFFFH + MVNS R2, R2 + LDR R3, =80DDCH + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0FF00H + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0FF0000H + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0FF000000H + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =40014240H + LDR R0, =80DE0H + LDR R0, [R0] + LDR R1, =80DE4H + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =80DE8H + LDR R0, [R0] + LDR R1, =80DECH + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0FFH + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + ENDIF + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/target_flash.icf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/target_flash.icf new file mode 100644 index 0000000000..77243f99f1 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/target_flash.icf @@ -0,0 +1,31 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +define symbol __Reset_Handler_text_start__ = 0x000000C0; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000 ; +define symbol __ICFEDIT_region_ROM_end__ = 0x0007FFFF; +define symbol __ICFEDIT_region_RAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_RAM_end__ = 0x2000FFFF; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x400; +/**** End of ICF editor section. ###ICF###*/ + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region RAM_region = mem:[from __ICFEDIT_region_RAM_start__ to __ICFEDIT_region_RAM_end__]; +export symbol __ICFEDIT_region_RAM_start__; +export symbol __ICFEDIT_region_RAM_end__; +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; + +initialize by copy { readwrite }; +do not initialize { section .noinit }; +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; +place at address mem:__Reset_Handler_text_start__ { readonly section .Reset_Handler_text }; +place in ROM_region { readonly }; +place in RAM_region { readwrite, + block CSTACK, block HEAP }; \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewd b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewd new file mode 100644 index 0000000000..c94f8ac11c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewd @@ -0,0 +1,2741 @@ + + + + 2 + + Debug + + ARM + + 1 + + C-SPY + 2 + + 26 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 1 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 1 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 1 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 1 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 1 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 1 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + Release + + ARM + + 0 + + C-SPY + 2 + + 26 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ARMSIM_ID + 2 + + 1 + 1 + 0 + + + + + + + + ANGEL_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + + CMSISDAP_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + GDBSERVER_ID + 2 + + 0 + 1 + 0 + + + + + + + + + + + IARROM_ID + 2 + + 1 + 1 + 0 + + + + + + + + + IJET_ID + 2 + + 6 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + JLINK_ID + 2 + + 15 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + LMIFTDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + MACRAIGOR_ID + 2 + + 3 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + PEMICRO_ID + 2 + + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + RDI_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + + + + STLINK_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + THIRDPARTY_ID + 2 + + 0 + 1 + 0 + + + + + + + + XDS100_ID + 2 + + 2 + 1 + 0 + + + + + + + + + + + + + $TOOLKIT_DIR$\plugins\middleware\HCCWare\HCCWare.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\AVIX\AVIX.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\CMX\CmxTinyArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\embOS\embOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\MQX\MQXRtosPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\OpenRTOS\OpenRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\Quadros\Quadros_EWB7_Plugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\SafeRTOS\SafeRTOSPlugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\ThreadX\ThreadXArmPlugin.ENU.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\TI-RTOS\tirtosplugin.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-286-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-II\uCOS-II-KA-CSpy.ewplugin + 0 + + + $TOOLKIT_DIR$\plugins\rtos\uCOS-III\uCOS-III-KA-CSpy.ewplugin + 0 + + + $EW_DIR$\common\plugins\CodeCoverage\CodeCoverage.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\Orti\Orti.ENU.ewplugin + 0 + + + $EW_DIR$\common\plugins\SymList\SymList.ENU.ewplugin + 1 + + + $EW_DIR$\common\plugins\uCProbe\uCProbePlugin.ENU.ewplugin + 0 + + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewp new file mode 100644 index 0000000000..c42d58667a --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.ewp @@ -0,0 +1,2069 @@ + + + + 2 + + Debug + + ARM + + 1 + + General + 3 + + 22 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 1 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 1 + + + + + + + BILINK + 0 + + + + + Release + + ARM + + 0 + + General + 3 + + 22 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ICCARM + 2 + + 31 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AARM + 2 + + 9 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + OBJCOPY + 0 + + 1 + 1 + 0 + + + + + + + + + CUSTOM + 3 + + + + 0 + + + + BICOMP + 0 + + + + BUILDACTION + 1 + + + + + + + ILINK + 0 + + 16 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + IARCHIVE + 0 + + 0 + 1 + 0 + + + + + + + BILINK + 0 + + + + + EWARM + + $PROJ_DIR$\startup_target.s + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + FWLib + + Device + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + $PROJ_DIR$\..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + $PROJ_DIR$\..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + + rtthread + + $PROJ_DIR$\rtthread\board.c + + + $PROJ_DIR$\rtthread\src\clock.c + + + $PROJ_DIR$\rtthread\src\components.c + + + $PROJ_DIR$\rtthread\libcpu\arm\cortex-m0\context_iar.S + + + $PROJ_DIR$\rtthread\src\cpu.c + + + $PROJ_DIR$\rtthread\libcpu\arm\cortex-m0\cpuport.c + + + $PROJ_DIR$\rtthread\src\idle.c + + + $PROJ_DIR$\rtthread\src\ipc.c + + + $PROJ_DIR$\rtthread\src\irq.c + + + $PROJ_DIR$\rtthread\src\kservice.c + + + $PROJ_DIR$\rtthread\src\mem.c + + + $PROJ_DIR$\rtthread\src\memheap.c + + + $PROJ_DIR$\rtthread\src\mempool.c + + + $PROJ_DIR$\rtthread\src\object.c + + + $PROJ_DIR$\rtthread\rtconfig.h + + + $PROJ_DIR$\rtthread\src\scheduler.c + + + $PROJ_DIR$\rtthread\src\slab.c + + + $PROJ_DIR$\rtthread\src\thread.c + + + $PROJ_DIR$\rtthread\src\timer.c + + + + User + + $PROJ_DIR$\..\Inc\lib_conf.h + + + $PROJ_DIR$\..\Src\main.c + + + $PROJ_DIR$\..\Src\target_isr.c + + + $PROJ_DIR$\..\Src\v_stdio.c + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.eww b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.eww new file mode 100644 index 0000000000..bd036bb4c9 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/EWARM/template.eww @@ -0,0 +1,10 @@ + + + + + $WS_DIR$\template.ewp + + + + + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/lib_conf.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/lib_conf.h new file mode 100644 index 0000000000..a25e3a5b20 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/lib_conf.h @@ -0,0 +1,66 @@ +/** + ****************************************************************************** + * @file lib_conf.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Dirver configuration. + ****************************************************************************** + * @attention + * + ****************************************************************************** + */ + +#ifndef __LIB_CONF_H +#define __LIB_CONF_H + +/* ########################## Assert Selection ############################## */ + +//#define ASSERT_NDEBUG 1 + +/* ########################## DELAY_MS Configuration ############################## */ + +#define DELAY_MS(n) (26214400/1024*(n)-1) + +/* Includes ------------------------------------------------------------------*/ +/** + * @brief Include module's header file + */ +#include "lib_ana.h" +#include "lib_adc.h" +#include "lib_adc_tiny.h" +#include "lib_clk.h" +#include "lib_cmp.h" +#include "lib_crypt.h" +#include "lib_dma.h" +#include "lib_flash.h" +#include "lib_gpio.h" +#include "lib_i2c.h" +#include "lib_iso7816.h" +#include "lib_lcd.h" +#include "lib_misc.h" +#include "lib_pmu.h" +#include "lib_pwm.h" +#include "lib_rtc.h" +#include "lib_spi.h" +#include "lib_tmr.h" +#include "lib_u32k.h" +#include "lib_uart.h" +#include "lib_version.h" +#include "lib_wdt.h" +#include "lib_LoadNVR.h" +#include "lib_CodeRAM.h" +#include "lib_cortex.h" + +/* Exported macro ------------------------------------------------------------*/ +#ifndef ASSERT_NDEBUG + #define assert_parameters(expr) ((expr) ? (void)0U : assert_errhandler((uint8_t *)__FILE__, __LINE__)) +/* Exported functions ------------------------------------------------------- */ + void assert_errhandler(uint8_t* file, uint32_t line); +#else + #define assert_parameters(expr) ((void)0U) +#endif /* ASSERT_NDEBUG */ + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/main.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/main.h new file mode 100644 index 0000000000..c61b96839d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/main.h @@ -0,0 +1,27 @@ +/** + * @file main.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program head. +******************************************************************************/ + +#ifndef __MAIN_H +#define __MAIN_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" +#include "v_stdio.h" +#include + +#ifdef __cplusplus +} +#endif + +#endif /* __MAIN_H */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/target_isr.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/target_isr.h new file mode 100644 index 0000000000..e0e4dc54bc --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/target_isr.h @@ -0,0 +1,63 @@ +/** + * @file target_isr.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief This file contains the headers of the interrupt handlers. +******************************************************************************/ + +#ifndef __TARGET_ISR_H +#define __TARGET_ISR_H + +#ifdef __cplusplus + extern "C" { +#endif + +/* Includes ------------------------------------------------------------------*/ +#include "target.h" + +/* Includes ------------------------------------------------------------------*/ +/* Exported types ------------------------------------------------------------*/ +/* Exported constants --------------------------------------------------------*/ +/* Exported macro ------------------------------------------------------------*/ +/* Exported functions ------------------------------------------------------- */ +void NMI_Handler(void); +void HardFault_Handler(void); +void SVC_Handler(void); +void PendSV_Handler(void); +void SysTick_Handler(void); +void PMU_IRQHandler(void); +void RTC_IRQHandler(void); +void U32K0_IRQHandler(void); +void U32K1_IRQHandler(void); +void I2C_IRQHandler(void); +void SPI1_IRQHandler(void); +void UART0_IRQHandler(void); +void UART1_IRQHandler(void); +void UART2_IRQHandler(void); +void UART3_IRQHandler(void); +void UART4_IRQHandler(void); +void UART5_IRQHandler(void); +void ISO78160_IRQHandler(void); +void ISO78161_IRQHandler(void); +void TMR0_IRQHandler(void); +void TMR1_IRQHandler(void); +void TMR2_IRQHandler(void); +void TMR3_IRQHandler(void); +void PWM0_IRQHandler(void); +void PWM1_IRQHandler(void); +void PWM2_IRQHandler(void); +void PWM3_IRQHandler(void); +void DMA_IRQHandler(void); +void FLASH_IRQHandler(void); +void ANA_IRQHandler(void); +void SPI2_IRQHandler(void); +void SPI3_IRQHandler(void); + +#ifdef __cplusplus +} +#endif + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/v_stdio.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/v_stdio.h new file mode 100644 index 0000000000..3be6c23a6f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Inc/v_stdio.h @@ -0,0 +1,19 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#ifndef __V_STDIO_H +#define __V_STDIO_H + +#include +#include "lib_clk.h" + +void Stdio_Init(void); + +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/board.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/board.crf new file mode 100644 index 0000000000000000000000000000000000000000..36d69a6a591386bedd356d505a9d63eda88ccf48 GIT binary patch literal 29420 zcmcJ12Ygh;_WzW-d$SOvil8VX_9vp)o?SxNKqT#D6N=(nL$ZNLn%M-!r_ZHG6%i|9 zMMXr#Ua>1GiefJ$f(R&xy@872?|WwM-n)0R5BhatuU zXW3T;S<9N^nK&%>gfYWoHMP-+$BfA-Eu<$mcg*0L`Y{6rjH#)wtZk`^jfpo`)zmi+ z7|#~m_QjV0hW`rIoW{f{X=O`ta)*y8jaAf^jctZPeUxN=QDCVCD)1HyQUBV(GHD;w&oYsP_S{iV zw4@+^aCAhtG?HIj#A;jjKqmBxb&f{!i^`5YI$AcmBpi*h6I;7D#j>0nc4zBePEz+I zac(qHo|l(D3I$keS0^_Vjh5s@%ECvoqEse2jZJCo=8$!8nJ_E0<>jUwxolZ$FOX8> zx|o*dy6qOJ1qzCbhSI~X)xDtsKyM;tL%=9HB%E6iVgE>N9F0Ixgbi-(;jqt+Mk^a@ zTjKPv4y~P8FI}sRwd1&GGrI}BFezC`8F(y`>U~K^9f_nyUlIngnN9GLS{z;nqalV@ zh>|q3?fx{)?H7NVX7^+3?oQcGC>pJeRm64s_G<0vr0?dYYsOnMWN7YRX2{T0Z1ys! zd0rj2VQ5XeJ9`N#hTd??rdq01AU2TIwkI# z&N62di}(nMB@+Aj5{V@e{q+z_B=+?vNq^ByB>v`UDJ42gSNT&NuCM!39kweyjRu2g zK^W_b8G>{4;y}9I#m#XBVo-)GXE+9D$Z`hdIej@LLzdH_Os#Nwb)r{_ z#>MRx>gv_n+nMdIUY1kY=1h4`ZJ%e#bE?|}AvO}U8`YNQj^We(E>ngxgmc^HI3qZ( zeU3ALvoltMK0VpKh|{Av?Q@*|WN3iXo0(o2Jwi@*P){svSd;xh*3lWVoSKf!kmXc0 z(343FTuE7})}AZcr=o`W+M19&W>d2?F_KU45ko07i(A{Lf_9Ogg(gPwXy9OB!jxb8=gr1&}dFsabbS0E>M>_2W2LB>p>*{^sv_56Fr3h6!>}4Lv_W=UG?)Df`)E?KkOG;=Wv}>>Fh#j+l`jcXlgnQ6l4!7r z*R5WSl%$z8`O`GFW`CMy*Wjh0D2;nA8|HPD_?g7-yfKePOUt6eMn;Fh_4(QpA)Q<{ ztTdc6L}$I8>NAy=IXSs`Lv=1$eq%-8Gv(%zdxoKNR{-tP7Z;Wk7ln(;BGF;&q1Ham zfc3~NjO0h6RWb5lqvNq_i8Zl#t$m&BJW(^4sE*}bC6}%ttWtjSh6&DX@ zS9{~+R$7){NIfmiD}zI~w^Qrx$Tk@%qs8i4_jB_1O3zPe)|?DIi-ZevN`@7ehFR~_ zX>`U0{VNz;Jc>P>somk661FrG%fg(3f@op5kOeca#Joj{3&QX_Qis_|9bBGgMzEJx zAql7%LXzCcdQH&&zdKMR#gY6`>JOANfuezsvs*g zPQAd(j8jf&?y%^PoU$CfnPQVLD31Tv)EtEeNSlf>w9F)SG>KTTn%REosaUg`*#YUP zShbp&@}-hzNqpC$3yy0IzLcsN-`y@*bH1ltvSz*1*W$4a4YlBWs6VkH9z)_u{zi;7 zsV_n_Od~>QM68Lt;LCi)n``Q*_`zw3l@pNI-QEpfk`SWEf2HvwDgithLDt(QxFNW;hq%HTtWzqAN!q8UL5lRi@=_3mw{2G zjOTrVq}N$W9)!^{2G8u!5zoL5eVJ#N^|m#qbf~j!9g9vI;lgIQvbLgr9CY^B)_t7B zp3!I-h{Mn{lDHgtAA2-wL8;^VkVvA`#ENKbO}v>&SYOqvA7|EGJP?gmG-3qYZEcc> zdxL_ccymQlGaKodZKR>atXQ{-hR*P>Y-pT>Z8MoIsm~-Ug+q(Vb5XF1R}dzuj3O3yc$L!}6~UGaVe36QN~EM2t-GN;)X1PVWNd_w zW@I>LxE4u6(?RQCZB2cQ{iKaKwWEvXMMkZ#ct|-G*&V4YFz6-uY&M$X=ypwg4YsoN z5VvDex>6X?BLVH9Xalt;n`~D!JgTG^YvUjZ7w41?NoLl0>yFMW!HSg3Tj(wL zI&TOTtK4uhcRwv7R9jD->ssX`!JeMWq6xx9F6VF4vT{mFlBIt3*yiOIMTSN5%8T^0 zBnkFw-QVeDpNs_LROCbu7jk_ZLpA~qrZXaUdfHHk8gdKW;fQ!<+n?ib{kPX}%v^W` zoF;6oiiVaAV*y`QVIcxkL&L^4{+uzZFefsc*%`A2=a)qo_j-W3hKEaw!Z6aX)Wx}M zwbuhLFRwHlX5+ot_Hy7W>S9wom7wOsjcN1Lky1)ai%YRMx^hHmTpk(C2Kd{UUkrQWh9`(0*343P z`o22yi$>%WK(A5>jZO~tt)Ir>98x^82%$!IX8^86)SC;jIGa_i6O@(Kv}k=pRSdpq za$#G~1NE`pN1tWnpcqHt`|d5t+NoLhK8|c$10oIcH({#7UHZe;9gM|gDfE>h!l>L=1Gk) zws&d@89)}Mls--=y`TqurrR*b+A{`9a$G-JzIJ!(B-0U(M>Xp({JK62jM&$lyx(Ho zs%WmJC~B##h3C4jOF_P$kHVabuu;(SBp34BeKe6+T}9*ghNc)iJmr%0OeZUBX^x!- zUwjuN;fXlRVE4gKOjbrtmanqHikjNN4d*e@dXP)BcRQk3JYF#__K%iWON_Pdl3lEB zSgfLvb^Q~f68J0OM}5WO{HXYHzgW$=QU*!{a=Q`k_|QX4}MU>9RhUO%C};oN%m z^sX31nk$-XDzUHK$C1gNo_y5QS2r}(A-|y>!vjg{N7DGaBaIX-HnR6S&u%dCqD8P1 zWpo3nPBm4dWR(BZ6P zvdc&3Wck))-83wJ4|#4VrqgW45Cwx4IhGcm?`i3pNuj$@aSw9O#W3u7J; zX=@FlW}WnAYbQtSmk1ee#C`xIdOrpds8G`+_P(nbOGJuhoC?P$N!by5GVGBns;Zh0 zbws+>m?gqV*NgAF#JLNt%EY;;siBE|mf8)lXl9kzJ|w%*wX&s&v^d(>RMXH@(>w`b zh+b|k&J?k)akI{I*Zd_SyS}AvY^*6-R}r6pBhjP+qxGHw4}(G`TiLk@o&mD3jnyiA z94!(wO#PQ&k%w2$2xC`)b8fGnVD@5lw zj53i50c*mp;Hkn@kEd#pu>VtO`p* zYKR9+vG`u87g*seux5e^%MqYMG||0h;7*<1ps^fqH@&1d7{sG?EWEjd+qBhg(~hTh zXpLDdLUr+R(MIyY{zam#8@yTswEQ3Kc42i=vz{Ocafl$BQACB}F^WDxgPi1!WT2e% z#W0L!FjtG7$-#_cL?K$vm@*VKI||y3IL*coe5%)H8UpfnogoNEBG_*Jqdbhb)1g{W zhyXV^T!O-36#jiab6!btaRD|P?qvwKoZ0ikS9N#OI{1m8tBwUwfVauBG-xL-6E#Bt z(T#>`c8+g_)P8~EscD<|1bS%g6F@`V{T698TiKe;`s-;}Cqyj_^xh5`?KfztLxdAD z(j2X*Cc9qklCLN7XzFJ@I}^iYDj{z)we;8+T+$fAR>|5nQt>gVpY`l?h?ObcIawS_ zOvA(&+v*a2CPY1gSiKy=E=j@~$ZR9lx(P1j7OG(+M8&YoPEyv!>e;C-)mEY^hrg56 z0cv7x6&B^+hx{x(D#&j{2+mdNBp0*B_x0u~nSp*rV-=O-Sr5;)r{_iE71c48?b*+E z1cv>&p7qa6VHh=dQ}2@1G-2utmrHzBIMPlus?j?$M&8a@%SOZ20SKog zJ2Ra)J(gjlp~1CKoFv^$qI)C*osNZg13Ozn4<3N{nVIW~i8mD|6=9pp@)BbCfL^k- zx9pM{@wn6TdfgmXh-p7>%vrB?nT~h~PrN*m6!F``C!MB|)M=;qHSi5g4G2G%mKExQ zo|F@HN^)X}Q=w5^^cqIXOMFrs*Cib*id71W*%$E2`ct&T+3GUvz)XQXQNY>jj*HQn z=IxM2U_SfzLLtjG6mT`t+2C7K7&r1@jHO{q>y*P*H{kaSym~vdG(`?=RSbULc*ypj z)w7pVw!2rhqPDi75?4f7)nBcv7CSQBTxj3R41-e>cgEEjiXj<_WoQ(QsrILbQI~u} zh3}v@BYiRrU3CqXkS<=y@eK_VaMHZ5)A`;hoo}Xri^AG#n%DkH88g^!nGf5Q$uJD? z-e(v=6?2dops3{*HyhlqM;3xK`qJbUelmZ|%tXcOe$CF0O-MhLVO| zQ&u-M)J5xRYGKb~a5<{j3($B&Lr#L*R74X@TXSKyOn#sAe8+Fs%JNSv(neN-CKPeI zH)cALdN5o+Ly+af9IzI5bCOcFR6A1#0TEb5-$v+kv~>uUQ_~(Ya3;2(TR?U{tp&Xt zN^&d=rK7CZ|9@*-`zmQ>ptJM;TJyAiU*4WJb&)b%F-L%F+LN{)pLlaaBc!X{_`ptO zk*rvibyWz~liAXrbdoqfP0C0h$VY90V=oX=Fmte%JF;Zb^dOV7uEqCR-|}D@T{%96 z$Wh1}erI_|)j&fDdxjd53Uy(-5~&*KlsFHY;bei0-dg8u3kp3JjzGHOVQlABnZ>b( zGb-6;e{Y7p7dAXbRa3Y3S72*oWHsb&%FC!)pHlm#((J6Y0RNVu$v#atw2lbt#lp8Z z|F!P?_wCNm7Du)zSYYIVY^bv=#ACJ9IAuWZeXYzusZB=b487me;o2>QD;<0z;BZX_ z@(c~EifM&99{!!b+61qpMgIq8FU-B`P?aWlsDDpCMVwsb0pRA zq;`c;9RjD2X_BkL_x_bKq&cxFx6BJZ!|U*^sj7_`WA;-!mcE6@QAQ$9Hax|QWm>9I zN?_(S#Zx}VHnj<{^D1$!hNx180n=@S6EMD_9@RIoi+moFW0vDsKIzEGG0ivl7`3A@ zE7iU}CnCuKmmAtkNouo_gcvs+F);mLqyK6#v-?VhWX{62#ONQXvRT?I5zefstf*y= z`z%e2R&h74udiS-8GrjQF;>f-X*ZibSH>Nz1YM-V>Tc?I7 zFsIWl^NEo&vbf3FXvAnGje=g&?fS8knqzTX{ORU&kgluLX}=z)wXQ{_zdvY!2V@2z z3pCYDu^0~b(p#h z5xHC{YHP;TBgU1w^qEdXP1ddH4NY}2s4EWLg(*%(Lo+5fWwk)~w+cG}ceLqmD0JEc zpZTaml&EPE2D-X|ZG^LDZZ1&();TgN$Qhi<)=|q;0dtz3ocCqzghJoNLg9u!K(R>}$FXkXC`Q>s;`{y2Ls_HjDlpR(G~zzZNuSVE1*{uu=5twEHM=`Xssqkrle76_ zyV?A+y3+VKbNTt7)uv~1YZ{fS+(}7I>j(wS*`t3}2m_|Y!QHg2@GlZ$VJWd{o?C&4 z&9&{B>A`mnE9l}-J7#H(YKm1(#H9=WB<@-iQWXI6laz$hak67pTZ*^ft}Tw+S{fbW zgIhv3Vhd_S!el4-4J;N{F|7if3cKqgzJGU_cgWB{X1eK zi3j@pgp^$UC#Z(zK~J};>zdg#m_ai#WK$+!r&8Zsjs2c$isCR<^!FKth;A25KyV|D z2tVZ4s8bbAV=FuOkbqckPZ^E%#h;aLR~Eb^(3p6%Rq@abBG$3e$_`q;A@rd2Y|`KQgGqh2x;7z?E^_s&myD zckH&c_g#Eb(%e*ES=Y#BrW9(=BGuV~v{Hee)4QBTLkA1LP}j8p3zBBn*@7oR*?B(2 z0N;8_o#ii-#=29Gx|0M^=jy~N>F#>;O?o)dK7BrLHyaBJk z36eWyWAVp7sf#@ZsS>UO6)E!>rTF-UbE6YuO>w$27lm_aTu8cEWL!vnu^E3-;9g`M zHnKE4^r$0otJj}2@L0A6Vqz4~)>OygI(_OznB0lD7RL20y4rR+{@T2kbIp@3 z7vb;FOm=Ze1OnK{xe2)<&@DAHub@0K3`a`)y4iHS(=Ds7>E`3lR>HXAr5x#^L!9yF z;?Lt-qS!}aw}XvU#aLWOtn=9fKS@Qu&#gYOL}#yeU(|9g<|j^g*7v@IVIw zHSwmX6GgzKhf`pF%^eOpYN%;C2hM4{5>fT!C7!i`tYpmLD@eb&#j!RJ)Yt!TZMFTM zP`Q5qhCcm7~N`%JS7p#vI3cj`M4BrkDpu9jHAb)Y1C<*@KZ;@@DJ+u zE~-1oX>MO9^1(v5Ce;x3qb1IEoLD9#yzzj38od{m;7n?ZjcvPIiaec!-M$8GWa!MI4Q4ef}+SPqhr%t{l8j*lLw_X zH<5!lXRMqMhe>r?Ko%2swaniRZG&5EorDS!io$Iayn~|n*mW98-%T`&P)Z=YICi!j& zeo5QD%;Mb@KM^E3cuvDpf@c(-f8u#S4Em!jzyiF7`V7B8-cxPFug&*RpWru(_fj9@ zH^h6ZwQakx4t&o9x6d@slD4j_Bk!a5*GppkpwnQtYy0HOGI zf}emEb>_#Z$MD;QAFm$4Z&!YTdI-PW_=)NP{C4N3sC)3+gP*GIMniY!gH-lD35*Y( zfeAhnc|CcKx&yy^@S$oEetYp@>L&d5=K1Od{O-w5Q`g~lFJ7pw!EYa4q^`p6-n>{{ zf!}?2iJFh!zPwz`!LQ;Y)GYk&%SWmi`0d9>sf+QuA3sA)#_#@ojJgQF2k|tuH%>S712qMeq3|^m>Y3Z_#TVUe|;2U>;LV_&tPIt493(ji0S1;P+5ILDk^5 zKaZ=k@Ov01RXrCc2ea0;Kt)e!)v^2@jy05FJO!PVaYa`=@TG7@Bi`BhvU2$0LK=4yX{A^bY7 z_5ld<>$&O!kjHP}YEOWn{6?;N0Sx1dxat9r&u`(X8^CG&R<61L4Cl9TwHrVIU&2)f zfI@x;S6Ki>d?{B!fMR|pR~A4Ce}JnU0RP~RbM*s2DSwu$F90I^C9XCBl<`-%S`Sdp zU*qZ{fD!yXuHFV1$=~PdO@L9nm8(?%qj?)wuK=9RKjG^6whrtJzL^i=UvmgW2Q~(O z=QW6b!__p9oXLOSY8k*k`Hx)P1rX&sxVjbKEdCpZR0dfE{uBpd8DwMmP7b*YvPzy1 zsy9FtpDffK05LvAsNDgo`Bb601B~O-h3X72p3e}f6V$RsbcXtLQQx$6VrR>4(5ddK zBYuV;Z-ONg+_DsJ>&$AcAT)3+^0y)JG33?-u)+j7qGW*82fC^Y(2WMGyRxr@QkH|D z(dwzP^Aent=NzjyM71+(vic}{HL3WoU^AnwJBwR=mHiMTOs+smc7B5IL{plrek%KL zd>1D8N|bN04pbGWV4^ip*^h&Ix3)vsxz>rwo`q8KSUlBu77(9X==CVQrqVj`3VuZ{FtLmg|SR~x-PqStry`kr3D(d!SqE(Yt%xqUKJ zxPV>3?NgNf28!En(rX6@Y$CPip`-TY^tysZ{3tv};~9wuW<*|qXDT&f301umujAYH z0Xx}B-yhNIDXp2m9Gu`swjIK*Ua~>E)K~JsoOhgaJ{v4FxXSa0(r|d)U^|u5k9ln~|IZ9!!uihOXEJc#6RY!zVDcB8um%1kZ0fkzLE}p~}XD+C_MlQpfJZOMZ=^ zli$!wPvDP)ey7(?deJOK+fHK(xt*`U%KSjh{fS=N+}CzO`ZbLju!de*EVYJc<@kZh(%6=P?@gEk zZE|kLY-y9Th})&w(%i!Bh!UW=mD{7#ZveM(d$jr$U@^B(S3d*X&h0bQHVDBIp4Aa9 zQ8tW12X+U~!rGnHMco3;Udpo|KP!OlGdwXKA{&az@hKy^$Wdr;`Myn?(7L}L!)e3t8J3x4p?P3 zqW&kj-Jo8>z&r)*=4vV${xrAArRs~sXSltB!!+6KS#H11)p(%ixcwG~=WMg*x&01@ z4`s6#xDDHWCeR9Qf572C+3ZDbui}77R)ig5oG6>E=Jr?QMP;)$xcx1fYJbPoqxgK2 z+dtChPaJ-1HhYWPKhx(gTrEbix48{Ne-qF<+@2=j7TD}vZeJ|mu-fcBZo~Rt3-mr5 zY60ifW*=~Srhxluvk$pFOTdA(*&3{e0xqo0TH$jGH4mtb+m{G67w98y&lPZNZMGIm zrhw~evvu5FBveb=UhHEmG(v@*L8C&e==CAJ5}1>GDC~M}-y@WLA5GEy^m-7l#cc!G zCme|?G*E<2;-Qm8=wu!`RfL9%P_YP&;-S$ZG@6Ib5TPm_YT%)B_{nVtvkk<Oc~=sY{{n-Kiowo>*PRjyLh#nTy2aXz4yY3=b|TPRH{ zlc!OnR$bxgeC8;Zt6?NSo4Nh6fd4;$ZQ=H7==lfK^G9eb-zGb8C?2S`JPr?Rk;EWM zY%w24(a$-&K6ocK+sfe)z&)|q7vvVeKe5@DP%fd4LU+G{atS2|pd{7>i7gqKyrhG$ zrmYwL7X|iKR6QBBO4vx*9}h^s2Agl7KjZ@2>|5v$`M@^&j@w_86Ku2Zx%~}!!8ZE= zIwi0k+U!Rt7CFQ=`-$7%lSgc`ZQTArsE$C}p==mgpr4^}s1)cIZf_Ghsk9!PjCEwLu$NKVJyM)R} z+_oRPN`R-5rQk+B#b`Wfenk~z?`mPcOtX7AWKlkc7cJh`2z#Bx{@7*h+sm=kqQP`hJRS$HNus2Ip3v{!v zw@7t1&>~@fF0}=?Mc7-Vsz%za!v02T3vipTzm?cW+ibD0zmwQW+w68>e=lJR`m!a$ z-i{%=hgOnDX~@Vyx{rErKVD=l?hx4XXv?rvz!lb(;Z6a67<+7+-6gOdDYD;pLoO`r z5N)?wi1D(weegq~hZ-JMP^&nuiupX3G_2k=@#3+Z(oy_V4H zvE+*+_Gw|Suv7!kGs1q+QguMjLLe+XL(d6&rKM-+d11e5sTgu!5cVny*19XhpT53n zDSIu=!F;UdBsVV#tWDZlza+5E!&+xE{Ap_&=r(}vBao~VD559f6^NFl&GV}eElUk; zJDjb8K%tMfVW~6zDs4ypqtki~_O7o9`%{vD2SB(8->*Y7==)iGCr~~9e05$x**Bnt zRjB?AfyS!KfZoLX1hkQTOJMV&W+UxwfgKD&1Tg8Cvj8GTFzEt&88|X9=~yoUn2N*M z`&cCcD#d5k?q~+bS-Z@~pjjVa4M7v+W;AOtzCRT93-mo3-|O(b2HHU19)l;)e9ZyHRAL2<5Al$lXLh+jf;ZsNydpeX9sffGd^Fz90~)C(mOE zKEK2t8mmx~47KnD=-pQ$RIiLv5;{jH6#QC*{;g(Wa=sCv>0B>a---|dUbGZ_Cqma6 zC-Zv|TFliMNc%yA9^_j7eiWfcDAERVBw*0hAQ+Nu8o`a=w190FaEW0vJF=fO3cbX! zA?(b4F<-C3Em+0*H1zsc0e3_p-*Z1+1_p%ypB(~TwK@bPf71vq3ArP@1}VS$Qph3R zDd2u%7uu2ip%FPP$AdBev&j;93SOUaYFfGY80Du(_#Wy~l$fd! zd?X&)%Ap+{*))>^_h$ht#KjVM%I6GyidH)g5&game$yrV7WHqGo}m%BM&yUil-L)* z4D7*XY2>;~KZ3_L&c}gfw#2ppCZHpmqfrR1R3*|ck=RM7aY&!55xH0IBmGhtf?vD_ zXr2ts7l`V?^2yLbpk})L%m!m`+cbI(Xt5+O>lvWiH6pXKL{eCW z%+4JeJpr^-BQijDO7ix|?A)c%!$5aS^8OwKTBZ@1qI)EHgZBa5s}UKc`y_dXCM6;v*$5z!p?h4? z4u3w-a*b$leL~9O1fL7^q?9=9pdHLpl6;YwKu=2A`MggtSXe3apB)_j5s7<3XppPUu zH({W)Ql6XOxj^frJda{8Hv3r0NeO-`(0VD)PhhKNvri;N(@q51ASt*=6OW+~xY41^1^MZ)qV_+fybOF0?vP{6HHN9Ya#{6gxe;X#03 zN*%I001Up;42bk=sa=$QfZs^%s3^d14eSf}oz$Mo-hkg5*az?jsRLYl0{&=VZ@{0V zj(GJ1+$MDZsR!V81G@wMEOj8PE8s5%b^-iVN^*&I1KeR?C&1qf%m)13z>a`BrS_ac zfPWa61(>k3D|Ip8WCN!GPO;==;5!9ys)3UMr&*Fbu5$q|HgF=~bW6Kn&44ouj04WJ zv`=;p;4A|h0cTrs5jfNU&arg-t{U(X17m=5EgjIKbH+;z91A$llDDH+6!0=jyLo2< z&bQ>%LlyH zk`Dn61zc$95N{apI!n8jIe^z2I0*0tOMVC1AmEJ#24K~1GB6vF(gTolv!%m+9B`3= z4Dc39Qt)Lb;H?J!4tSfTqk}sD7aRC1;Oz$f0=UG|k;CnPcNn-0aH)Ym0p4lpSmF!c)3h)U`E+DDr zlZKX3pR%;8JOJ=%14(J0v2-Y(H1Syj{|5M+frkJ-Z{WdzFId{eJ`iw)fix{ILVi#i zDey}M?hE*`fuzeTAypvQ2k;dGNta)>bX0jSz*Pp4F24q`18pzB*A3hQaJ7M?)^8ZN zJK&p^_N>1Ge9Mv)_MlOJ+masw(x|^<=^!wT`n#4sruY=_JyVP(;C)MnvNr&JVBjZ! zA6hzW{4wAf1J?nz8n_m)&A^WUKeBWjycKY*folNQSvoNOKH$d&z6ZG8z;^*Zu_Oh} z-v-=Z>Enqv0XJIuY=@$_n+(AlfS+1Aw!RARGXq}*+-%@0fLjb)3HZ6CcM>lFZZ+^l zz%LA30r;hXFF?D#vgD&!yR%_Vv+(&fw2?kx7fHjuvGi%qXMo>Yl7bF2O5Yhsqx8Kc zpF=8*(hmmGDE(;37m>OK41coZOT-Wk!f(jghGEAiHEp|r)U=;5aY%gu@D~H02mBQi zhty{PcNq9I;BN*#1^ByxPXg}5%z}0~;2#D)4wwk&RML^j1|ADI#XwS*sR4avMv5`b zz#{=KHjp%DdO)A29S%6dK+>F<29oB?GO$13?10>eHtY{LCm`w2gS6oi14$d^2IQwm z?TcZ#G$1zvN`yB$AZK1ceu+;K?aK@#(VidB2SVKdFE_9&;1vdv#k$hK&VW}1^tn+d zz^e@;i*=2G9RU{@NVQ!X(8o(Q;6ej~fY%uq0KDEn3-E@3K1LLPHyTKCag%|x^4=Vf zbe^&kaFKzu^4=2A2Q0Mm-fG~lfVUY)EAQff{0YUj1Kw`nHozqT`7=^!jlIJ_T4R?6 z~?pO}^q=99C zPZ<~id^#YffPgIQGXXgVFb`XnX9Hp{9G~?;^sfVZE+F>7M_+7MJFw>iVqbjpL#V6+ zdm$hWz{i1zwglOVfH(wU(ja>=AP&`MS}z4ee_W%0&l?cfU)%t+G9a+4xDM!*0G&}@ z3-oG09FySJ0Ikx9Jo(o&x(euZjjjY*9T3=GkQe_(Kwwuf59rMRopO>F|5iX?2SHx^ z+Zs`@0lljcdG_xG#7T564WBn4PEK$Nn|u(Uqhs>tKMaUL#-Cpk5IG5c0n%Cn zVsL_!7vHAoEJKL{OP8xZ;Wy2rYJ7>>AXkbN8w1?qK_Tpti{ zCB_4N5)jxikf*&NAh1s$PkW&q2<#I^1AVFydEcJ}sFD#tn*&r8`P^Fq0y~CM zpw9yWJBAXVt(uO~z6j8{ZvoJk0XqFX4d^S4@`1h%&@nW5>ECEH80cG#$Y1|1AaFQM z{`&VCodWbjfDWrq0{T%S^4x#Y=mel`0a0T-_w5=Ti?p8ubfiuG`Y#$C3G}N*1A%q~ z=&<{6px-na0Q9>?hXL&j(7EkFK!0d-AW$MGu*bLwXtG8(VsNJf#d+#?fT=+-Nng&H z78L)|2c#DV#RWLK?8c@Cv%4rdNl%`k{|#b0BbeP)(SiCxe9R1HcheNt;bT@XySpON zYruAPFuR8;M(Uhk_U?)<6j_R0 zir|VM2oG=r!F>T0_g$nFMGzO<6%qH}_srbfo15mL@BRLNKitXp&YU^3opa{QncI)= zc3@0!7FgnCkxgeYaeD44BMT$-4dJmTjm#-89$A)?TR5^jQq@o~Iu@y_9a&y+w1rL> zaNK|sM%FjgG_=%4M#d7O#|;?Gwyv4T zO~p*){MWs#ja0W#`)gC9j%+Gq;*9?Tzd9Pt6F2EO{B6_UnK(Lw8x|!ucjVyurjY{% z*s~u`)KMudxV&S8%_-64vC z+`@2Kusj?J=9ZS^v3*A6)U;fi2+aY1Q_ z-R1}{C=^dt+}h2WxsJ%o31Oit*w)s4tjxVqgyEvnp%_p4;_FV8lvZGE@ei$(SC&<< zM_g->TKtrhV4xMjb1K+;rwOHjdBGt{!5&qDOQV3o)-*S?#OYxjTf1953ZO^Bg5{xt z(h@e)nI+_gDhHPqR&ZR4@-VhRW`IrYhrtXm!7_y^4$DzUQR_$xMDS(k9?H%dPtcpjFd78Tu)jIbXNQ~}82XrD5i-B^M zt9qiok*Xh_ky$eanMb)Y>l&&?A#;!`GhTl&Rqx|!2R0IU^Idt-x;o_D*4o7q13wn2 zqP#N5#w(#F3*P}*Lvo5jL00Gp7p)~^bD%PR-@4?5@-e4mWuI(UfLW!2r(J@i%r9l1 zsrC<&QtTgU54UAfU?TO769|X(P97f3Rl%+n=K0P8X0BPgKPcYkHW#y`EVu0OtXh~%* zDt2)yViT+&GjO-lI4ySxcB?$L#i652%DM`})k|Zlt&$CM(F_mf6e{V~G+M_S>YF0$ z2WPnzFWNSXOYGcZjy zET=rhVws~L#b_b7*q)A%;~2P0EUuS19mmQAhruli7X?d(R^&6UtEjj*T$VF5sCVDp zS&NEuLWRtiwP~m~%VB42Iifsrk4h^mSe~17NM%tGJKd!!!C-M&#R#ZMx(^U6DJ9?K z`^?PHh!A_z&2n&MXapPJ?qfkI+w7)-nJs50y4e+!49h8kUXeGQvfWxI3tgsIyR>4<9gRiUh48XcjqRIBR@{<^jK`+52a@1e9Qs)g_@OB-RJ!8i4JH-6p6>HMn%qUiL^wZ6nkP9Y0QsQHDd$aGf^3wD>hMt>%S*Pp+r@pzJ@J_&}y07*O8CfJ6fJx6c&DhA7bSuhQ9(D5dYl4s@mSJzzOyugPJZEBSUUI} z=?4pazEgUW7tFzCGAyS8+xG#=LnmuNYo12rkSuebr_}*c@xg&S9Lg`PfJ5gxaXS<^ zRTq@z738w-FlX8*(HS|dnS9!Y)jK5S-_X!$)uQQ_rKQ}8@*d2iGZ zTbpHGY#tbs8q#XlflGJTCbEY$DNC0_g#~5dqJj|ZiNk_LY_BXc?9izF?>v}nEiH5+ zAn!j0=dY_4haStguemBlDq2StR~fZs+!KqAgIBblWkZ+oy{KNa1+Gy`Qw{qVc1v5= zWxOM*!vZG2br5AMSwgmQq#&(h*bw4lW!rpI$(JshthxsCx5{xsv7Gu`7ebr_2LYg!MrX6(T1%xD&9tZV;_o$CBtw+84&wd~>$Q&CxleZ>{|Nu$uSb1AI6Uc$ak zhZKk0{G1Xvbg5_>J15&bD$0VAA*Jkj*Ve2f)@&DVkaP5JAD*VNwH_=x%~EmvRv)54Jm+Bypp|)gbE^VM~cxp)uV$+ zWl3QPxvQRbHL0{b22B62R1=*K82T`&R$klT3Up|2Hjy$y)Je=ed1?b9obXC zRRncaB!B|QF=wYiKXK`nfC6F|(K>dK%R(x@!1C18p7;nx=sD1f2JO=pX*Ju>+KC;d zmf>eE8n8hhV3E;zgG?PlrI3+CxT=o!^*WpUS0c|#e{Di^>p-hEd86sIt0QnpBRC$U zTKj{l=cKCEu(4Bwhst}P+^=Q@<;`r9qtq!b+Q#>F)+$wiafTyR zHKW0UqI%??*prbe3&*SKBCM0Me`Zz=Yxd)u-9I~pW)yXn-X^P$Vd*rNnXX+p)J`<& zFgiU)&dFKHM#!F}*)&TlU9+x_%~j20n%E4Rat={0Pk(K~;lHyrn{$L$o$+U7VWs7a zHQ9CN605t@Uz?ye>0+$=KnwPQO*Wru-DNN6e7&H|?!tVbH}!ayE?CmmVl%sqm@PXQ5M}kbIkNG3miv zh@a-y6$`H$PAS4JoAhpCIair%yP9E>@^o&vu2DcnL?m9FjEg z+s`GPx|1|$tNL8{2D$|VpUW$X)kV@mYz{gTH%7&&Na93jR2OB#NTcEt;`pq<+C^cd zV9Y*;S9TOdODyk>;RL2D?2ii8S$9-~Y#K&rosfrNJ&)>%N*%CR>GyT*Y156A z9*VvI+|-`5{rtoe(Pl_jyA{HI<|kS4)HK#2R8QNRdZl~B*%?ws0zp1%4351(NI|bb zZ+m8GOH-3f&bkucCtc=2ce-YD1d*c-&h%U6AzcGCCH6D4m{O=q+tofmNnJvzkyJX{ZIG%=O7a3N}>} z;6J&IYnJvJHRZ8cdbej~%QDoIw$c5PoSwm?Nc*r?so(+L`o%=q}kRe9vF0Lz)w*wd<^NZM;@z>T4S! zdNcc>9ZQ$t(cMtwsg9>@W7$kqS`DncqIk^Z*rs`nO47TPBE-C@h=C<}BmQbNefmm; zWG=w5MC%`^vNr8C2xr#URMCMwT|6UX#qF}bu8OJba6@Elq=7xrZZ%!5j6GSYwY-3g zwlYS6>c}X>npCXzaWdK}w*v*{RNgF?7+EumFGZWR7;T_gP&VDyR6QXPiQ}uEZq@+l zW0gkb*W)`zdq-_f#Bguf#iH?prY;tV;A%gEqCMa4Rvik#!IPi^1HNH`tyk@vHPIH_ z@hqa5(3^~kv-NOw2a`;-4r)habE#^mAJv2ySGwubg9z)Qg_#{qcQR-w7Tu+3PDV6= z#Z9vo2>;gNBw){WW7YVu${XX_J{l1vicP>o*G1VjID0y>Mgdss%BU!3a5`H{EzUwJ3SG1Fp^l_@*r%11I#)%jdo8r`Tdb6)|rca zkjXxiFoq494lW{-aL?OiCY#h=xs|qPrOZZSHB)B^m-k_xK@g-?G3uvj#$B3|xuEF^ z*jTOCb45lo`&de<0?yT`)!f-`HUF%w3_jLce)earsg>N3L1imVchLP2x3=Fci& z!jw4Jhqm=@BTQqa!(93ZKbOa9HE@O%5+g6VsXUH(^dat=G z$k@2mTvw;L>Xtg(W@oB~-5cFy6f3@7@Qq^^N!OII@g|F_j_xYEq`BHoj@`lZv8OsS z?aw;Xo{h`Qr<(8O>J~{0gsv&do+W|SQ5n4Lc2QyHv8Wz)HtjIxTvzRc4OItE>Ao1X zZ>Akqo!Tw6de~X1FxA8T8UBdFo<96B4x8B8(W)bA*d_F$EFOZ+qntKT66bCuS z;l|2VB)lK5z6I6FM&2W`@GpJq)Us?Zg4PIEN8&YAO?9lh!}l*NT)Sz<%B49V{~-s+ zj=J4T+XVi~+NX~KENCUWITK!m8zg(ls`1A~>Bb(DR0G$6s#Lf(rTFORxbWCWEKc9d zh2dOk7t*=-R-ZNFZxif4VaOj|9vphY@%X0Kops#FxGuE6uvb(A@iBe+hcLNimH2Wl zH$RBax9HQhb6GPwqd)Vc>tOtyn=URb3qb(;SYJYJ@pMZs98y#n%Ey&bKf9Pd@3iZx zk8}(0_b)+wzAG*1qD!37-b=_ISxIrg;t%B2GF}I)_3~{x&q1WR;m8fY%SKhIv&f`af>9?ar!7#>q^@A zEgGxi%G>@wcHH7f9lzQoT-LzoV~Yg7$4z%5tfKhnmP9Rm^Le0i7}{fm(LR-;|EVvC z(#|Y&B4(Xkhh(&*Y1QeX56bih4|E|=ACHBtC;~ouI33%s{)U6D8tP*g!8wiBAgZ4F zi03DdKNWL$1JbX*;`qs9s?Yy$&T9X+SoR;7;ZM!*Va|xmb$8q!)w@AtXVq%>#^NJu zeDXB--`7x|D+ROENDud7^iCTss>&-_s@T4MYJA(B_0Xex&=G0tc$XntPBRFD;5ggB zc4ms7Lz0rv{iqqW+nYL0u?F7;XpyB0CRgt*jaBDNeF~uq8bsx=WvX{05oOG2oRhG% zhHxOU4cd-CT{GN*eXLHTzAw{C@?fUARYNHfv8o#SYXZC9$^@P0yjx+9^e6x+3GDr=Wz3mFky`j}&LqP&e(nlcprw{L6pMny-@_zmhpjs- zIR2PY?FwZDCF<+aldu8k(jKZbw#(NvbN%J94jBh)Vbv90w<}^@> zlkwEyxryrDNy!>YCW5(m0t9=vbz)tNpfrYHAVbeA2FI>OpWDnDx|p) zT^4tsmKQlaj0>bW!;73Zkkb{d?_-RS;!AM$q2j(qRE`JPe#XU8yg|KqAIV~r^fWG) zb(oo6ULQF5WkH+C_V@0U+JXPM< zR>1zpJWYyXaGXhVyPWuMrDPi=n`i=BDQTnRJxac%AD`;#9AWXgi$^5FgO%hm@$fN`euOSP#UO zkFuUI_@$@8dd4RCSy+H$%p5r#>wm17E5-3i{z}^+>^O6XGz-w7B0Qy_$Lw${91r8U z024isRO%FVyg5{wSTwT)&r%w}G9=3H?UN@08F=y@eG&!7PyG)kJ>| zo`2v0cLDCA3J-cGAXDNh8u3(0rc*M55+x!emEsyCBiqW^3F2CMT}a6ymC$_LP02D! zlsv5AqNZ^RA)3YoZTo=fN9vV2{Sgv=QIfC3jGbtnB`;~qV<(w~ z(j-YRA14y5slb{lAs&X`k$7tGP?rNxk-$-SU`t3!16Y&*7UOoXJJ~FPsu!}qnZ?qa zNSwZ>5&S^OE<5>=kV+;|r#4ZdL{X`Q(unV=E=~4J;5yJOkqP|%-7J+c{GMW#%O?Du zYKCM3eor&cff@0#LFNcqi{I1Db7eJt&oIxE7r+{wX+jg|=?>Y*@dcn+o#Z|s80_0i zE<;|f4>sM`MF!gZEYH{NOkXc~CKNpAJ1ohM1Q_BwHp%;;!cgDeMX+#5V>Fcv-2hMV{2=V`VyG@en4luxE_|Gw;@&t^2gt?l_9q8t{ z=7Xp)1zG2r>$%(nFw%UPW8X2^`R3~!8;{BUVZO=ba{yuUZ7$aXTwreG@+p8Sa}$@3 z15}%vxqJwq#(ba4H2}5d2VAZOh?pO8c|Sm%xs}U%0Y;gha=8>>wD~!QAvRgP`2~k1 zHra*dmmGUjfQ>P~LC?%@x$KL#26HF9{lMkEcxyCw)7wv6?u9B%=0qV)fT%f1NDn}> zIax>naFIDhNCpryuM+ZifVeqT$X@{x<}@LH252#-3%MI$tT{u-T>#_EnL_Ra7;j!J zz{~+NX#QkRof1&V~3jaCWKSKCNaQ}J2U(5Yb?!O3T{V;YJIOrOx0^_-$tuMF$33~H?jc2Fz{DR-4;QPaVUP+D1G$n8}!BK~e)H9_MPVy<` zDHU<_gp_4+TQ@M(Dr4)7fIdv*=5s>+t8D-csY!kqs!rx`=;WP1Q#iJDc?Zx{w71LKfTnUR4P1)8Y#IksDF&b>v|SvB2m4xT zm(OeKiNBaNccAGj(5mqel1|d zeC%3oek0^qpjpr%0bA>1v$^@5fVK6p>$v&7kj+4IxVcln^7`2I&@KTx=VLc;bC-}8 z0^P{XAB7wZG?$yZ1uU|U-2}Z8u*m^7kDGsBAV(zm3gpk{=r9b3kKIfHC^rJ#0@*X< z+d#L%nK0zbK(|2(4fzPr?cBV@fX(o+JGgnP0i)q#3%Gfk0juF-cXIO%17^d=7IJfe z0lVR2i@3Sakkr~;++1W}oqTLDH}5iFOnht!Hy0al@4B+Pxp_A&*-}F)H8=z=@KSEB zpuClatb)6=jGL=a`Xps7r(9 z?%~*9_0xXhMQXrc^=SOZf-Mh`0%lZxcQMGNkSgx=EsJt z0D6R*pBSP(V9HjKAz4FHMo!SZG=lq(1cFIU61AR=H1cGiXUM0OCjvc7j;%Z%=s7Y; z*r0uE1KA~cH_-FkoZ^v-fL?$j?@=oBA~&aclnTAX&1oK`LNAj;DsKVZD;%B~l*z|l zC2v{Y0Q4HU%yKr+>*P1fYk}S%?^RC2Ui~IHfHH74->6e3`0o%CQ2D+`FTZe*=II5^c z*$#2@$YYTAF`W?P(QU`DPatF%=OUOt?Woc@vP)ml0Yx?3Dwz?>|68 z=$%}wO1$ra#Nya5$o1_2N&1odyI@o4s*b0-xxb&>j1BWA?mrxc&SXDhe}$dv%zh!@ zKaT5v`=IDoxOVbMX#Z~nln($0fcwwnbCLObX6B8k@&`OYxe}#G0ibq&Z2jC{$~PeM zip)&%(XJH!Ve$ZM-4h9rUqP;g`ga~&1^QPBvPr^Ujl*;&Hkkmq9JR20CYvJsW8gz| zVpkFHH<2qs5rnD2-zfbt!{5UH!04t4f0NW+ivJ=p6&0ro|7G$^EY1w!pTgx)Fivw$s1_#fc%KA>5`{~%XpeYU_R4~H@Hee(WxVY!_-Lc!YmkB@oV`}wZ!arNc2Z5Fg|9l~r1FaDLCEBl9Dg5^fgflv_dqf8xRKyRPzBjv9 zbU0iF;M)YSNswu~Pl&^loYwt*K~4>|@qj{)0<99{S&=bZEy&$j3-q86M<+S8yGE6g zd$3lJ-}C^`Lkf|5@US4~=w6^lgutP0CD5ZPkI-X+JS=h)9#@FAo+ku(T(tE(sn8Oj zrv!OmcL6=E5N${61jSv*qg$`g0-$FUBH!*=L7pION6#sAGtdS>p5Z*8=M|zY>IFfb z;*CHrDny&rOM*N{@-SXj=sKWR1bLFPfL>MTTFmKdLclu@9DpNbNA|j)Lww*Uc`#_+ z5OkWq1leyY6gXM#hnKg6C<09`q!XK(pws?1WWS?OAR@ORd!rDgNly0mT_MVn{34)D zf?Sp+pjIJ5Nu?}pLR2I<`GM~VQJLhUfi??)V<`#U`+@>ewLl-Jx>UMFkkdnc%ZCbG z0JK$*6Z8+DZ9<$&@epi1LY$Z6=K^gP6o@zn=wm^_tzkf)s2a2@e=5j%3ITnl5cx7Y z1O;Mf2mD;2QlKvc1!jtYzEp_3ny-YYq7V{x5QPeWzELP2=v#$`0(~ba43Y;0_+E%w z%pFERJ=-bBB|IJI2ZaU!?Gof7o(lA%LZ<-j7UTyV3G|Z?nRd3}NY5EN8904Qk?KN7kt401C_n66ZaglVE7;C9>y z?_`pJ4J*m71DtG#D*$H!PBBzq?i#?W3>77u2{_eIk-F(%FikO-1&co2P~J-bVzeAI zGYsX&Oa`2(;UvJT4dvKe33!c$R{&mXsF>H~fU`8b3=C%*DhL*U(9A{2b%u&9O#qyu z;dsF74HX|73wVQuEr2%~g1n|U;9L!3fH!G)5#T%xn*rw=%DHL+yjjCWz*`LEZH)oE zRl^GbZ!^R!@Er|!yN06x?=S>8W#NFdy(=hFFYhLBQpP@&t1MR~TYBat8sfG{g$P zQvvTW#65rm0q-@Gn|(6ieHxwwc)y|i?h^nX(C~P`Rfc!~)s6vNZHQHXM*}`+r~vPg zfNKopeI5q5R>MO9A2P(Zp#1{yVGTbAd_=FkV_`ZgF1AbsA@4FM=77YV{A3}D}njdhhhCaY;8k&F~L83t5 z0o<;k0r;_@BF!A|6Ac;Qrw}>N{toz=hQ9&s(C}Bl&o%r7@C!pZ-ERVZX$Xpv(5!!D zh<5>L*1tAX6qsiH8$;bqya@QMu0{*+ouR_p8vwu8@HxPphKd_M1Nei6>j8IZxDN0~ z4W9I_ypk3h6Ddgq>UaKJ)kXat_401_QXM4o6 zfTsao=MnD!Qg`NPNZq;KBQ_$J`f!7WhXLN`Q6cYx0q1IX5a3N3_6MA&VL!n69(C8% z7w~2c4+OkLL(+>|HS7a;n}(z!w|ms>7%9UY8ukQSpdo3?ogQ^_wh!P!4M|%TX-L{~ zmxkQ{7h~2jijIIwFsXo~0e5Ri8nDzOwjR}xhCc${qv0;Vdo}z4@IH^aJ^CK-eht3^d_Y5LVwHy90Iv3^OQtUYAJmXc z>>3R}2VAQmnb?Os>ca3-z=t*b1n?0J$=W{Z5p;?25#VDQZUcPWqi$8m+CHHnS=%Qy zBy0PWNBn?ln*pEJ@IAnF9S3T;^?ODLrG$g%$T|?6QH#8)@f77F` z=AHt4OGDE8w>2cae@DZ|0XKRC-7}sF_^yVh0B+Lo?|`iyL6LFVQQJIX2H;WflHc?2 z-nd8WgUDM)w%NlE#7kd!E?(aE@P2sdkJwB{_JM~Vf|o<(SvdA?@$e%cS0?+=!;h3- z0c`c~qvRKGwYGUUju{hyKJsuJF0KID?xD-d%Yi=j@RO4KQlL*1x&-J`h5iZjnL-x> z?eK6MGsXdZ?%_CGv;ckKq3cfa;J@^693;qt|4N}|psy8*0)3+pdG+6V_-RQ_QIzjI zd{B~86y5puK3~edN@uCc|gB=I6UmZKz}Hd1C;b~ zoDm)exu9#ADU??L`Fg#sA=R^(6j()IJ*Kry5znd=q82c0L@c~j)C*N zbdfs~=w^jx0Nvu{I1@|;x>cb`nC;uVd_0bGCcE9sC&&*0?(p(|%J%^lc=;u`r0UG> z^ags!z%e{FTn5(!b vLZkdRFj?%yxiL`B15td%!lMv_CEma"l>Dgw<$Ai=l2>%spag!TVlY60tq literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/components.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/components.crf new file mode 100644 index 0000000000000000000000000000000000000000..623f7596c61a33493e230ba6e87113acefc1176d GIT binary patch literal 26381 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/kservice.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/kservice.crf new file mode 100644 index 0000000000000000000000000000000000000000..d84832c9ec169bc8b0b8655c3c76c1148176ec4a GIT binary patch literal 32878 zcmcJ12Ygh;_W#VicXq>GkY)i<8S(cl&+^3f)Td8E2oOm#ML~IQUr06(Ni&;(*j|v{ zq)L-2O*)DQB8buv5m6M#iXd1(5er4S|L>W(dv`a>Qtw(m6dop+o14Ku%#+x3WM^UgwOgn;mrf zEiG@ky>mfvZec}UpmSMyxgxlw8#}PP?@__<-{w6nm~rVXD3gegmIykk;?B3+;tp7_JTIq=S~79w zcSqDnJhmr|841|Wk85>^J+{wNy(u(wqq_m8rtWN%v_>OEFGm{=oWOJ%6b~5TBBQ-uHQE_{)>S`ysDU!1@lTzFH6C&+R zN=?dQO=4=)G})P`GbKJLm7S?-;c&Pd94IL~c$ryHB)ay)G0kd|*gCtNU-5n|CPVXX zpO)5vjg5?x+pw&p6zXYO+blM<>Pn~9OOUNIoSC7~VntQgIQh-0=SMYbNG(0fOiYPS zZ=aTt$eKn^qcb+>UvlfTj%-`zHdVV+u8V%{>-k`vjYn37Iv z>+H6A1e-)EBq`KGNaESM>N50{1hBq4Q0ZxzNgdg(N|q>xWJ!;$%JF9r39CHQP=O!EiJ4FQeeKS#!icDwCLf)jLf98 zR5mm+N=VJjZXM2;6eIo_i4P|!`uOPiaO5XkWOJ2t2DS-!>EVmdNNDeG6Q33D&+3$( z$a-O{ny9h&m6iJoip%fzm$NLiOefkpvE^Mzy{3BV?YANIPt{ZJx&x^)Cbh!hyBA&1 zeCvWQr7Fe?Y9uSpi)th*)^lT8+@++X5cS;{o0t;}Ao0G~Ms(4s8z3>d5p~drKv@|m zN5m8_FDRno*H=r-?T*BoViNNUbGjn&{+PsI!BbTHikNz!Bat>SCaoktA8Avn8aQGQ zhe^uH$WCNWDxoG-UI$5S`GWU{on%ZHyo( z^-IaE)c!$Iiv2@v{;o_K7)ZUf*nYn@0sP(A!m7)i)JD2Ma#CxzNTFKO)P?$fe`Z#j z_>6W~oe9aAtV^VG*ltiJHIuc*0BQ~3!wMN~yhA`M0kOH+-aE@<|-C8fQvXlY}lIvc8fC4_s720s;CfgsgaIpvWMd{!Yt-R7Dx(eNJw#qBQs(c#O63$pNljcGne=<%rbv+Vrsjr_DsZN zrKI@NQe zB|WPXmP)h@keHfAw#%{ViJ6@;*~hUgTW4o>VzyQI{Idmvz^IECZ!}dff&0k!S7l8E})@x6T;=q&T z&^D2T(y~Ag_6(ZitkH1Ea@Gu0YjzhQF&N=@n_K+fnqQBY-BMGQv)PfQfO$x3{UG#{ zzio27t1Q}~R!0e=f|4$e2Xf2VFBm_0ACz!hA1;b>iUKU3QaniENGb1C8ek*`ZVGLr z7!9Oc;gnL!ynBoZpqWGQbjAv~y9MdcOWZnX+Xx2zighB)#w!>Yu|b@S>onCWe}bY& zttc#H&*9JzrXbTYhC;gv*lH~DFby3HVrVi0MLDJ2O3DJPJB+L_*`?LVQYy*=PcrMb zND_O%S->uV85-t7##&5eDLDm&txKL{U8}BhiLR_c6bJ@$x&|Jq2vh{v1HZ{GP}Dw< zQ_6b$4pBO6EB5GbjZ_C)?!_fNi(!TS z2BXaKobrNPSSD9FGI?o4J_?HSOUjCnUsBAfNYYx6G>&(q@gb}eEqmj6-4ZP?N(9R& zqY+50NCsJWIJLOPV44cOGU(vvPk^FhpQAHc50LEW}QObZVMfeqpE37yRiC( z7X1%2bXaw0uCAq~gshBY9NjeuTkxMK$atfQ*os=l#pQuMsV*&xIdAC(yF_lc`qt9q z%nnKE{^X=g+7cg5OlI|J8Q}c4zH~ zkCW{3Q8`Crbh2t1)Zgn78x+&2k9C=Fli-|yBRHL!1U>wzjN<UIEBp&1PLe;g-h+S1XGa3cz>x$oF zry4&lb_M84wd~>yla-wg_g9SLCyGLk&a=?+dJ3CI8l*TRw2x1PJr{PSv5vKkqoPbo zZJWln#B9yl)6Gtj>Qhp@*4dh`b2nn7sQohmW{KXK*K!YS%|TsE?ad%kit#2Qa#B3y zD(Q`?dXCty zTJEGP<-3wNHz2J{oXg5e$`~EB!i^SSQO=TZb_l05%&jP+RqQVOrqXLW`H^%CL{!ZcaR2)Aa>{dH zf<}8(!tB{&F=l&GdV)6D+9p9NKBzrU`5ae7PFtv*%F($bJGDb9S*uo!l9Zc~2<;DV zqU&NtNm^KRplk~#B%D#~G7P8|Y4YiYb5qmUWMo9l(}L36umzdrD&T#t0&YpetR!w9 zuOEaL4d-dUBi5hCn9V`gI-42hbHxFd&$T2x7hy__1KiUirx5niYAD)pQk}8@xz_`E ztQ>_St|Bmn@*SfTEKN|vS(%az{~w%{HQku%bjISrUH6jwX%LUXF0ke*-KHIOo7SA# zp;pXcUZ*J7)n7_BSPqG{YVct$l>A@rcHwY%Wlbjuafl$Bet4IHfpT^ctsp1arVYwT zAA*fh59VQhX?QS$7*U9pGp1josO~-;MVw}12);cM zN>GRZw+AjkN_+AyudO{VJuNL6hYh;IpmGh|a{9mzRpMSqDBmi4y2=qi{^PR9PJ?#h zvaTEp5Zx%rXHUdvNM#o|mYUiV-$D?So0r@2vx4f;xljLsXR z>fkAbjFkIx@@ZescgfEZd1CZuF-yR3=}O2NjV|3K0FyKTmsPm73sk&y^k*?#CzmxYX&#gz02uy0+$-iA>O)!M`%Y!D_afXtRc*L8O(`xvN!l(23Q`C(Oy3IoMBG=$sH zkEm9{-ihUsWP zPJV#ZjqIN_2sHbik=?&`3eBh_GW9N5K^dk_a~T@53uo34jePV@k5S~{tYjn89ip)pYB6Lw-4ck zaMC56LoCNDm94C0msE?#yolB7=D0#UHFBt^k?Dw+5fQHlNtF0q79*W{bg0u#@o}&X z^o9xFb4FH*x<{IU%|R#P!YC!|NbG|Z)j;VmQZKUkk6M z4lPZQLz@?X-Pa8+zTc~-nNzlLq-;)MVM#8YV6ePDT2~=XWbEErsB0OVf}k_5&QP?e zrC2SEqA^wWbbIPj%uwOm6Pb}KY8$%z0;rG%k&@j?O1k4B`)a52O`|$rP6Ox1Zm($G z|08AeV7p~@*Cg;3;nG|q2^BGE{ilSro^-wC8A~5k%LkgDdD~x#WK-C zbum~v!cBIy7VWpNk?CyO$W%H89Xl?@w-E`iP&WAg)FdO*=&w)|x-?0l!!;KVhJpe1 zmnxgx)PPu+ML{@qqlaBl=9iTe`HKn)v3mw!a^$gfSn--083}Gv;Z4wOO~AIL^RK9$ z@7V2XvHTNCTFZ(@yCP;s#!PuquZQWU3E~`|1NQSqPEyp7>O%A&zymAkTMM1?wzh#f z)$O4TPWu*A3$kmrpov3Cn}Viv7VD({Z;h*2CCv=h?8raXJhi?@)ufG9Qo1Yp{%=oB z(wgHFEH5dAbk&$4>}PQ#D^_k%9(H5e-qa^uBaW;lWh4+}qn5$2H{epxbI{BkS=!Rn zAd|7K#P^*T^`IM_+bsakQJu)}JL(~N1!_v{XQ(l}pq{N!B6ncsrO7cXUDG-utdvEJa{go8`S06ZOIsY-zB_iNbvuKB!hAeaLGNQ)SxfKLmQlZ! z-e2xWStF7%hb!HB!{IQl7V=sem={nB>K@pKT40qb(5!kD1Pb%OsQUcWLJBrHz3}uY zR=L(vUy-J~wU*ZX_F}80tKro)w-#o#kUNKAT*130kSqDMv=rWg3aHm+wF`YM{ArP4 zZL=AXDRmZa^qw1@CdbVYUXJ(GC=|0Z=?T$Ia+mPpKT?KPP9V=Mvo2=ibsAHUR~XQn z*@+q~V-$~Wh9VC)JZc-OO;tsez|1R()iH)`bQ1zk=HgxrUZq+FOjQaapj%EcT3g2c z9kX>i+j0=a#JDMsfg?(t{%A3M`U<;b z{)J!NHQC0|Soa(DkZ*Pi{#C z?s#U>Na#&Q`PnXxX$}UNN?lWf$mNn#SkSc?KCWohr#s=-Su?6PG}_3Zt~hkhMj06; z<(S+kZ2|Xh9!>)8Xcy%?=~rppW44bXc!|n-VW9I%*g+V3+OtLuSm(+pIlgr?TW48D z3z*aN@VqaqAt%xORILw_4v6#Ju8h0E@cl`CM47noFETsvOQ;!n1k2#%%sxUDfzFb9wmpYEv`$Z8a))afc6 zdI4a5!jkYPZg%vRL;e=L*~N8RMX9s-z$aXLE`$*t>T6@R@JLzmj1&jp3fvi)Sx5au zABZ9aVh=HM|6nQA2-l=p8Pn8U_wRJHBwib1Cq(6TDak3z(=8D-q!x#=#Yjl&5t@sM?4PqCGUMW3-#SYi$)w#Mxj@!WK zzK0t#sCu#Ljj72dM$Lz-ZyM7qk`@SEaS7W<0>+V4j)S6!Rg#JQYVUH z>qT>-4{gpo*W~se8RX)%u_v;CbAxzQ=jvpa=%_W~?vCL2WtJO?*O?v!=G-xftHdkj)8Ob05G6|*S? zyOs3x_Xv~)>CK!U#-%nPBNyN5RWtrH!F{W%?q=IRqOL2BLWk)U7uWugjKp@g--egI zu}LlOVtXJxn#!xF?#2`Q==U)R>DhQtm(V^Due#{P+oP-$ZPc$n>6RFk>Fl)hOvvRG z&I8H)R-@?5w#nIQeRZJpYR7gkYnm~lQ^~4|SRQPec!XXIf zt(-1+r&tuTRm76y6$BN{h2LO<^JF>x{^wSbc5RxKlm@XpTv=8}r(5V-W$P>dt781i zv9(h9fwk3`7t`>v+8XYVgd1-D1{|G1~Pdn%aqM+;v*sQ@^INQT-drn(%VOPXQkbeERPmr$>m5^E_D?FB~fBXv}$A|KRJ#61Fp`}b93 zK6LNsJ(y$XIH$g9Yb#O>ydyZ}7P8~j#VdcSB44URvtRJ%fYQmT4%dM7pjoqMs$O-PQy2TI|+f={P=^xv#RWmOcb%-FZycq*5g)fUe%6BG2`V6KI|W2q&GzmG#{ zZD76+In@t5W?5EwK^~kibZ%<_qkfL%JX+lC(#+8`U$_ac=!E@B2B^?t3&xi6tHe2< zxtKAqRPQ4fTaF8ByBZ)I9T*LecJ<&fUMKx$Kzq?tJpy*JdZ(-Yw0Z;7l}`0#;~6pD z660}ti%4QtTADwT{_IDYX!=nQnp1#F&+wBVd=}xr*^tFK&GEw6%7+7X8m3YY!(ywR za)QCltiQ4^U143T=S52`D-Xva`jZzofy{4p@Kx-WhI_jeQm$KGuXR$p zNRR#&nd#)DtgPh3NY*{*mu}EfD-QLj)73@MiKt5@HiVfJrmP!oI<;(IZ5h>;SSn18nkkEjPRLOyTe6R zQIV(I>{TlJ9yj}4%C4YEQXJpa!nK_e)F2~)L}huz$ft8z)W7RMwk@7YHb=Mga)~Pl z<`r~>)xyDN0S?-3J0DHVNK21zgX_3@ zPSXWF-)EyD-|4XKana)*@H6r6k0i3}2tjfp{=tRu5uW(VhJ+;ivEHgk8Eh2o67kow z?n^r53GwUK-)s{IwK$&?7M&uWh)y5}U{6X=${iFarT*gWCe@>p&cIwvU3OB?&`7Bfo=m&bF3NX4l{P+4399obKql44(Frt-C)}|H2mI?Q z^yw79l&yA$9!*ffJ`+NvCu6eZ{HesPnAdQU?}-ZR8~Fv;2ZOX{C;^#l)kR7noV^8k z<=q%P+zz)gN)GbSG%a#7^$@LhhiIlVL=Q%j&=9Sp=Bheol2%+t%~d0Y5^BWC+!Et8 z(+^2YsSb{}ypC`0IjmPb(BmWS$3||+X}aWQx8yXpWDmFgX;l9v+Ei8j(;|#+aT$#k zY7SPo31jr6L=r|>7IlmMv_tb5<@BR3NwE@_QI;3`Y*&mU{evb-iYxgji#)Q0C0+fr zR=c?ax5?D9rQT4f;+ss5zL@)zWqlnL-xG%lQMksEd)G=#2slWA)@CGMZP zz1U(Z!U3?fbjd9y{-hwMQ1P1rD_MI{B2VMV#nHBHCfxpb>~r_nC5uBBGt=-?a?u6(Cy{6m zw<@^_63g@f*s^m-Fkv>7--LY3V>Fgx3<%aD(Q8~Pzrb&t(NyjY)n|2#E2Q|q0IxIP za}p^&qq!8Xb8uddly;!CjTUkTe(M_7%J;#rp3zc@H$m}q=tg#t@i!?3fs)^akdH8) z%Dzm|a*FzZIbQ>UCZW2lzL6-6w&+E>Ru6$=1EYhSf!~Hks+@|t8yQ(r>_SudG?c1? zl*Y!tq!=QQ@)1%lLC-HXx=a2&INQ`>dtIGM-W)70F-qi9p(gB7<0;8MqV{}F**73; zimT)!QSvh5-_o7|dV2vy3lUAhm^HDymE4Mx$srGGYSpXcMA6R_oulYiMD}_R+phwZgzjNC*qbSB5Jb_QNYRf})p3f>P&5%8v?o!t zh@zDgtwNNJCjMF6FUN#Bup7nSrPvOx;zNqgf}x=51c|g5MbT(P{C0#p5FSDJ2f{N5 zeW)XIsQGgdtqa}8Zsb+;`58s4!NvCgLOiM+N6i~g(FBV6QS*9ZKKq4kW;clkq}WF_ z?WgEPNShc((Rhj`AmYnVlj>MXD4E?XT1oLBvN|9PrXu4hT1L@mqJA3TS%l}QeSIl9 zL(y4^&QUZw+~#{j?b*$IAANp7k(!H2F!BYQkdNQ4PUwzb3WZMSfkvG`F?%HXlo+~$ z-E99r9Xn0YUXt;B6dk1Ko7m_KeNwa$b8(A^mqQ`6e-R0i-&Vx{0RT5NVz2=Z-z zgpsgkQS(Wt_J=NIE$xw@P~v5i1ls!%%?u^6+eDHS!-#iBgnuHS6&$VLIS3dA4u*UH z4edaR22(VIA|>mz@5OD~R zT9psuw=+U60yTX(irp!aq14jZT_Qz_K2+iuwfF=@C*9~5LMrM@jo3qxS^;W3tEGI5 z%F;xraV-q}h23S-4B1Mt4W=cb7V8pPqA!zdY;&U>Ko6iXe-){+2Y&AsX_Bp*WV{Y1GQoR3<>Hweeh6$!`Wo^xRs>uR(#fo_ple_-%*Zr$X1W z_V|rxFncI5dKg8k z=uL{$qEc#&R#qx%?%)Z?2hpcwPggV<;TRHAJl$n$)RF3`koI(9|1L#uqmB+CFH7@~ zDp&`?bde`%V|_>jWFmeuL_T^dSf=PIP zT@auNysN>{yOyF4DB4NU7ZlM3>HV3a(-d7ml!W~^+g^cHWWSF{VzYc$K$QsESp}`l zIBb4)(@H)UZFxkL$U8CU9mO&(kD&RT#2a8T5J``U^(YPSnApZ)8F*M{v4g`j@UVY~ zkGb3e@K5mxmm2~6Vi%X|0RAQRaQO~Ej@ZlPTL4|e=Ul!CkSq3axf~!*e8J`G00D7; z%hv$%#UU=|19TPNaXAN|n>fPdEPw*>J%{yRv&Y4cXqotl%NF?RE{@aJ2`-!Bt5BSx zuhU#MK#?NR$B=OV#iFkvX)iAk{S0XVl#2d_Gyt9u0}ROk%EUlJUH}M+L54gBP%Z`= z@(e(Q7-Gm%06oM|L!JcaDTW#HIKY!)yde((^b*qz`FZG0_LP`wNbedn!@HHD-4s<~ z%mFyP<_usBE$-co=3ApABuKT^b+VoBHWFD9hGAU`QIw}Z7AB8!x)z{ zf%;*1- z!Nt!8)W4UFki%Ya64aooUG;ANw+?hI@OUN(k{lZGq=dXbA?4EZ?FST0T(*dn}a z99E=(O~PjQS6Y5WM{cO(OOQT+qrp%uUN({BPwoMF38H7pT|kpyZJBaA&}0aqDOUqc z;bM{rZQ^B9xtMH1op{+aE~c2!Ctfz4i)khlikH32#dH%I#mi=JF~gLLfo5_s)5JV^ z*(@$*nNTxcHk*strkopU$mVeI3QgHuQ>s;P1Jvg$Tr8xtMJ9H(rfe=3uOs&zN?JfO zi;aMHtK@fp(L9=Q`6AGKT19dc&;p3MDTf0s4uq7Nk zCC>mivUfTmRI_;=h3vfwF{9ZX1zF_pB3c0^uW|9YDFZ-Dx!7mQT%gxs*qSm2Xc-q@ zn9>jQ1{ViRNz$;Ki-V?o3}^)xUz)NL(3@O*ZOVs%R&w!;DYJmy;^L4gGk{icaoCjU zK&v5Src4ET8&YG+_CRYOHKuF}^bVxPlx=|Ch18hX8=Euy8xy}^$QF?vSx!Sn#@iC= z!K;XpLA#EQqVjH_^>iGNcL8mnGl8UG-ALL9)`FL9B9$cP0d3}@za?h_ZQ){orIyco zTnx0-^4ZG8AWJQu_sLq9Q*fx;#$ioLyA`+pVb~=W4Z{a?;*jHjw$rggjt2UW&K`0k z&aV2j@Ljq1mA}sHT3-sz8^>R_{S243n?a}g(Q66Qe%~(`i@Ru zvI1#G=pd)m)Aw|mlO;$yN=G_b1oQ))>tuJJA89|s=*96TJ8fl#l6=<{dw4FY`V~X_1PH$-j-bde>t+w!a9^|p%cy# zP=*1l0`6_aCnNEE^~6aiaskGqT!P$R2`G~Q_5k;$@iZh>8r2fFp-6AT`><>tYQ~-? zK*k2y8|weZU_a3R{{&ed!`nqR#4PnCKz2wT_BIdeXL!5A=Bms36Yv(3ebNY@0}OAG z^p=_43T~oz0}XGn)TWE~31b)v4l=yY$saIRgAH$gF24jCVt9vhSp_uI@J`@rQy6A= zXK{=IHZH@vl*^?+!wv5nTq*kz2DW|}kTx5s5DYR-b?54C)C6Y;`#R zwN6xs%$t`%`I6!N6m^8S>HQoB&`@JGiA)~}qfwhbRovKy@{$u)Q0@BLS#f0Abo~`Lj*RA%h*hX zT*K-(c$|bc1~jt_*g)7UY&KgVFN`kIDsv1RJ7gNtUr~q*v3HO@*YLugeivw-;T>s6 z(lPT5??gi`0$N~r=V)tZq2YbafRD(>78!9~oKE7fL#MLEM%?w%ZjE&VAAlW1*oft2 zPr#b9-=v6~N%nUX^`~_Qt`D+6cNpXVAq(^) zg`Nfa*x+zFJq@(eAlC?Owx1~UB+#b@Ppjml;&&N5y;3c{-3A#;rAXUj@XSh17HE~h zvnn}Rpdo{2)4t(lpBWtIEwVuO8stgL2l`x-8H4w#B9ku$ycck> zsSNzP0heg_SHM?IW%1t$_?m`y04_E8QWR?m_`1no2mA}*GE+I=Zw7qBROasufXg+! z9&m-pe**1Mz&ADg9&n|GM*!b4mFM&@Oq*32+Wko9?}0+6aawJ1@)~^&qwQ@C?X$>A zN7fos`CAVHzN6s*z;`wL0&uOVe6jlg*J=1U;Cc=B0&Xysca}tSqlQ&5dp2nZN2}b4 zoXsXDPt`8uY|+p@Sx3HtocBz1eef~hR#ROf>;Qb&_4*@?gIl20_0&d63 z!6ujh_@Rca0e4{OAhi|XM;g+^eT+#)YIDGyCMTc#m4KgMz5$y7ev0`9Yznwb(^Beg zQ`z&E0`Af962K}`UB@&A3~AU1@G}h?0`AqY0pRDRItP%)cb|s!0QW8Pvscs$K20WwTYQVD^t^zz~a=MXN33%RAmq{xC zFPQ3%?+w6THNkSgN=sc_+y>ZNLt1dpYj`VQ9}Q{k^|hSi4m7leHzBpZhBpEZ(D2WI z11-KBmQ^<3Ad8dhFcaE(u%)iz?7Ohuu$$YDlT`y1ZE^UJ6BpzQ#HICZJeedE=?tAxapR#g`rp>@ z09dZk5I1R(w8J|VKLM8e;8uE9LmM6{jhhfiWV42(WwvNYYUn*n-K~-u+N$CEfbVO#6%4m&h^tkc zE3rdZ>Kb-4;C2m3D}AWpM$qrj5I3_pb7PmV)Q#;rz>hT~&9qa)cQJRLXoyQ(X@7}f z%tH337N<+>`vG@pcpo_L)(}_Lk|cJI#pzO)!^z%Aor zpIN?U__zWmNgvy5`L4o8b9fqk>~qU^H9lIXJF|V3?@#!+7M?>7+i&@9P?s=YSiT$O zS4cTv`EHU2VMQLad^j#W1@xum!y$=|6kl0%yG`!xuPxu5^Z*3LyFzrbKcr9@&|!t1 z0Q%PQ;kZP{jPEQT4oP&(IAYQLI2|Ouw|qDd(J|wwLS2D=P>2p3KPp5n+Mg^ROjtT* z{A~Gf8AQj7V-~$x_y^E&%h!sm6BzH7FTRqKWA>!wYh9^M-M=WhPB3UrS-y7Chf|af z=Mx`JCIbCEZTXVm_wcYYmahYJ0DMH2FIl-u&sn}ydM*GX-tyrP^f#ajmJdgtdw_mb z=x(4&;lt5~j;Fm9qT}iFf-0foX&*sV(V?`j@Zk_dXZL=>heHq@O8YB1N*f^P#lR~- z0|mVsprhy@g=PT_7WB|zD$o#x=m0uYAv%B#6TWZ{1?Xgg__9{f5fntoHClus^e^H?qfW|5`3}~F7#}z|>#w#=! zXo5n6fF=sM*Y5-Ll0tNpog{oXL_GsES)r#f)Ki4-NjRrGY^w0}lDh$>3E$K56M*T$ z_YBm=E$n4sUnOmFwAu^dBeaiFG|7YLBZ|gC1=-6fI)^9;7dkV9eVw%L;r8FToo?72 z4ZFK#KVfZ#4``;a?~wL=hJ8P`Tk%_wGD|?g+v(iy2p2aer{Qd2caV0rVLwbMRBDc} zyGgsqu#34}0%^UJy&|Bn?O~kTqY=g;z)98sD{ZdI7{PHIyo$|JA4D++VIiKIEy3?n z{I2BYBT#hng-z!>o7|pfLbtO8!p1u(@I;!5$dzr+posk0V1bD40Kf#%yS&wTJgHbH zY&@#c1=jLb_Sg6z8{Hmlv|`9#By7C3()sI<|7|#btkLQu9A}G#JrqeZxPd^`nWNF^ zB?A4E_Hv}I;${=H?p0yGfRxEdnF6{g=*P>zGl6H~cP@VCA z7$c%EL1BWz1ceC-6a4Yo;4-#U*dr8gm?9`kJXdM=;_E_fc1Msh%772uX3KQS_qajA z*BkolN6zzbfx2ASxCYnVr>8`=x;`Fbv}yxMUm@(n$RuOm9zfBHMyoqf`J2MVO*sm2 z8=g9Qh+)_x4D$?fRtg*5K9%zea)#=hljzo4!ajC>_eMB)?aXs*ppFmx@q=8sht8P zq&*QSQ%v0J+UyfykJTwVkpHP5M$o`Mbg?<~Zc<)?YaO+i#jCdFA&Ad#Ngc zfS4FsGdA3?o)-P8v#W1kBf zm#D}$T)O?>3);ughJBEJa}?3oI1J5&IrJq|2R4U`0lyOJ4X76y`fFjo4BG9qZET=@ zVmG4OL)WrzgguiI_ftf7W%dh{{Ut?5C_02~q!X;JLjq5Lq&*MYjSo|QSbxH%wPDDr z0K3$NK}w+whUQyM0b95y8vC8FSE4xn4#r-O0Go6bY``M|Pl{xuMP1R+?{ylCOdHna z<0yMn*dKrjUkHW`%ktl_!+#L=CrBMY``;jnmQl2Z+Pn;HJ_nK?h5ac=hEc{&+7s0~ z(-VZwAUcW`{3PsMAQ?j>t59|p(tZ~9ZlsN+wADzP7Wy+ghUJE|{* zouz0Zn6AZG9T#>Lh~GxqCh$9fC5X>{RAL)QCL--5L*k6HSp1^&(&CUw@Ykc() zct_KWofGyq_&SFM$SA0jLAW? zv$qGWlJ+S9&u4x1yvIJTT0%6iQEb-7V_#4y)>eG=_1M4auPu20)DN!>g|uga+ibLX z9)j*2^$gcR_(m-pl>I$+Z&3CD0ZbG!h*ixE}= zzlGmb2&)m^Mp%QeK?Td+h~Lei`NV_c%U_AhE`04q>TZu^@4;^f-{0Vu!nX+D;rkSR zKl5_?bA*Fl^B8(N#Dm9@^zhNdyGIkx9!+}`!kY*`ARI?H?KPLgUh(GZi7>5H{eKu0_?S~q{ zV<6fx%45HXaT$e_(V!iT-xu*qT<3Vr3D|~4d+^L1#v9tO1-aW1z;!2DImUyx@6uj| zoVPHRs}NQryp6C1;RA%TXzfJsT86%^#P2rz?nI#3#w<_3ngSP^WAMyHZ7+K8lwR5g z!Sh>$BgpyLi=*KKY%Ep=a@Het1HyXaVGB7Ue&H zl$SjCvjn1sY{ub|0@v)Q5h+uV0vf#DHG6~4WRLRsEs5hF;cJTfwF6&M-LDVvHO)hw zI(P^1mpb*?bp5pkH6mp*PlaKc<4u}}j;!rb zVwQ*elXm|)(5rRuQW8fv5BW0jX4$gm*Ws6g#~cqHHdBg0DR^mYwnFMF9z5ZeNHOq- zE|B*+MiShxb3ORm7fOZBnhzGM>R7L%;qyFn17Yu~!=HtMp0B@lqS#IpM=Jh~fc}ht z{)#|_w=ne!Joa{!*$0Y)2;U&*a2;$P*Rh2j`$OdHL24CJqswY42udBCzU#9^9(#wX z*8nvxh2b;w(2WQFD1qOE{3Rayl={L3P)C_TuR@9Y=uYM`_8PRb5Bl5(*+-a%u)v4= h?(5i6j1h9CBV`5xQOrgls<{Xb<*?lrV+L#Se*iX(-tYhb literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc.crf new file mode 100644 index 0000000000000000000000000000000000000000..8dd0b50b1e0c94eaa4f68d18bbeba73570378f85 GIT binary patch literal 213376 zcmbq+37lM2mHta7osAF@LLe+6q9`gtRrQjN0#aR7oi5W|Ra8}XCkWOwNkdwa?$F&~ zb00vRQATGR5gm8XaU2yFbU;UO7jeO5#*w&hBa5P<&}1tnQr=? zbG~!#e(t%;`{tS`>RJ|^{>{^)-`xAOsOzjV&%99oe`NaNxyiZdsrd`>U!C&Y^c7Qc z7f#RYzHlG@oZPef%)QZD|NOQ8>5lNf+P&MNuBT{G{D+Y)jkc;S3hq0&XX?U*$+=6X z79jhUShjR;E$SL9J@vvJQ`7r8SM*(2Y>r;oD3*4J|B%vsXZD|&yHNgjX?AYv!m5JX zjXyfO_vZlkp|{+4zc6M(7?S`5XsLAJ;PebL7#lOcuxEOP#@uwvgFh3pBlotVuI&lg zB^$GUetN!xVw#_xov|(Y>b>o#Yxw_!x_fs2f$4oyb2jWX_nsehRsK(~lXLrbvnF-n z{pY>sMP0p1smb}P=NG2-chVJ_&uB`C#&Gq4sm`9MOJIO*4p-cJa@2J+3_ul&rnY-_ zh72FO)S>@VOZ~s~k#NcS?B27xvoJk#wQc-k4lnDw_g!X7 zpM99p`w!UC{r8>|b>;mH!(;yLxvLMbXX%1J@9?zm+3!?a`S7$~vTt&JudRL0y=O;V zxg}eF>4E84Tl_PJXZ&=*86B^>_vukr&ytl-&(Cfh$oJd&M-NZ`zTJCl>C)k4e*g5m zWBy%-r~JVFgSPU=9j5e^`)%n{4^Mh-!Lj@)hbKLMVA|IGq{EY5*w4XPxA(^$UZEfC zDL9?=tiu$aoO62H?T6Ro%$%j|-+OquzjBYG{|Wb=8+8@@P2QaY_Q9JNnVsBI8*ifc z-W+=cA3Q98((In8W^vR8_)5lzk+uMS#KP27kk|9jYwkTE>ROK+a30z}In4?E6K{Xz zFU1`6j(Z;!b!}9{D?0QeI9_Oa{oaA7>x{(A9CSe_`nuQyxfA8SY;i|ye$F^zyG^Sb zI&@6bh@xdtw64<`sSb9EIdqarJ*GB0Gdekc+2qChrm8cF{EkD%De_UnlXH89CJ*jY zly^h3gj?4dFHP>-C-K&pnFyv7W+?oJ@VhP0h>HKN|UJLCIfn=xC*9ZL3jLjGHa-VzaG4KkcR}-cPxy z1*z(jZfcKA{e+v^D^ox2ruNCyI}aVJ3|n7q)j2&VGq$A&%8~(-mG)>;aUbO*D$eyz zqB8kNCsA3v&LlP_Mir(djzooNi6c>Ay5b7+2vZH^(W1=l#ik5~MvARrnfgh?S*$6} zJ;owbn9_5Mlc@A;LgE(DuGg|fciQkhqklxA>@I6Nof2}?tc*v$ICQ*9+}P>V#;c`H zqgkzY2CMB>^r}OTR*}0BtsU`TS)0alSL4`=j^_|XWV+_KTR;AXCUSt!7 zEW%32w;!R=ZM&YBq>Si~ia!NvW|Et*|X0i&NiyXp1s#gS5P)?e4M#M(VZg{1?4e zN$M#e z>41}j5?hEaGf4*(*6GkFvDPq2fc?%*6KH>M(*)daFuF^l)HL#D6S z=>qrx4?&>+%tH_=ergCb&*-=XWhiwVWe7saypJNZ9Q09yngbZVCE7Y_xkP2;rEUh9 zEL2RS(}jXv>2v|#HtE9H7=L3TcUr;sJp`fQhaQ4Z@g1m;J>*Dqs_AQ{W-sX+SeT36 zW9kh#LkgO~^UTmeb7bO5hjIVpRbafqWt54>f>CuKG~9vCXtfrNncjjllo1mj=On^> zCO+Otgy~FtOcJuVGio`Eghb-0P9hF868~hnBNG+q7u-~Z`Xx72 z!QN%ME&w_s6$~J<2rd_+06X;tO;H7Lo`sHx6|ynw5mI?M*F#bn@>!vB z^)w^Ja?#m>t}SNrFeIhyr#_m}cE69N)cqKZSWPL^Hl)k&V{Vp7P(^q{nxabZ6={kp zz`ymXL7x6SEuwPtvNT2I$76uX%}b4pC?S;{=$T3sYn&gDdOakisoz6Vs`92yqTm|s zrszGdN~c1@-wPL6c+NCSFeCY?4l_E1fVerG3f{N45P})W&oIeAEmwzz1jcSpGPoyA z@wBSjJH>W=6dnkB{eC|MGMAb0pjEw~BKq#rOoyH*4HsqBm!%RR{TCxW!S+R6{mC@& z^mCt#HPEonpLT3>FN8no1M~f(yy|(+8 zVrh*HMsKs7sU%1A+e430Dvp=_rbkD=Yep_%2bIiYH73jb7!ORurHLfNVT423uAtRM zSJ|obKgU{?a`b#rbX@Miy(^XINuu&ChfrErs*g6RBb6qKX^rV`RL(LID_f9O2tk6u zlT<6pVzV^d>2JY+qijKlK#ZhOIGGP0TCXf#374=niit~4n)FFWsG{z}u=;L_LO=C{Y1wdh3CqC2uUzGA0LREj&Idu>a&6M#Y+vvVTT zU{G_c)Q*;$PD*!~?47Y1eey}WRL5$?k?QsuiD;ZXbg8YD;Zo5RCYsfDB^tL|MvA9d zDVC$pg<;TpB+Sk*40r_0=S}B9eMn2ARdxfyqNa_-Njv%*J6pP$3>KTsYNZ*S?vzxs zz8z5-)?Kq5Js>dGJ+Vv(H z+2BYeny_{wyZD57tUIsahG(HzSCjW*|QWsa7Ea~xyd9m0I2UD={^ zn$^)_Ye#g6uGcTAdTq>2GXfTsZ4pr_O5_6ACrjp@WvdS;?$sLSo&?Sy>PuD(qH|O| z)M%BO7)q>U!pr2}VeXXRUthNJk^}R*=b}&8!)LADKnt+O(}|&K^e8u>f+d8-(L&T? zvz<_F4MwNg31uWa$w?R;M3=HK7&$psOs^dO5tG0$TNxd!l*<_8IHX?-yJapBc>s65 zKl%@ymG3TFdBxVZWYua zcoY3WYx{AG^F9pjt3^lt@v>EOQ}YO0BBroTr*+LoFR@jXMlOg>uz_2xVjBUY_0but zIfC53Yz49ry_^XG776o{3(@sRSRHd9e_3dJ`W%(nrBB$m!h;+2$xtJhRxzecA%0$i=&;I zia)Ou%W)abSj%Bm#s+UU)164HbsDqtQ7M%=ijm+MiPQ@O@77c*dCyIxBD@IPS}K*i zV~Nyp!TYpSDtQMFqkz||g1n(?MHMr{kS_5Xy6h6)s!Q$VT`0BB=u*R zCLE%dVor%USI|SE&!Q7bNI1=hm5=_4e9YPEPj{_o4L721+u*HXnsEhO0hy~ctADx=uZ!D^Tz_eU0EVx#!vp_3KTu?A_p*sNma6)3;VVj#lr z;8Dv7^+bcf6*N|cC9GyE0_Lhkxrp@wvs^Y<4J^vwvoT9O8Fb1&)i@JI9xh##n@{9Nso5+3y!b5{ac!tW{bqfpb|l3sL5Ls#?2RoJ`uy%J~B4 zHH$G3>5YdTr^c3(SW_lvXjWD!pSd_2(fZti#6aD_0<&IYy$hSZpT$6gpL!TZDwReV z{{+G#Sqwzza*I#cK!kd&va>2{>fCG=qEr&&Aal~*A>v`ejO`h8%GX>Kn4u60l;Z8C z%*oTTS%@;|j_G2$>fkU6t+Uk_XnoYPY!j|V}vk>L_G>fQW1a+E~A%WsC z*JdHghpg!;&NLfJr?sOpAwYhW$w7?Yhb(DVYNK+fd}}rfQU1jW;-feULnCEG2+S4( z{w}alTWPIQt20<^RS+xSNdXb3j$5@z=ORX?uN7{vNIc4bawHXL(^zpxMmVj5i0kN0 zGlduZ+5}Gsg;Pe{fayZ4WRr~I2nFNSW_t`qZZu6&q_?IP5Rsgnn_jqj``qlo1Jg5? z!h_S>34&+4hv(@CNJ_ho5pVd^yiulazVFp9sON`X5|*Ar}SwqDJQNih@*}0xOno4 z<-A#zvv4bLj7pWXwN)MK9G}{~Fgu6CTyEJxqoUl9$Om@WnmoVOsSgcdUXJ#dQmE`K zshz0KaIsd#_FD90GqG9J_Aqy4M3noaECxp9k2foH9$D+OhO0wuoE9^U9SfjNwY(Dn z5Zw^5BO#JrWX4T(^vx<}-MB7Kaajefxt@oDmjT%L7@cWDZOkucoQeh6vJWrs76(ij zz26|VXTZIGYX9uq)t%jYCuc65+Jmj!lN1uRJ4Ho6p8-2lgMCziy%_CRs%9LTC-|&J z`V-B5r((YjRU&m`+j4&Q-l;tY_f2&!o}9z&r#Wo4u2)n`za}vd>?P!@s`I17p!qk?~S((|5)7kL|6}qJgBQo5*lIdaMZxb`zA;V}fbIPU zqB{DEjFI27{Fnsh;Pk>g!Zjyoh7A_3AbvfOm-3X8m)Gh7`^NG$v1<6`aSp$c%;7U( z>ls_n?pJ(c`NjhYa}dfqPE(IOVA+E3L7Yd(#fo$uhjkvm;m;%ERk9Giu{@Q>FQ)n_ zT8SFW?$fpVT~)hN7)WFteRuh)E978!4rW3L|J~)QW!gLfsLAec#>n4j*dHp`Ne%Hs z194xf=9Eovu(sXT`miX{x~rS=FS+(%2x z&wF6`YN#m}+eMt6L88*Vnv6KM6n!(DScv}1&f;jbRf^u>%T6I0uys>Uy@j(dDpI`K z%6Sh)UQ0V!OAT&JczAoUx965pxl|j?$;h&@Ul(Z~*6(p3{ek62sJ!B6J_6}(xxg#I zI@<+i3FZ+`NT(JMBlFZ?zc|_#m*RS*u034NcXBw9wM7@OMe6AkqO<*^PH7ms&^nUK zdjetvI0c2}56X-Dzix$G_dcZS2`M@+Pd{xd4w9N2*M|WySJp1)U^bX}@K~3O3xwu{1^W`YkI=uX(;!`W7h7 zv5|h-O=>ku7$@RRD7eb4Ha4rAq!ILkyPTvvu|DM{5$j`a60ttwCK2m%PEvtbpLCOm z^-(v8SRZzih{a=qvT4xz9%6mMO(K??p&nx0;c^k{GrIM@WyPvurA4p{(jco-mzkJwNz;|>+R@1ZPOhq zRyE5a?KC@W0+Czr9Ua@b`VQO99^F#zkS%3h%(u?sD@147kZLqM(YB|AV+`eT6X!YO zAq7U3T3B-+akZO>W%5`BognVv$YiNilBsXkUE>aPpJJ;OeaTJ{WBWa}F^%m)Ma@kU zgKJ%n7FJ$*qDyU7EUmagKgUkPmKoDVZN+F3gBXK#mz0-^L>+Pr_jJj)3*NJ0MIDW2 zJr?M)A>JeU=pJ42V1T*NadrX@or!JPSYl1JUYyu52ApecHumk`>RjHlVlCKI?L0p2 z^6T!g+R%t2jV(`I-^V~Yo=@`#5X6-OX@J)1<;r$@NZQ^&s%*p0&CdU~W&W4x{C`{I ze?nUV2IhaQoxuG6(N17a?}s9_Ye@A{`<;I6aVz{0x=J14B4qX7;u2Z?BdbKthP*6g z!CDclx5d3+!;kDzG4rM1#W810!|wyHv}&Cwlp$$XuivhC;D2C6w`ikx=thPV(UNbs zQ$%}zqb`UCWGDTW&dCE-PWtqS^#F!C%%X+p*=W{kN0Jv5MRP6q4U6mhVGD7$ZUsmk zERL1S)$tK=3RsqyNga-!tId8`WzD#FNU7F_>TrwVPVw-H6{Vr=(f>LLBRder(tGLZ zlA<*F34Wsi$3gbZ%N|*=d}t6?veY#9SC3e^_@cJ#5j98OpiAnJxTJRJtU|O^+0OFI zVMjME7L%ICv7vNoA>yfWRn{Y=vNZcqezW5icU|}D7EZIG$HFs;F|X@hBNK7n?DKk9 zx~_W_c2_ISCJvCtZRomg1U@h%tkv1Mu6t#9ti5X_x+R%340kd1y?}*)$q4$~rMA|% z_v74~#W`FRt@5RIT0^G25YjToN3bX4Wu9M=o#$6}uNGtHL=KQ4;fZT0^E?=2}^hR{ove%D574>RwZBakmGcU)0X* zP2ESxR53B}5|lLcCYY*@0-F|nQ}+rET4%6`*+_H1)J6O(TXv${7J$Fkm3CA2N+d$} zn{|e6>RyE;?50Hx+C#+KR^8NXjoEKv!(jRgyPzBG3g=*TljNOe(f$AI&v@K1Z|Pn^ zw`QyEm`K1`Yea(;__|xVyGvxboh(#`lodQVVfi<>uq(Cw$*(Q;$==z$vMvT(vkrP^ z_v$K>a(Qu~OcrpQSm?oldp$x>3pk~w_xUx&`MMRgQ7K`iU?uRD%9C|(y0yD|7~4P5 zJvK|ZxGT!rEEAQ=4lI#u6dcSy&1TtEL3w@KPH9(1D{%4S_IfL-atDICB^0xpMvKnW zP2<+?)!-9GeJ#O=bs~bVmKE4IiJopJpyQzJ*&L`dC!yLNk5019Y%%3?woGH9jI~4T zxZK*kyi~y<>3IA>iHVK9pWDVM_v3N8E#KO`5@~45H`szWo?MLnJMJ5&-)i-Zy3NPE zW2~U8Vk(w~3b`CMvf`!St#&7vbA=l@TsE=nEtVR2YiklYKuQ6wmdn!;GnJeW+V{i??a54|T7UajG3US6~ul_F8SnLt5ugbW3`ud$sc9 z#6>%q2cSuZaSD90s@9I-Fqbs${eI)(0{E>I&P5$boO1CdQtvUT za!Dgnt((Y9RlBfk-AWfzOA^<*%gofWOugIXt;p2RyQxDm^)B>ii5ssVgb~-9Owf53 zY1d*4L$aDjJOp7VMaWBuib0`UDwydftBgp;O{9L`O)W^??-_ae5Q4Lg+L7{WF$d>l zBEtbDQE5NHNmP)>JBd9~d<*7vDSl);uM1sWMn4A+k+#zSh&NV5qIFSSyyGDf={YK+ zkf>BKlBW{IyC#D3BqvdsZ{-P`%6uzNNK}}|o5EwqQDyQ~H&vm2#Z6VPR!by;!u_(# z+baveYMAMyp*ocd3`osYPx4$-Y(Rpy~ zLJNp~gF7!y!XVsKC!vIWG$)~qvrSF{BQ8$DP&9(UP1e*Zp=AiOxwZ?P0u#3$65>Z~ za2hz7md8-1#n21v%c7zKU`t(VW{yT45$fj#s$W{vrb&f@Y z#U$z^fF zYtJJ~-!UhAJRCfm^JDDtNzhGc4lLsJ8DK@tQ^P1iTCs{ZX0uSo+suV&4+=c_q!Qd) zA8izH)+ttE9amNe4hxmMHKoL6f$QT{lDCw+KAVL~ZuTotDA>EvZwWbO#@Tp&2A%NN zW7k$z#>S*PVw_&=e2i_KDz{|?o!GoD>cJ)*yYTu(yOQnc?5qzr%JMk*EnzZ|{}r1- z5_v;H8nNM|(LJ5U$cRRs%%Br`Z^~#bj~J&HdnC5{q6|8*_xQ0XkHB!USM+pn*uNnU zd#(&piF>3uoTQ6G$YNYcqYiFwDActIQ6B!iJ|w5gsjpKUFO^2d%ayh&lWmLeP{(;G8yuYIYpK@T zC-ScjB7ZteCi)jrjXRc(F7iv}74T=mWCDND4-9E|{>ibbA6`luQ(YMotQgo|lFdQ| zf0xp4qeQ2eqim}91v#%(l(HD8;2AjABK!T(DFn>P`pS(a!hIOz)FE=vo5eu*r+MIG z1gxQxjc03Tyj-f*hIh5%5%I)Dc&OymRO4}Qu-w-#&Z%q+$VOVOt0sCVlY=^bkm}eL z2I8)14ddlb@P+=HzXld1qM2BJSURn3M00hFZa+r<14o4zZ9PVm1a41WL(NfdX$0``wjmbCKLEQeqeeH>DeB@7|d`^Ks27TM``GUPJ5J^ z4v#W9sW8eU=G_XS@B;tzMR=&=tW*PbaBzwyIphm^9)p9@^5aYn>Uc0UhCSp^{dXlC9BCvJm=(l0;i~>V)qCLrFVJNk5K` zWaOkzD6y{2rz$?*CzOn3De1#Cy$mJ2LPBa z@QK){!+_Xm5MK7PM`bY({&7L;^84hG zGaZDNV^6qSso5;ttuU8`yOo;B!re;EW8rRvSuCSl$zFR}ID2viJ0n~;Ioz{zmRnZC zkiDvrL1)QNxXUeD9+I>;b?gAD=A#6EIC3deYyQI(atRQwi`ehJXwv?S2blTksV&@|3@f@`rWGo5| z40|NHV5(l%bopP4m{%PbW=@jwN*gps4NEJ%NL>fc#hbibr5i=#VL4A zEUJb7wHb7R|E*g%wmjS${am6`IJ~LS)Ekd)Ta=4>-W4cDjfLomqYZ%~9G&i9LkZuh z68G2Ca$_+rY8!X8rLnN+I77L}k7M2xM;yGu73duuoWK&dE9kc0v~+grf77AU75XWQ zpyP7IX^Qnx7OM!8;f5ct9m=rt50=13)%T@hh%81251}5Pd6I`8FTs=Tam3|oOJk+x zd(G2!shk*8d}t+*VSM(^&hQVHz(=+BhcayNu+I_5FnEktdC z;`mLFO4vtSbB!$4$w^;;4~}&BLoPVZ&SD^T$#r^(tr76RdJtZEkLP4D5WXCS?}@$< zmX;3WxmgT^uY}?GzDv-0=|es}i-GV%VR*hNlXR5C11@+kS$dIg%Agbc?I}k|%j3nF zC#X66(H!Abo9D$F^`9O7H(SoXEQyo)-s=u0eoVY;>O}f5E^|cE!!uPT!kS4I>Pmz) z6D-NFrXkBQi%Jq<%_IwzB*K~r7KAmOVGsGGpPk2f_!e$*Vr0Kc6yWiTvr*Y8Zn=2S z@N!SG(xk$%Mgy-6;`N-Kc&2PFiBsm$nJKhd2NPNKYaXdjBs7mLiIbWyOf?so8wV3h zK)+^fUm?zOYe}5cd_h37gNcB$U$eGPYaU+`CpBLb(ClDhY3kRk?aRk`ZZC|o*vP`_qvpVmCFBu;96RzS0Zi6ygNv$ii6=Q-5ETuy2ZwJ?V>*uu1ZTJz3;jV>oO zcNWVtF|m|S?(DJ$6gs$PUDLzIrx#fszO)z)0@nb!im0o=<#X_J6TO(iXLYven0>Er7%+C z%NNT(pK>_aUF4;*7i<0b68Na}H;WVnb-p-|11J~8TE+wCq6R;=6h>KmMfp@;M~|e^-+gF_yj1%?ss6#WTM8Ffc{23tkyq;f z)e?EB|Myw?4KBis8TxhprAPjYCGt}LZ?p6pTzvi}L%+6D>VJ5Nywv}PEd2%-yS)MZ zc#qN4zg(@|w?tm*|3yf@i;FW!8Tz%IQvZWX97p_+D@teXG`Rz{$FS5H@G+xahB@;PjLG`JQTbBF&n6FQvBesBxuWhhn}o- zJa%y%hy`a@q%H5^{G=@U@nK2Oq6f1qO6tI|_Y8|nU0N3X@USFk(fwH#C3PTtoMDl+ z9}jEkGWyA3NzkI7Wm%NefoF3wEYkL4eXcF~(P2r@q6e}pO6tJ#cNrFG`)!N<`>-Tv z(a*CiO6tIOS~4us_UEiJ%52#w30jodvXc_oEnC}fTlCYcJftLO(L+lrBc%hMKTR$a zmEXYeNW?(mSzzMrj%>|2t@-jLaZ{8AXH_baJ2PZ|+d z1hUm)9V^w|y%a{O{puoWiHNsLvej~HN96VkOJStiuPvgMhC3r_@s};uoPW4-pA_mATU9 zNMaOBK^8RRT!=`>tJ9D|61N3Yka-O`A0iU+nlz-4#7&zNWKKgagouQEP8w23;x&^L zWY17VmE~n2A|dC}kU|n~Kc*lH8ggHVNXYp#q>#h|lPSo&hTI<_5^^C8DJ1cVWePH< zA!kBFLLN**3Q0IFDaf8iT$Ym|A|dytA%!HaETQ{o8u8xb!GjzQ zkEQKH_Y`=q2+)XkqX!RiIM1BML*Ep5uME(LXMLGo*9YWqfH{qajw$f|K0qVhO&DdJoHL|_YVOY@m}k}gB(s9rSZ@u1)lYcm(CMu#Cy314>W9Nr18)n1)lXnlg1;B zcsF?PK*QCEG#)ymz_VUu(s-m1@9#W#pkZ4)jfb8n@Ln3A5$_cqJjmf)a_wVj8+!Df z!qHb+gowl}yF;y(#OWPpLJ$Oegk3`RgouQEst1yi zc>F32sTUn5g@}ZFtOt^kxDMkKr?3(qno(w2=dM^u7L}mZxht27?v*x_@70UqJTpWj zW}nAUO5&C9w4rUiYWZo9O3;VgdKcLcvIxg$UtMPb{}D$*-Vr7f_g3SpC#2!Vr_C*E zbAK14686s?bA@d5N{?Jiqw>>p(s9|O&5=~1{=$PQsMw=O*H)`~fgGi*3q1yuL}H%l zsVz!kJ*OWx)KaQVecewY+#&NUu_cA!$r(gTI1At5Kdwuz4A2Poe0LCy<)RG<8GLD{ z!+&y}F~omc>Iy9#lPmJRGDF^$$K&F@(I# zZPD_ZQXSodtd}}j12&ns?{w?VBICS+W3D1qYOz3Ag4@?mcEZL3cFo8a$VjEOp|`*>a?eCSi}U`q!1#jFl~)$!Un z6+J1Ng=+Gq);uWq?pZ>K`~+7AzhWgTvRSC)h@=t+1unZDC8P~pJn$d$@cR&vz<)8L zgd-XKy*WW33Ah^|mL&K_mORB^U3&I#5Zt=-oaVqGibPGTuZDHv-!%R|7Gt8GZ<*MN z)Dt7b-yz$dMiJj4gDUx(s(!f`6IJ~#t;#{d2QgB)5+4MBD*2nLKC~DURav(J<6JpN zcr{L+5{((;chjIt{Rfquu{aym^(0%N28sUzAu1i@k_!2un$B2_FSCfI_Jb@2D!DJ& z7A*t>f%LH!l^@1#OD%apj#+taCI=O~*$g{rjHr;bPeg}HW}5y@76b9EP=bTcQ5qv+ zqOZ%((RJcq$iZ{7S*YULWM7ZP<+trNrxCc>044GllsrG1g-Wc~wNzCqaq$a%Gm#Vd zWjt)j@MCzQt}n=Dp_0jDP8<}R6G$kLpW5rFU#xKJNl8`Q(g4LmCDxOY9u_<)sl7-^ zhG#HHmqLb;ttVxZWP-oiOsWYo-U`!a=*4UF9lqCx&)~(+_E~RLrs#yW-l|N}@m8gt zS|tt9Nq)>vmi(`SRO0^8Os%dg7U~I$(O?M6Uo33v5i==i(TQw5VwR-akC;gszS&1? z{v!6aq;88&?DLG@mz2kTlRow-X}}eqKkUe##Q()2Jk;^qqzx_(&O;^2hw~kH;)&FH zuUy(;(TQ&bJd$+#27}Inno-p+=AzH+oCdh4=WH_y`nhlhGtqvyXu>~vC);`kQP~+& ziT=xE`-x?7UdWFsUpIIlNG0m80;v5M?)<3o+||#6RHE`b+;UZQl#`PloNG&LQFj3D;KHy?4gl-31B0Q7?z%Tn3>`b`nkMUjn*#P^JF#)73_8OCr~gFXDE@! z>ZY<;Wbrs<;3_Ggh%%JOv#Xb6vrx(YteoVrN=Pda-$pfq%0<~MRI-zoE(1FSyFgW(=kr^*!W%&v-{Qnjd1_s8W+pq{;6Y}NLK-?Z~93@ z`<`o@lCqzEr_CZ6FGLFCUgR;3G{U{qV;pGF30@g_oM1jcBi=P$ygJ7HbY@#sVctD{ z64Acl$!x2N#+3#u%Dmq1ClTzI9`7Hq& z&HGnR$(8WUqjTIGakP&oig)=*MEii7StW(rxq8%%n@K^w(L-_+H4jo`dh25w(464@Yt9rB#DBD zZS=J3D3JxI)ck2NCMvSNoZ&^nYC6>#lqE{d8CeWeVeQR1Dw;d1LkLf4pFcq~m2=J_ zJXBIPKEDqKgRQ?>@Z?BKyB_lmQPIm)}lT7pntsz_W5=F*I^;8cbsW{fIo7z~l7!#GOPq%Le3E|7sfJO#A z!pH#7s~6>>ve&2Ehl_7ChMCDc9|*;YO#U|X$~C1^R_WHwn!b%T!e>O zE)LZ_2l;9RfdC!4ajj4b=9gvAiEo{kNy_7~9&ah38^$LFHfC}Ve@nV2ii#H)@XAvI zimV5YTe6T|pUpxY*8ZTI2Z3UL$)@XPenu7pvCp>_SFz180^Zn8*Q+GP3&7uJa!|ovJXzBi z*hACqH@~(!gt)Va)MFiFx!*R4n3nr(k>GwiV8V@7|S6>k~B&jexVpowsTB5?80k?>$}S(M1~Z<~(?O z*=dETsu&MfU?v)JGxKXfDlzXhZPb;;X-+-x7|M|OCfxoEI*}LBIVqr_i0!16KH0$? zL)8)a35H8D=)~Ud!ZG2fxx7*iQ;; zkS+M%GC8Q>W1&32$`P!{0vhmYk?hx&6XaSbIH=*~kOp#K*3`bAEsqakvclEme9vM` z)MLFE=0!rVCZvjWu2g+%F(#_|p_vyGsw9$q$R@$S%2%p>6jY^{sOo{BD#>JTcqdd< zYwEM2bpAGI;%}# zzsABzGQHMtv?)f`&_p&1^*k%xe1sl}0v9%+1cL#$DAX@1d2KcemApBr#6dwkAfW_< z8bC>*czU|#=)-ANTrh>lRJ?Ei?dPL(_MQ! zXy_hJu5g7H4@_f!Uj1UxEo8G$(R18fB~Wk$&KWNS8H=7_Y7xJw=7)qfCGWod_DqN+sCj#X(U`*~i8G7K1uYU++Cvh=TR_b7B64k~%SJ2bl- zc4W}eK$nz7HsgAATAFmCA2c3$QXW_7oRLk-a_domTdz_%!h(V5)~i%01}x9?Ld7BS zC^1c+&7c$fih${m$0Gs>(;KqjTaBtb#jz!ef#}wO25Fsz5WO!fEjJa9&tf3F_0h*9 zd;wMNIFW#q){pfRcF5hWzhrVy!OCQ_u`zIiE3858cSV^T)UYZ;Lk^>9qIQ*jzJkEo zoz9>W{XnvIjlBH{k0Vw5y|d9hEg}eQ40J zP;yX%^`XHu2R<~I7@t+mt5}@O#yN{IQBOJ03u7d#fHGCdo^bABOjK3LR+S6Z>{zkc zmS4;Hbf9D<2bFvwP&0x9D-wUrklHJ1<};Zb)bPa&4ZZNO!W!hT`q@klYWPxyh90~n z8rC33*3V^fP=j^U&}m&PhXRg_hBe5hbyp?_HQbYthdj<0hc(C+_4!N=YWPZqh8*@D zg0q{goLnL=74J1G$t+y^kf6=im>6qdi6PW(F#f)e zh1!lY{=SC=&YzB2I^+>VlDW8GJNx7!JXG^}w@%~2!a+BIgO^uAdWN;0&o074Jzomy z5jYsQoc0mh!8mOHX#7CwRf{oE(+k}8kwU_ovU+uH7adi>Ka6!%7v-WdD_rTv!kWvg z4XzfNqAtR-7UiP0elzab+6-27mmi0D!KEEMQu;;Ycp5~(d!K&+QXAp`flTn z0FB5^v!P?l;q$dRgcYY_?9q_5Fqx=hX3s1kjSs#0fOod>$}~HQ^+=E2DrtOgC1q}Fs2$^4 zA6<*d@RHD8njVh`3 zhZkcx18Tjb;1Y@X9kW;L5D{!h8Cuz?vv1uqiNzF^pnsD#R8pga$H4)nva^cZV@_b( z`hz>GICLUM=|L!##{m)T1R9%&9e3Wlvlxi}RpSJv5O9b*RUm3Iqv3A~QVIO_bb&}& ze2OL2DM*P;J`g4o_sVpqP||q2Q9Iqt3z}cjIkP_Pk^V$9tGwUi>85trTtf7GLbKJi^Y;g19KV)NPM!NzfkIgw!R~(a%C|P z{8MftaS)PI7B-$c{6}ExfHQ$(5+SVv&K3zvXnl36F)@mRAtRlt3}XJtOCi+qLz~oj z|09eHPIab`My2CwJ#`TCgF>VzjWk-aPhrLUy23}T3RU(B8qwO8hhWk0S$KV9CdP}u zq40J;iD>UOM`kQ3#O_nsR2!w%6A7^ZD1_=tXA@h9|CrWY#j!iq3&C2Y zlDx}sa)?O4)2w-e^%+azNe44b#)SG9yEgOtfgqKjA5PRCL4_=i5{v#GCZsK@NAs(=`smRd@Me zkV?$^JvA<55mQN6*+e62%8zPUH<4vIDjE^DC#{q;Y)zT@5H-$8sxE%wzhtP+3KbJI z!9naR-MqLQ&WxLsm!Uc|B9~spxrO?MjC!X_~XpEW+5MZ#$}?GQ2P-!n1iX@QYuB|3DT4;XmwVONq)~SPSUmS4y{Nrl5-7RPabP3srQP z6@Ui?3&3O^7$CquI(<~}=`02+_(CcV1_4{sK6qpy4ntT6YLt1TC|AI8~lzh;C$S8dkHEbKWF@Vmx`0;dLN1uF3j*7 z+f-^pkGB455guyzy@@jUaB#I&N2y$TU9QOXe3l#2&*MZKo}r-!vEHx->4aaF z$w3Ws85#<>kQde{EC%8yoGb?+dYe0cSVY;`wr0=?ey)jgsp5&v8^EC_XYR7FWjC{4>`Tb@i*e10 zlO^eRu`h%zJJ?e*=(M{Sw7U;OPzYOgt*2$si9Hy^?!{}fe(YvVcB->7=)~?1U_%~< zE&SM(n(R*JWYCFS4q!tbCo4nPvLl_FK__-4h@Hn#$`H2fLQl`26MHC#owKj{unjfv zd2;mw)8J#>Y0waf`XqN6)I_*V&diEWTva>b2WQr^LPSFLyO3HEHRm`_#nMm#;UMvY zpxeS^!k*_kYnC*+iR0oGOAQpMEY)B6Nd)}8>*6UX_@YTL)V-|!U-(G``)vx0Qh4nu z35G^0+v(5!B!c}W1x6{n#h3&`Z;~C#dUb;h0C^E4f<2r9BMA=~CBe|`WzVQyqvCpkp@G^Iz72=-9QGLrDUf}~{_Naa}i6F-SyKTCm83Qlkm3~zVJ z=R1GoClTy{6d0v&7w}l+g07d@+|iLIjygU9fi7{KRz5ki0}apdFy(R(``cn+*%ZFn znrs$AZ*aRyEUkXyfjDQ*hURug90>(d;n zM2(d_*d_{Vke%q(Ob%-JP(~gK(Qt;m?DOx<Z4z)(ROi5*%^t$ok@?pNY!8>H1t6ApQ?rB2BAe_((9s zaU|=yuvXc2 zd%5*)mY0Wmtar0~JP0DdVdwl_4G6dt?cG)Yp|NpA;SHl>6xM)yJldtf#h3UgBB9v&c8yJFd1K>B}UUsMhJr1Q};R^b$vt zS`+HP(w{>_f_8iIPDz~pP3Jv6uk_3Sjer+>@(wwy1k!nLm3B0SMB9TxlTVYuI$hqnGTZ)e8AHLX;yv2-m1oqXIB%`+U2_^!!#p~s5 zyjLjTj22A$9kxh=$&x4%_r8$F~>K3d-hOOlB^;5Qo5*wyhH z9XIQrXV3}#n}E@5)-QG&l+KWDakpnN5dBWK-8cyL+Nr~R5e?4zyfq;Wk&s8akeX=Ut8 zDlzXcwd_){64aBhrr<6TuWAx@cbH7vXPaK1kj8l@J+j&)H3YsZNG0qCJm$hEe4@7E zQz#G3-0UY2@14d0H@4L9dcTu*`DHrug*(d;qm)f1sO5+y$Z*88142@>BDT2IFBa>s zvKR<%eef`afH1iOk49j&$wjSMkCao|Wgz_P%^;Lwz>~_l=J*0a;$t7yS6~xV0$X2! zb*cEqnLf`VDEROMqAA*U5OzPf2oE(pY-S4|4ub2ta4dRrXM<(LvVTh!12tF&%2Eh8 zz~+Ouyr@rQF%bT4Q}!0TM8KoAx=C6@STD!53&LbVPns@}kj5nhKd_qJpAjY#`1}Ac zX7?X?CEIx3UzGN6m`vch7nsuaiC!l&+S#$D_A~>*t*Jf5V80zIh+;gIwV-aJyugH? zJsebEU7byH;K6L|_ZTXxQsEz)K_~j7%p{SN$ETsa*!ZS`Y$(>dySA*L6Z=R%HtBFD zJlL!fg}ow!PV6Im*is&kGP+}nD0TST(&}4-RN{Wf%nEj%VDYeDPR%v%3{r{uK0hkv znvzehy;GsSBSuk;_E>waSwU=fRKfYYwDFZxoL4u9Dt5(zB`kH=wG#T zr!dg^%`|PO<;q|j4BM8)K>YKpX*!8u9}W^vU&suYB0p#qxe=Chf%$9f?f6`Z;7L8`gt)DV%7PxL}!ma!tHola|43x_y(dwzSR-5JKYuFY!u?8r_> zd>o^U-OypY33-%CUsb6U2S+M!RyU}W)#YkSBz@krv}&s}G*-how0aF2#A4}&LvN?rVrpEkNx*HOqJ`EeJf#KK8IDQlaNOg)JZ7dbuA~M2gjP6gkF4G$w}zL=EuobsCorD40By|$D;cl*-fID%nVYrXy8iu=ou3?3qgkgo=gkgoggkgpLgkgoP z3Bw8lNyD~b-^jMKCzmj+ClAB;=0?}DC_19ksg_DOhSTXFilJZP=!n-o*uw1FaNw8o`lE51Ebgi0W)&e|Z2ei?b)-7Too#m4hfP;2S4MC- zaI}TZ5UVuE%cru2akEK}Fic=q#rxjHaXh{@j=IxXv54d4QnglY)*Co7spl4lUKXcI zV7uP^w#cPXoR55Bh?KW42w75m&3yz_q+_HB+Axl+Iyr%7-WhA)3kIF`a1WkxP7z1y z6N-3snixwK&|HI(1vLK@F_z4u^isrFXC6H%MT{kL=tL=EESW>6OcC2W)xb>wNa|ZZ zEFcyFS|`8iF>Bn6n9>?)3>B**9Z{iZ2`N$43_L|(+Q3WPDxt>lvT6W7HSIIjDQf?8 zZ+afBLbvCbA2}=Hc91W96esa?n~wQ8_iZ%I5)%7TrzzrPSxmc*Xf9{1MRI{t?j}9@-`fs9XN>t)Y`KT&df~ipW1USf@Q}< zr>s2{`Tx!_Yg^No&P?uWP3^;Z{-bsB>LMP0s|@845KJW&;Pj;udl2E<9BmO};gM|d z95>rnADF^P4!t}?vaqX#(Y`oB@4s5F^y9K}Hpf=`HFnlx41>|L+(z6^=Rc;<^iHm` z&5m9rXj>6A)2^!p8fV;k8^)3>bn=}6RIyJZY5jQdBaB+WJy4%yPp8n?igOtuS|9Qe zM(wdL#mBa`hgrNiyt89Qc~xwZl()|=xKagl>3~!Z4hd>2tx^-1xJZ4BYUk_3pjVy} zv*!swJ7Wv`+Xj)$#MZ*x!QBg}*eyyzl4P=w>d%roT1loXe_;~K$O+P?>< zqmEN)M~O6a^!mYt0|ysyQgyxRbt{n{^oY&KtLo-T&q8}x^}3u_oeORHD18!%babrL z3;_R*5m6G4kyg6n!>`OZD*HFL^M(=9@OJHust;egc~xun;N0#hxa}Ks+DbW=JYJ6g z*KS@rG&gnm!Kszou_ZY42rM5bL zgwLqMw>~U&C;HXJIk_Q*J_)TvVr<}}$TkG;xq8OF7~+*N1Rqk65J&UPR2SqfKS*54 zuhQAR1&ne~ebwgG<>@P?_e{-U6@H?E-h=~>tT)@h>-^X;&T9H6P9ztH2UR=!JeHxSoP=p*-5WM{v;9P$ zNTdv7gh26=XT=*fuN0*XFAassq}6ZOyh@f5h9(6Cwr=JaXBVv$eh~oI?sUyFGx2=G zwmRi{#_+MWb!ZTW#6th59q{9P?9lT)qxP54QuO{#-ze_$>ZnkP0fYG{E@_4tFiVW$ zCTf^rAeY+#Cne0#ONO^+FyK1a4(xn7{(qcHF){2c*dNEX^PtF`KD_&uA>U(fi>Kv# zAph(v`CbIuy&07Hdm(S_*ryfr;S^Ygd>`cZX6f(8iIWU@)H2@H%*g*%oZ!fi-wOFl zOn8mQW(x7+?P#rRh|N-c7^@I{kk7}n6DGr{>UiFthfJ*}h_nRpeC_^N$gsRFhF=eLel8?(tAD5^n7uAk}(JSj%D<>=_V>FZIagIs^G_LhrPf z+MC-Z^gi25E#!KI-q}>a4x?qFV2AB5Fe#G+NjA5uQUyEAf^DP<7Re}B>jq(r)v-#h zn6h!Wlke}S+*`w}5#HA6@6U-WSSK|#8Sja0>)9&uUr5#IFs3+Nr`Dk;BfYKDyDcxu z*7^{(CgVvsRcqD&XsG?2T(2zLevj&&ZFtN%FD%>YA@>$KecNQEpXDR>bq2Qf3CnVx zGV9&e$xEtrs*aY4N@E56uiNESI%?>nt~S{x*%V|)`i|Sn44GZ6p$99_-B$#G4z8Mwio!{%5vN8Sz&h-@Y?3RpvCWAxyR ze>O)iPUmEE^hGC`t9mIr)CZ+oZs_Ug=cdV@Unng z`F6SC*=_q=P|8%aV|b5YdAMWn?ZXyu&n}0kL^ekrA7axkRLTZ4paNcm$z-( z7@+XW@XzweaC*W->OmVuwgMEQU2Fy^Wt$imDP;LhiiE1Co_D1(3IfJF`+${_psz*B z6=~BH#rlkhlCeiaIO5vRj>%SIjeeKLg`a~B2P`m7P;sTBS+1phmsyb|-YAkml?{@J z)hid@2$vP`Cih`8+7~|3ff-`Z>X@IAq~-s=ILMxj^N4FI0#Ynf zhGo#poLqoJ4_1))oTQaOl29&!bZd6O=wLK61v#;@S7q}=%)1hGlcLJTB4gW^c&Q^Q z@_n&Y9$0KkkxBGW3AkAS(o9r_qR*M0rlMPTTwxd|bG^ZvIPP-mv8&2c7c)lpdE`~b zU2Z*gg9>JgxEG1P21-m^Jvco%&%_oq$}q?}?00nH0M{dajWNJ&$F3fo-7`giVRR0O zdfTzAu_y4+V^_5filTkJoz@<1 zGBaO9Z(q{&sb(<|g>xq6Il#~u;3$n_<7 zKiA;)2Kkl+(FS?-P@&xvL{nS}&H93ytF>m^_O~Ilm`kB8589^C$d663PAh*d&gOQ+ZHlu_xvNT-5!x;(#uL0h`@Ci1cQ)RjqBuI>c%If;5Dc7-#Vcro_4Y7a0LK+os&G)oDJpTi z1)Z!lHVB8xsVPY!;mxL7#u?(N82hR*3y8DA7`|GFBMZ9_lXJSVqUEt$sg)=!Ny2TU zB!N@M*eG6{aF9yFJE$d(Qt_o1uqN}R_h2RFOYg1i;=rDCw7Y?L70#0B!&TIv zwug6mxa4;65tcuH3!D+@N3Nl)*dp%cK@PF8>~iW|SaMoh$_oL0ar?~Lpc>X{QFB<> zy(A@OmRiyvyjwLsx$oc}Qkml3+tYwjeO6UF<@wp5bbYzAK@Bgt6^ z1G(&i>dO~UP{tV%m1WuikMT&Ce}gO{MM4v>P8m5Q)czS}R&hwI_& z0UB%Cy7}ekV*HHQjvaTWH{@KI>)%u#N~V~qY1Lck>@l?BH{*vZh=|~ zez7?fdODA0t;Z3vu9d|-d*+I8#>|8!wIg|Ie!i&YlsQ*m5MG*JU{DEM?h4f5;Q9sX zN?;GhNa>Jlk@;sNZE|kz>cQE$x!EfRacq1&0v>W!Ts1N^bLqlf1hjQZZFYWP_5gw+ zW=<6u!9+K=fK1{zwdT!`Hol9I9zD2kVfw(ntI;o)0^u_NAt0Q%U5d1s!i)jU*52t$ z7VzPm* zF4k(|OylqUggknqSE7ImXkJ1Op7rpC8RIbC?~Yqjo|GNScm3tz7|!5I3QS6>gvYi?#q~XELlZ_4XkKG3k)ZskHz7*-yOHMJvTWs zFOpBvp|{^1x2idHIrNGBf*9b)*et=#OHVOnoia@jo|i&zOrLZb*{T34dnDqC)C5enPT>dmG}0(PlH_JLLEV(q~OHK%w*F_CUbtcfE^4$#%0? zYYAkonsJ@!7PAm{=?%Q3i$_oFam8l95>Jzu-mIL@J>OP+sEuRjI%;8&a1a*WpAHUM z6tQ2~-idv+Aho#@Q(B0chphD$M*=wyS!>HXK`lV`DM91{WW!eVK=zEFY!76^R`o*m z$wAp($cC-zgY1)nvVD*}!wmXXe&fAVh~JXQ00ip@TpED|Zr$GWFaW{26=*StUDzC4 zSRFY{67x9L9wZj*XQ7gkJ=p*CNpiy+7QZk^gtdQdW_Sx$?zSEqq~-09lqHANP9Cr3 z_<9IP1)N|A*vTekeG|umL?+mxf|+1LenAM9?f6AzpjKmq?6U|ZI739ag6&KA8)B3g zs_w)q``Uw`Jr2FWi)GhjFbt8wiuxr{i3RBVLl z(ot~bYE#~A#DrMFycqo?gQZ*%EWhx<11S2E2{sZQ0gz6qr(DD-JROA8=>?>p>q*Ze z{pp_c9MaG8r1#)mvaO!<0@4RO>3O7EcapU|Iix?;!{37w6i@M_7m$9YCq0k!vpnfJ zr00y!80+QbvZLT+NuTiu)gV!FaNV3ij?pAsC|Bj_CCMW7l4PlRNwQ$QBw4mzk}O^? zNtUpeBn#O~lI83r$)fg>WNCXzvcR3$K$qd*SZkMkUsBbEDByx1T2~@%VqOrRX9hl- zm=nb3yFQxIDeGAqYU-KKL^k1c1V|+`R_*gCDYdA;^<{l&ue5h^W(GUrThNr``tAr? zrh?U%Ak`Og_K53vwa6H+5pN0z>jfA&tw1mbA8CSE0b%4(R=gwtq$9!vQsZLOYx0H? z6!#Y|z^E!0rr!I7!eAYqz0fDGBedjoBDAZ0?0S(%_C%2O93x=L-e;eV(+Uv8X(_7Vngztl_EhNCpP1KT?A^uxaeD0%y#F-N8VpVE)kgH0_z zrPqGU(n0I9H@h85zrC^MP`2Vl48NWM`^hm!W*c6~@X8?IXg#TB%iwj1Ku+<@L?EYl zZ^C-E(?RPEP#f+TQOqRD-HvmE~Nq1`_K-Vy1!+rP?wY}3C#N1FP37M>N=&C2z5z^ z@JKBJl6`MU@=stv*%4mHUrc={604~*RIOE8!*EEoA7lwC;`2PMg{!4Xs}+66(^`t< zW^)1;&1{cFqLMN^fin<#S*y(#hfrE$qXfn!JsqP(Nid>#JKCP|TO^d&pq)39ka@(w zH_7UqP9?0}fPaUT5_f|nm9E~sPhRl8n(l~tPyy?<**Os#{XR-c3LGs3T7p)Yo1CA* zVUQ%+-suC9WNoPmoC}S!Gch~2XYk-9m{@VdOlMq2#}oP*bF-HsBugP&;?VoF3iKG| z$E_Q-P@m^P)xL|&g+dilh>;{=wR<>t^}>|0^&StZ-&P7mH*hOL6z9r8Ub@A+uD2TE zl3Zv`P40my3u>Kwa$3e$yCiY4;DX~p_TkqC)8e@$q_A;c zN84h0V4`g~j`UuifZmgmW+YtcH<(dSx{TuEF2nHu^p+x@62og*eBcWYXH9zT5ie^ zoB=&cW5|t7!Krb3vKPrXSIKj2^)v+qj0eVX0ztb0Qeb)pUi!Qzm3O7myu1LDPUWqa zbZRelQPQb>xT>B`?Z-C~-w$upfgfGH-Ox($~vbTR3?!4E&rmz+nh^KcgswelqQ zz{l_;_aav9N$$fKtfzi$2}TGUdDZN3Me-zU#jsn+O}yf+XJG*&LV(p8&cNaI6+H_Z zk~#%f8m+hRl#GtSrWmll^2!;6inMCFb=4WXMpT|$nB*Cf z+n0uIG3g)gfj3XlQ?MPw4lFEbj1U*_Xxu*DidDbB_C(rWWW1Q)}r9o-0*qGzu zRMI$(jLx+Yi!MmZXs64k2Qwko0HUFF!)Lh)Z+c*5vJz*NmaS?`&+yXJwTITJloeOt zs^J^Z$)uYo{Uzarv#yU#tA?OxHA3(o(bc5jQM&MiFyeTrvQJ3r(6G#d6#IQzOs^Wq zhe7Eoe4id^B0nZr{IAB-)s_^8)XAs~#ubl;wyO{x^r1NULC89W5PemyD1{x(sr{1& za3aWu;WWw)id--&TRv%===f2lwXW@IC{z5$QAMhs`qXMyUlwS2YWu$Fh247@ZT_C| zJfs_r;Tv(=3;phJ>{I{bgte`GlUGcM_30p{4!J@4lM{~GJ~e~0Qu|7i`}P&F9Grqf z5Yvt>&d*Qbyx8u`W@fM4H?;@rm#?9D#pHG3Zl`*nX#!J@^stYlLE5{%(G2=bmjR|G zJk@Xe33&u!^fX~h6fhZj2|WmcdkMYxHnNw{hZl*xgnqovU~U`0LO(z&<}zplcqud>H<-g&#t>})&$S0=r5yaL5N!Z1VSqL?fSA92ae{f@ zUa28)Jc18DkKkxrd@}C_6CU<3#X;nA&4oj96l`?6W^N)S%n>9ZI{%n?QU^z3J zC68YHRP&^TPZ2<-O^iLsfe3p~eW*Nuod~lqWx4R%Zza9~>^+N$>0v#hC0+k?qBTAI z4aPuu!t|d`T!*u|oHN7`&W{3H4*uY8OkO%AV_L7l&>trsq4;rH8s{Z&QdJzU`KJ?C zA5h`Sr(h0@nd5`YZ-etJ=Z+(ouZgD6cD=PyL@KV1h_gX?aWLsqequooKl%Sy`|bcM zisb*9o|*SZl7j?cK$Lf zyhsHiNiBA4u%t8k{8@NWT{)Sd5~{~OSjTHz7iP-SGXAca3K>C+dEjR-r+zk96x3-q zfKjEdzKm=gWzzDneX23!2 zzebnW1$WlOuy*CK)ulA|oEoiw16i|r!oK_Ac(KtqfFYHkgqqz)dbb`qZFa*Pt~~e- zddNT0J6l-?v%qoKc@#@IqHgZttPqTdp&R@oy<62BQdK`^_HnWWHq73x>JUsCflcNM ztXM+CE;WaYk1(sz{Q`Aw;PM*@q_OL3Lfps-+4MRMD0eW_%gvyQaCK`lsA7EKW>6(?SZxM1Bz{d_*fzQvLvfUPGr9J`6$Q

zWoqUx=NFj@?Gk90Lc0vIT&Z{Rk7T;%{%skW?DZNL3c_ptH9M?}_vrC&eve!69(c{a zzDFJWhCOq9a^URabXD0=kk1R$W`rQU{3FAlVHr_?!KKSHy>on?;73LX3fThLQJ~J_ z_&)xT4bZS`DnI~SKGQd658?Pz1qJq8ftrmC(JyBYLvse2T4iu9K$=5ZLrNf>Al)E6 zA$=hOAwwY}A!8vE%Ba5iEBRICVYLXd0kQ?M1F{>kA95IS9CEshYKxzuf6gAkdp0Rk zV4Idfh*~}~AZL$4vlg0s8QdG=(#*h|JqFEeXy)LV3(DYH(0ek2a`rg1wVo?bc6JS^o0zB426t@jD<{qOes?^KYuH~$~>$VL6$)_K(;`3Kz2j+Lk>fZLrz1^ zL+T>=Xjq7Zxq4=B&bBPnwjDGjh1lr$e^*EkNFT@m$PmZ~$Qa0Y$mBxx^L(|;kQ`eg zM2wt@;S+;wfNX?phHQasg=~lHgzPF*4e^&4nqxZzn~Mws(&+;A{ndq;OhJbJ7ef+J AF#rGn literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cmp.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cmp.crf new file mode 100644 index 0000000000000000000000000000000000000000..0e6194b5cbdbd64e5a407a89d1453a93dea41edf GIT binary patch literal 204178 zcmbq+34B~vb^i0d#Ic>taTY>Y!Wx2RwAh9uWHd9f21_%OnUQ3Nz@XSlEMiNJBxfto zQWBtr6uJ;X%NDj$N(dB66Da!@!V;F2KQUX_N)jMIplqS=|Gsw7bfQ} zn_7VE&9Q9x?s~L*u>6#ZcTG(n=w8`>aj7+WakEt3rT#-p_n$LxPS3^qzss|8Qy13^ z++O?vV|oDizMF5nPZ=|zj7b0jv|PS;aC(LrjE$LJ*f%{xV{Ur$kAAFVNA7M%%XcPZ zmu$?z`RVyCifMj&c1BwCrMo-P^5Opz>fYIdho%oq%}Lm6@4hfvUj0A8PR3?d%FwMGuKFnM;u+& z_a3-hN}qd_(#bA8lP(=|>)&^xT4H`IC-Ldj8O~)cu5`lU_K;!P&O=M;%?E zAMP!Bo%P8_DLy&p^|srNuF1JM%i6#H=yHG6K2QH+?>;|TUJN&Re-1bRZ(?M2a$kMC zh2ncd>=pd$Q2~@^_f54*qY~hYIU`2e0{9UNQ&&UY&O@(4{+BK85Y5jyhiI>>{d10- z7&W74Srl#Pc1LQ1-STL&I~+YlCBx-n^4>!S4$t#nwEoC(hI?J7)Y@6?fOYi93DN2F z&Z1*lQ}a^`-CFCyndnJJPB*D1)@Nr%C+9DpyyU=CZN`w_cI0G3-ZVTpw{K|j@Bu@) z1)4S7hW2=Q^1uO&x6UOur)KuG$93`_j+|t;k8NKw-PP(4ex3T^BU_AN8*A+bhiPNRjugRIvfX8+GukrTo4iEBxzS5B zCLil18jCl$#OB1P!4%?1G?+phi3ZabH<-t`YN(8sbZ#$kWiT{SY7gtwk2%g#-Ei)6 z7NNq7o)f)9qvr%9ZdL7iJzI3Q10OK@J0$Avvc8M1($j5K$D^MfImIL%*X`EFYvpdU zRcmwyYn^uVw?`gsXeW2O<7m0Fb6wL?%kUScFN=PO3ek`oyWP>|7=)|sYP}P^KoW)o z;Uz~NW+YC65sg+=Su)(+S*=%FwQ}_LC=HExOt-6-4&D9HYmS_1QjhO;xyoQ~AFsCB zwMIQUfd1H2ncdXw*6N*szHVnvv)b)OPd&2Ph^;l0=

NGf5}J%;j!-Y-p&q8v+qZ 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 C3jZ+x literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_coderam.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_coderam.crf new file mode 100644 index 0000000000000000000000000000000000000000..ff3dfac83574b5902948914c2720fc80778e4aca GIT binary patch literal 198103 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�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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cortex.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_cortex.crf new file mode 100644 index 0000000000000000000000000000000000000000..c4430be32070fdfe4b4b7a2275d26a4a4885540a GIT binary patch literal 199155 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
Mh4I_YeemZmcrL*6Z#c$Uk7j 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 HmFWKfsL$x; literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_crypt.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_crypt.crf new file mode 100644 index 0000000000000000000000000000000000000000..d845414655f5b92acf10cd490dcf27a0b479f00a GIT binary patch literal 200463 zcmbq+37lO;mHy4X5VEj@u!xA@ium5^C5Zy^`n}ibXL@zxZpB65|_bkWKmRL+;H^&eN}a89(P z^PN+B)u~f;zq2NamM)3TeD`CcGwwV$T3S5&?2GLG2d6HcotT}PoVy7B)v3--T`@U( z(bV*wi}vHsJ+oIIoIiVC^p-z;yjF6x__W)@>(=H~ZKP1Beg-*(^6mF(c1t!U|v zgzTb?IWRXh*FizeP0dV8i@ttmJ6byMe?r|ebKv0A{>fPhd(E8}L`!S`C)kPE1AF#J z%x~R!ezdfEF*P}N_1ygAflj(Yi+4UXTKeS0K+Io#aI&*^@)8(eo5K}%o*FGZ2GXcv z-PmTP$#Cl}zj{zr(G5B9fwnp^JppOkQv3f;Ej2r1A$^MDCebV~9cb*e1Eri=-pztp} zI5i{1KX+tBH&ya#{;E5l7A@^swDPIBnXTK3y;A?sk?G&RXRnm599iZMOwD=b-*#lm z4<0xqm7j5h(pMgk(x)Gp^z6K6`IC-JdhXzq)cu4blb%1o!P$2AM;}?CAL=T3o%P8_ zC_XXkO~^MNS(9^fmbHK1k>&o%y`KKZ-g#cMv=nag{(@jX))Rv>6MKipnkc?E#jAo3 z9T7lfX76OPJR||WmNR0cExjdo`sy7usKAYkDYt?P959Nd3sj{l;yhc_AiHSKb9M~$pQhmVa;QLINb zC+8;TJN4!T)6tU-pJGyv8=jdSnwYz6;^O_2^=U(X=iw6!dBecO?B4!~L;DToJA%af@o#YuTbZZL9;Me?X${Fl#%V3Ubt}jYYpae4 zMvOFT%94T3j@odoS+7L@h|LI z`}>AYr#{^7?e4U9H)@?u^wh%}jo4~KiQaYiWRrAk%v|ZTM*I8gyC4vu)V20Colc|N zYS&89umn+Q(O=4v)EX<%a%uT!ocf-_Ta0lVwdECS_fjb^I5ND0|DxBb+;CV!Zd&as zfI8J$Wv~@pAdO=Q47Z}b!y8ORufj%aTW3CcBh1xRzZxmUUL;L>NnIr*9rTh=V)M~u zF6ofLdK@%rtTjwhV88X#6x#3oGzIq%MmH^cG(;-4ASm>o z2M9{V&m4i~IUR398EPFH96>3W3sIDoLm`S%a}dL~Mq5WMmza#a%+DZ`m5T9nx>B$^ zovz^9E?pTL<8Mmj&MLSoKu{Wf6d))S--im_LyktLn!09k=913A`Pt~buHKL{q@Wo* z-who!M<=fI7!OQb1;*=rMxD4BjHUyj;cn{;)rX@|*IST=GGgKxULwqA;$yr-n9jsU zB_YeZqL#-}{^=0-!Tk z!vLa-;Bqwzuv2fe6jKoA2S}zk`T`_VDCdS%AsaIRA(NN$0wj~6kQF9ZPjyl(7n?2U z+Ttb;M>5KO7NQw#_k?Ih-A~YnbqiWgZT+?kZ}qcGf+@o5(-c#JuS`=+0seJR4f6DF zX%Um7m!~NvKLG1~o@3 z?P!_nq+BkOy)!z@HTi@r)zRVdV136hiD;Z%TvCgc;ZxBS#+&taEgF+8BgNCKm8;Pg zvSHABG|aAS81N{VFS^cy`p}j}t7HShrlyU}Njv&0nJwE)`pV5_z1EB#=ap1*WCuJZ zth;7Ax>v2hIN)LhRv)gn>*c{ts}bGfrXf|$m7Q>94At9M#&c6+wgF?cN_(V_;S~V8{L~dt2j2*egU~UC+s%=|=pw+bTYLJFX!*@cV9D&{rP#^M z&(7?Ro-9S^3W-G;D4w&F$VZo~-eb5Qv^XD4;5-Qhr&XgrQgyx2YDP7*Nv-$eOR)Qd zUX}dKBy*X}LzejyhFK-wnPk3-%$qIqrwsEhCVvuEYcrsZW;9URe|PxN#){7@!I%Uq z8nZKdCg;yA{Td!X+_1c)7q6aLhN)c5mM&v@+r%UFJC94k_?$s9Ojs#90>PuG)ymM6D-)L2u z7)nGk;dSzFF?VY4Z!TGR$-%ijv(cyI@HsrvKnoD#>3DxVdW4@)!xlntwBYqPUMAFA zebJdRp^AhjcnL#&=u!fMo|DaLdgb^Jp9F^4+E8DuTE!s8A^pX$Tjvs<2XGgAqkp$q z`N5KvS4`|bG#Py)!POdw-bAi-=%7pQin%`IX&z}t8|Ap&x3kfXIFf61tDp|fo9Ope z+fQPg_hWEhtvd2gmaLkcoP*mEK81BQZRuR}QmLvkcwuys1a7s;Z8(h9M`x|(2y)Mo z<;X_#3MMF6B+O0BN7o@?bVpf!;65V|GXhU5A>IfF2 z^6w$+vBcjaL(vp$(`cB{>qs~iePY{5v~BGq~nRX3+7 zl}cW*DpR<+Ih~N;#SRj@rzTQ$a}r)!g)pXgk4o^iRW+_mr4sjOSGfuyuJnC@bn?#} zL8ZrI!A)KrACIwIj|Dd^UD;~1YJ(W4L#)N)TmO}ltpCbwlH()F>OP1+BqD5ZeF^g-oncGEtuU^%JXhsx|T--&9Pdw5Pb&o zfMcwH@n1uXMf5(&*lIMR*Mt~LSR6>k3K;(>#Mp)PAqtQ-zHq59sap;GD*d#ZmoBR} zl>gB5dv!XZPEu|S=Q^&X&n{hAX^hsZIEjQcYHvU*$0n;kQ^( z>k0K_hrk^)c7_$~W@`%Oss*`-^%rit?64Zxlwr-rEOq73DgP9=m~iq~($#tRq!9ig zmxCDp&+S5q!KTm|9;$OS(!xQso)fJ@Cd5LNQD2WjQ4nJ>$jfs%i1Bxs9F;*`#W&<~ z5aab(9PQYS>vK7Xktj2lmv(H&jhPtaAjTU5rHauQXOOiaL;|o>pOVi)lyU|O>ZU%t zL!mVDS%|XR?aFQSadXc4iDA|)z(bs41FDEquC(i8y4jECvk>K3eg{({3Y>eD_RiXF zm81Lf7>MxSen@J{4BsQSgSRv z_@@va&SN0LQos0=4MZ3juI;MpnmR9^g($VeILMr|cPf9FGGj*$o$|xJ3d~UO1#0nj zQ|IKV`7A`~^T%{GU3CylQyv^-kz#wzZk-tU16;)Vi|{lZ&&e-ZwxZH*4o0i(ERB@G z5jYmWmln0xg5m!U6v*7+VGGbD&LaNLX>|NPJ9$cseiBv4}m*k zz~3b{YLV8ev^ss|Rt>%aMhYlDb=;~|IyW&oeXUvstHccslq0E1o5GGmGh)%&2fvOz zG&6Y7gU)$EC`1|Y0A?wCCC6$nj#4mIZ?;Ea%>dAN$>wdjd%ViVN%08eF+%$rC~(X5d=$KPz{X*8t_`&@znpbCHe^dax@?6CFs1i? zqdJ}e_kqa+GqYEB_UxOOzI1Xgj&e^iNI33P6#;z?>}(76aRc@ev|p{7erQJUiAMTU z%l-+&el4m*>&CI=+@5`tdk^iO>|8uCi@Qj(IBZ>SsPJU&ox2#T6Ok~5gdd^GwK@dw z#rBD&`(CT@vqmE~V7`Rk8Qx+gK5rzRkC9SKAn;J>NOq7PTbbL8%yW@1ErWb18Bv>9 z&c=0cyWzhYO-DPJZ(p_s#};Zx!NNI-B5FHYVo|E^zHb1&2(%0Vqa9}<*!A)=#ocVi6H*|~e!%6Y__ z&mkN(%YUbwRQE1h(X8z#AcQ4eH0zWi+~a;q34s`XN|$!;37l^2#}g?%+F>VBdf}P# zakfUENTh7Td5zDrJ^FYer5t@Ikd0&BndUR#k=?Bcp9B1Y%kK zY&FzW%k45^XOL)guO=hHmZI;Z6HC#5$Se-kTb1aYq3o2RZBjS&jIGv)>%H$QH`EaEB<$_fS_Srr# zORxxkLOQhsA6cLVdsS#(T#D#|KoDK@4esF6H*YYSH>_FH%^_>hj!$rj6^@ME$bhbV=LTj?#8jgvBsNx zl)i(btYBO~z>1?yCf~e#S-pl%67RI%ynHzu?inmi<-LCMa@T8KV3ocZN(*eHpY@Yk z%?ieexDzU_YO9UIDlcge{opn)sYtBP_({aN)lVYU$NVH>eZfmA5$n@_60tt+ClTwT zeiE@5Ca9YRt?we%r~D*h`5EdW)-664u|8*8@0*veD%V;ByD080>)yQFc7P%_Dro2| z@Y6IaJcRIw*ha-`D#ou7tWMJd-?`)#QC*+4z4eymtLv3oqdC%!?zT4FvV2vus?yGs zY2)zRg728v&egX_JG*R4xka~>bur&M!B>jTmXKyNJXzXPK^Q}|+C)5OJfy(LN(*}q zB(C-ou}vPWp%cVC9GR@NDmwKYwrkvi?o)2HqOZslHMZX&jcM#qDu(?uHMox0(L&^< zE4oy&Vr#`6`nfUHIIT`Tw5E|G2dT49x#p znZW%2K_)P#_dt<3HKcm2{S#sBaVz{Wy2=RLMab$$;u2Z?V^JdKKwg)!Vy!9G55~P< zA2hG}?Nb-WBYObZQVR3ywAQ1Q1R)EyL@@TbM9~)Fr zz`Dd->Ok~7YxV;sYi@~$l=^W02$n^0r+8rb@=E`X=zqL~!JTkp*|T(WNl_d9*s#%n z;~@K{B@ZuO*58LKS!SAh_QN6Gm(*^XRfx7~J6L`Noan~I;!=wU z8%n2^B1V;)vL38dwb_pdn;o~fYgeppA(|CE7AvC|^V$__bRy!-zG#P~Ygeqo>1wUn zL;!i*hOS)!#|MUlwKhA~u2@+eZSNk8-j+-nz;ZEOdjSg$lR@;kOQqJh_ap92a1PW} zt9+SEYv{BWLR#neDE5S+&hsnt^Zcq6tJT;!UO_BLtmjoLR#o7AM<;y_q;=y0Bht{~ z1`uhON~D)cNDqJ&B{3({8anMV-^!A<@^8Xc#+7j6iZ#_1PkR9RWxJTYam7(ORZUF1 z1f@;A5vH0@VArB=T(O*k)>$lKHqrtxZ4p09%8pmt3h;Nf(r#R_5{c0LCYzxfSFA!3 zPSc_W?IGd^SKYWmjM;Bw!(jRgmqIt%72;rRljNOe)&2hz&UoB0-?m~omo-~$$3y~R zt>Fze;OpMDVnu~4HHQBpXtQ=7TuGFp#oi%axZJd2S*3;` z>3IA>iK&CVUr6K3^5YEKmTy|I5@~45*GoZ!CzqrDiu=anZW4WCMDp?M7&|CYOyx>{ zsZhW{R=gFwNp^x+U${}gWfNgNzvv{buYsJd;E)J;OeiE0CqcW+fxO)90 za*f-{0lHecz0VnjtN+@t<@tu)Z4Bdua9yx>uUM(KE~B=U-o0X#K5`Y46w*xBxX)?D zvkF@4|Kw}Ee}!Hxe$Z;Yf5l4er`l>K!gsZ)sGjxQWbE za|+AWZFDiUqH)DtW~Nqk>g_&nO{ad*Pwm&Kx1mRC+;|6}jJVEaf{S;R_F^1iXjb=# zha&W+2t_SXb0}PvDrT;eO-A&>O{L!Dr!=tAr$8bYDdej#T;DFiF60JM5FyA zFVR4r=p}Y(@hzCwwfNETysmUDb^1AYsI*-UK)tb|62(Pz^^S*1~eyTzJnxAT5MN1@t!TqYw+pP;gv`_N( z=v2`@_0u&fW2*%Mx{|SBm5V4qU&2YAy=$SIjkvgGBM#`eebCWW=fSlLE1>!f?!0&j zeORV?2^E~9c?ng-HhBs3xOfTu(I5slT~n)+mVV6U)-H4kOx$)zh#$2LnC$wBaR` zWSy%P8Z~{6ZrKP_yOfPUHA!`^N!RE~CKMwPT+2b72V)($@cWw=aB0twrSH24p8yAA zbAEzTJ`H+ongg478v|^pMQRv=ODk6KhI|(4c)PnW9YDcKKB)xv)`uD;#5%=FM7Xj+ z@K~tiEh#0E1xufxlA=)Zx_lNYd23jSLBZLLeM`tQGtR~fa_EG=4yU%dGBzdU;o}Tq z7h`M@RW4-}o!GoD8o(wUr||YhyOHhc>>3$pRCPG{+p@_-{udkuY2=LwY50bdMt5}@ zgM$`%B8N`seJP`@Jbau%?7`UTXXem}y*G?ac{qlXy`rmwVE={=_FS1sCGOEKILQ`= zlEt`^M(x|tFsN%YsYKlrKvlA6lj(9`_le6P-7vaT_adFh>4stHXc$54VvPO596GUI z8YpAfMtQ97ZIGNPr=CuEtWp^qtJd14Otvq;LmlU*Z18ZRZ=_mpkIKIZME-0xndo0i zHSSnCdS+O%Xn;SLO(yV{!@!Wn%0D?)^&A5*!0~wbb>!SWxAEeLNWt0Xup}Z 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 A^#A|> literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_dma.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_dma.crf new file mode 100644 index 0000000000000000000000000000000000000000..c76c39482474618a499a5fb72860bce81507554d GIT binary patch literal 203139 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

rKLFN%tBo}-pqqGHT<;Km5s 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 X3yQ2Yu(05lmYTn=|5>3>QlS3^9ZsDS literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_gpio.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_gpio.crf new file mode 100644 index 0000000000000000000000000000000000000000..7cdf96d08f9809fb2b66680dbb9399825b4902ca GIT binary patch literal 203750 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_i2c.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_i2c.crf new file mode 100644 index 0000000000000000000000000000000000000000..c5a8c1d8a42f6b2e658dd867c63339cd5215f18d GIT binary patch literal 203292 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⪻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�#l6a+D$h~ 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 R2aH^2q5BzgtXfF5fR%BAn|vhY@q=K zj4lEwWpoihDWi)3PLeL19}63YS%W3i6^-bMMs!7QcSUb^MQ?XSZ+As+cf|mA#mwu9 znb#HUp(_TrEBQdzTL^9i7|8zXN{-N#%%CgzK-aqoIQzAFo#@!2Xg^GZ08zOqly!aD zfaehUEor#x3yga)2HntM-O$!-W!*TB4&=*r zV`be~S$CAw9VK-~N!`IwyZ;K$e$ZSI-vjYI5Z?ne^gsA zupXShJr)D>MBbjr+Y@b%=ZfTFF}v(nP`v%B0hCT{ z0k1LiI>8$NUviojP-+2%6+i%mUU<-w0%ltQ1s6aJ1=t1(Sd|LszQVqEP(cAxwg4(F zOroxcX<9fAfA}1a=L9^|FA8L{1v1wH*=Mdjjy$G7>Ar9|!3KbzlFU+ux{XBKM?fP? zfn%F%yyFWN_-=)51n&}X?ubEevlL2Ux^NN!<>cSENF8&2B z{)I~jE+ycSU$_Bai4=Mx|K3D!Gr?^HWDgop#V%0AF1$uS&QN%ZfHHG|QgLBB!6yVK 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 u%d8d8bh!BQVuiQmH#9af3Ik0m<168`{8bVMco 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 Zi(?FewGewpU^}vws9v3&N;#?M{{iAnGe7_U literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_misc.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_misc.crf new file mode 100644 index 0000000000000000000000000000000000000000..561000e53f79ce224b34b7d85fe73ea9b8521a5b GIT binary patch literal 199889 zcmbq+37lO;mHy4X5JK3(D&m4G!h5fmBnrsu_g<%;>E-d>>rR5`wMiP%lB7d-hs|Zi z5!4xFbQTfk@4hgOqoTNhj<|2Q;4(TAm%(iWR8(Z#aP#<+0IecbyY0EuD4NMfU&0(-+T9&Q4FwU4;LN>$B5WOwC?2 zy?@t5d-3PK>A78J?TOy>r?36@iU|Mv++ACurBAZ5_zx#u8|gGVl-zr8_tZu6le3pj z%|rH$iEQnz(P-&F?a3Eyo0{GmU(t6_wLNlCt6JNp{zFUmoz;I<=_38#wVBzei<$;* z7ygKM?JEKB18=OqnzfZXZA~rzIswDj!7K+Io#U@G1{bqNfx&Ebl>PK%Zv18G#T zYHPb@_LJfE+kW|LRYf-xzz3S@aJKFJQHNLP z2YV`BXFdBc#V2RI-gfKZH90qDS^M`KUhc2l?dgB)UFSthE8!;ZF9`NxIWaslxqEb? zjpBPlvMPB0VFA=;c2BjdBNE^%1tUh*0<0tEr>=s$orhk93Rtr6ifC?DtcZ5G>i^iG zS<7WGU{n3*SooZ5#8=cudGC6nI$Tcp+YGcMa&L{8YpH zNk6rsRei!w?a`?p_fvay>c{-lKArl}LmQ1@>zkc14%EhsEg6EbWV6dkccg8&kMa@? z=Xx*En0%y{Xe?gm5?k9x45koAqQMm6NHmzfxWPQaRYQHGs&jj>D}%w|YG+8Ne!_89 zM-At0XAvsQ=sC_yG{s+9mk^+ z&05@QH^<_EX15dl!=Z;8+6i$yftEWn8=IC|!-{eG(&#}{h=yDr$0MzA2sb*7(Qfnt zNf;D_mmGSSkvJYkjI|relA(BOW3qEQK=(xShTC8;&mqUF-^@g((~hfXxcZP1q2tldkc!0_1UR{o1# zt#ZRr4Y}!b>i~-DjoNT0x6}<}Etj+O!^m>@9t9~_7%Kb>%?=A%h2iT zZMp)!FF;V}KMN3)ik~Wq((qr5=c@-G1_ZfBKMlhNVgoe8rQ}Spu?s^N-P)1CAw3i6; znfMql5vDWo5oyTkj;P}?5)z4z^b!e)L|+dfk@#@O$&Ly$k@!c~9hqoAzu>1D)Gzs| z2KIBV>jEGiZeRe>MR2(q1=y)KSc)l#^8+MP90LK8DU@@=s*sJDfRM?{c>$8iP{<0C ztEV_AmW$06be-rX4@WY}eiEV?ZTE&~M%|Clh|QEjZG*N9Z}+oIf+@o5vlLT;FV9j; z0sc);4f6DFSrLhiob|{GD1Nvpue(S&A9SPxhG6DHOz;v#H>HqYt5&k^D554Agpaa8P0F3M7Mj z(iKmqxizkK$40OMVXxm8raTJ#6Zk2+;FQqU%9(dWG+R8cMZf|rDboMoik+#oGi zf&{}#((EX!?b=Y>-+=)~NkND}jHD4PG9Ng!-dMa6OTx|wCN4W^a!oqi9Bo8mtmZPX z+C{%Gq&0F0ZAgP-?OMaoU*Y;1mh@v-=6A>2qtPj@MaQ~0z9Lh$H>%sByQC%b$)nK5 zWlnS&3~GN? zMuw-|sMe#;=EI=(XqX-OFyK)zpLd-H^`R||R>=m0O-&b@lWz3aGF!Hp3{>0gW}_WF z&MT?**jD&USa+icCn1-rp9aoCK|Qw zSR0LOV7L)&m${Y{44<%aU>t>40_^hBR-kQSUxvdVbd1q%du%wm2(atcK5|L4{MIE{ z3(ihmik;m2?9ATiY$-xlNFvfg@tmndKD1;tP6`zFuPx4pQaDdS!D-d#k5t`kb=pw_ zZBpy~$P(;6p;sk;J#rBVQJ9_U|)&msmtYaOExNtMkc5Cd*=MTl%qM6`)g~?9mX6hhsAM%c}E`R zD`aJ>(rGtGs-11oCAMC_Wa_mwJ53K*RF@*ERE)@luuqrFol909Fx;yx&YdZo0o0eS z7o)p5P^n44_L140=vBs_B*EKYS7xW*Z{|jd~q}9EbE5!fu^Q zcpkuA?vMW6X61WJR$ei=_uy3Y!4y|#D0&0A)}ezgy*uH0zo&Vu9c_@~_Q1AQH{wXH z)vba$IB%lgTWvo|aNdK#eYNVyKU%VCc4`i8OZXJl*|eo|(Tk<3+VF+Z$r8BJsdnKo zS|6Rcnj^@)OO_)W(aV^iV39C4IUikzgw+WLwuR9r zK-9k^h*EsK9vg|KVVg$7jNU}TY3LK1Po`~a&pEh%|Kz@@-RG%I>*iBa zi5FmEI9+Ayp(RIPM4FqLy<%#2DY^p|CFx5iqJ#3!TJ#e6=Y`Sb^3PFh;URk}tLP6) zmR=m~uvGkcrP_{bcg9){tJ*hstDEjr;%MBOnTu+f)DesXPfMjDi!WU z;ErZe$vd7(olv|_$)u8Z;4lh!y(!4+mo9H&W*D?3e*IEe;+t%#y=*B;?bEi@@aL7$ zC!o-j8fPwDYVUTlx=IARviVhkbXxto|Ao~zXsge)R^Q-ReU>%zhNVlp(YJ$aWgKZF z%?WH1Sm%j9YdA3xe_j}UL;g7$eV>1-=JZMy%)ePG{=71}%@qviV_h&WaFwPKb#q#m zNoAoNn@ZKqDaxdhSFFkuu5L~zqJFYJ$yji+SI5U=EZ1Yf%}ZByTAju)2I>%NIXceP)w@_%Z?<)XKd;2( zVtuk^b*HQAvu>xDq$@S56pqd#GIJ*~bJ;QNsOa=_IR4zabVaj+mGPS}yQ`Gv-nw)x zj|kcmje05iB<2CfSOeoNA;vO#pJeQ`+R>{*j1?>nBx4PX{~TiM!TJydNE`ohsW7Qm z4gD(p^jnuMYqpgC(DZwCI-*WeZV%@=sijXXU0G|5H|x>0v_=i?pF%;@F!P-3tt#G@lku0}dIh}LtWb;yKRh%)Z$Q78&xA^~}6AqO%3 zK9{35tgHBjLJnfQHjks5*l~R!2QgA*=JL`_?6@%(gB-+oeV|k^8siMIG1Ahd`s893 zqEvHOP&dudt*UO?#VkbG>2~F|`nWk~{Uk8!7T_Vyu>n=Ysn)v93Ek|s7qbxMnSKXT zBMO{*weGgYPL-qkix`OT-+o8;5a@GKC~segiAeA9&DBUOmFj4t(@{8=6|)d!Hl(Vv zv%|@x+iqN-a9*_#6Omqb=+S0uIh8f#a)xFlO8KmX*@)KX7bFJi7#qy7QP#V%>Fy#1 zBK#!4Fx+Ug>iDM+9x7rW!cxEZlnq1}8*S`p>Y6&Qn1v{f)HukTbhjygm@;E)0iE)r zz6#7x@C9n|Zd>Q%Da9;A8Suw+HC@FBrl}4Ovq-VM=3to``2$?U`it;1oy^HEShk|p zZ4XDQ?JSLy;W0QC=|Ip^?F*JIpQzGpmdx!hShf-YNzkX%`&J+u)T|NShYmA&zWG z5~ndr@1%lxo2cdh3sG*)vasagDp9{!$L}m=AK9gcBdd zQ5hVr!$aVX81Q$6jasC2YMpqX+G)U7U}Nf%R;|*xiO~zPwQ3ox5|47A97$E$GoD%l#sV`c^Yx$b~m(M7JKzfI9ZZV^3Yqq(%4xLcwNqFS%EMrQ_|w7I?*{XwQGK67QtM8*+HYBT%XDZPTAUwUyH{E2Qe>4 zyImbttdZL@y1hqTFQyJyuKDCH}Uip*U4xJ%uac8JG*hRFMYwXwn z#m)K-I6!Pe#EFDTdVw1^P3W5_X4|+f&v1zXw_MLd!D|O>5=Q6RP#5#dnUBPVY{`d~ ztxy4`^xkh!$1~vGH??nO_Ud@op2_`}PVL4~?x_X|$DOJopwEGwWx+mTz+Qy*t5wqv z%?LixNPleEKWf;oMU`mXIJTVIwP$Mg!M#)Q#gntRh%}4C*7b%8Pv-8qi?KQp3DZdU z0jgZ9LjYf5pJ=-8vKl{SG;#yxOZc7PO;+MFM&fxGDYXOw50#E|2l=6u`J9n?4)UdC zkS`@8Y7@)Zqz>*d{8yvtXb1Bh%hur7LJcWcIHyrWZAVKi%9jkv6|T0F&c^;-h?7o6 zsOaSwKD3fMm#t4yRilY6MztlR4XxR!seK3R$c8??(Gu5n4qlvy;;88q;|0HS+0jX= z0_^TP5RIX~Xdn5V%Z^K74ouI_!CiB*W!NBa74hq-yws<>yu8{L*f*E0NmOH9p5*YG z=^Q>Cww`$++WqoxE<5@_${e`zPO#J?4+vY}K1lKixkQo8gjeI3Q8oBL6md!Y_d4r&4Vpr9lR5go0&6Jwyx z&OOUk&LiG@4&ktQ{yXKQx^LNvc4KP^AuP$FS*MiY9`{o!2*mJHdbE2_;Ph%go=EA_ z4m*+356_&Bvnl#$DrGayYkZz9(MM7#)#&}HlmRRkeW_aX-c(8*4oIJ;f&HtWG8nzv z?gs8#wi4x2E@2UqY!FOR8J?D7jUVp5Wor_jC&Enxn%aK69*sXeVo}#e<0eZ!gaF{8FmdMn_88vuy0QMcRk`d*VpHZ`lzhuL#YDBi%0- ztV*!Y_JLV~W%v`asTKIh0yWsLLi>_ZTyNBMhwA0HgovyYZ2=2XPh5%436tX55Kf`3 zCztmG)Ch1o3M=fCSNZ>^<$B+HzpW>vAXu-8VJvB!I%NRu$WIxIzGqw3KP|^rxZU1~ zV})alH~ENKdnY_^$_mB>1gtpHWb%#6mo*#cB*{+ujmwv_;XazBsl3;3T<&_!^R3c1 zLTQPO^izIPr(MH1k#s`ERqu3hSmh-RqaS?EODYrVlYSDhZugUj^h6(DXLF;>n^>IImSbm0jh;^IKMXXQT*89fgtE!C-!7fUA%epr% zw;iC2jS3n%3;cA=3J)PXBDPWSnu_sj1gq2Zz_%^AO;p#XY;V17`RZn^(Q1!%qkF7P zw=G}QuB)^&WZHIkZozj4`3ttk_y{hkmY1!;u-&MxGJFD6m4kOlg5#!t?%O?oy@0YI0%x;fiyrz$Lfu(a!A_RLaJ`V&n?dXcXa-j*!+J- z<$t@i1PsjoTA9H7|3M}&r}sjUIW?qut^K26?MW;AA-c*K+(pRh2a^(6{X^D_Lfmd)7lD7hklNJ!IzS>upIrl$6v?n^lN*8e3U@ zC7kFc#o|)S2ph_#Rw71~o3b9R)wS6V3!9y^xNBFe?jV{KJr*mY1oPSzYjh&w%|363 zrE6EL!s%+G-9`X;(uS^G0mlc1gtaz1*REJuAMfrQj^2_^8p3ihS$hEs4wGT@xl5(i zr1vB4O>ho1RjYi7Ol#@1zl5~T@e%9^Wu51j7w7pED^{zqb9)W3B#E9^tXNfp_Z^+| z*^t(a3yerZiyK0uVJ4AYDj_`tR+Pk?Ol#@1%X}*<+RDETTbWeCjVspFJ3Q?H=ojr` z_Qn-Q=u|Z^@e-6a^+uR#LV;b2zH!BJ4q9ijh}lR>z_dmDOewp)-c^9Vvz2z^ij_!& z?l;&B-MC^El5m<9wP+6!-?!?<6=KYOJsSqo|8gmGqg^2m);3Arc~;&3PvMLw9rGk$Z{)Ls17O1895==H@L8?wf!-yEm@PjeZ|T#HQ>5^ z(A!t6ZZfGv!6zb z&azG8<`t{Kr;PeqiV^!nIA4VoI5>%(DihFg(Doz;>dZ@Mb|<1!rI{V3d{)Y|w%4(D zNER+PuUJ-VAV@kHe^6rTVDIPBIJ5kCv~9~buULsRwB_riAi|TY(SId<<8e2OzA+~G zcy^2(lqjZZZLm@*;UFv73f?R`!K^RbD&ew;u(w)kmBrB{a)6WymRdefPqZ?X(i^Qv zrS##hiZ9iVcxyjp6Lz<#0``*Q&;oInBl=Uav{)_duHaI2GMMOEM+LVLP$&{1+(iTi z5JkqT!?*>bnwJ~OQI;y14eTQ)y+OXxthTUTfc2WpZnag~jN{asHOs#2LahI8?b)9;L&)d+cpZ8M-b?WEPqcv`_gHT3X=Q6>? zyGnZ@jxaQE=v_N*U2U$df}#0@AgwGn)g4QJl7D4a}2ek<=0{k zF6l(N16-ofezKQnAW!lVd$jn8nAf%Vk;%NSbS-uIIe4hF9S%Ufv7!>iMRoO#hf3ti z(HMn9ql%t9lc?S`QJklGiN<`9CvY0`MV^poFi&!Y$BtvlH zvd`PA3qZ6_^7iRe(LVLlH7aAP1p>N~v0;^qC_rDrNuIrHp`4AlxMm{`=(zp0qpQw? zYZq2P^&8xI@e&5GO!X3KI7jmm>WFRf66kU95(cAT3~sunRw*rmn9Z$S=oFZ^?U0Z> zYJ+ItbXplhofShbke5YO2f&fK)y#xSw95&g+2dfy-c4bP$4*xMO?S2Yn~rMvcMlHF z?LoO|-MIT^O+v%Qg3(H_P2(bt{JVlkBl&j^c6j!0He&1)Ryws(UnXnMx(J^D2V--7gi}5ZdTf>hn|K=oY^Y^w7=cSGQSrKB7V3DbyD%LEarGq_J z=2D4!qzg{6#i3*|u4GXMwzdrF+FUA8j}D+JS+vP)Ik5XA<&bR{J*s<=PULLEuyizx zAa*&y{>uV7v0of0W7tM{tnY1*oGGWixH?g*4Nue?T~j7o7T}?d^D{PhIMLTKt+!9* z-vlCmDxXaBFJu~bA{{*=ELk?dpUx)}_={m+NMq%n9;^DXO6g*%t7C#y1N)1MS*YM| zGx{Y;bh-;=GsUmSWvilA#6Sg4LtKmQ_s3)qFelq9H7jEF3s&668SF{w z_4;BKYWT-Y!Algp3YVv(k|_DxViqcSWv&vUM32oyuuHy|7qd{w4Y^9x!tZfma*~Ve z!d;aE$pn8#W(rHlxRjAzQ7TfhZusYXGJ)R}2Ii_EJKF;ogBjukRO896C>@>9*%hUw zV?~*sROn?=^KJuPc!mGC1$e0A>`Vjpa1ce49`Y5vjKRTZ`B5PUb^J6lWuxRBOR zE+ejfbYOhYOj|!F`p*GN+888?DB-TZO*jk*j)5U(Bu+(1|^i!WQz; zA%CHSCWo+Ev)@rg{nH`_qCb$T3yFY>{oc@J;MIz_-X2S?Z5H!T$WzZ|bvp z>gp&=W#s9_EYxywsER4I5(KAGTePPKI>4gX9Ia9IJrHlIx3 zx8wnr5kwtoIm2VMZF&j6sen%C^MWl$$s?pB4|_;iEv{~YA$ykhY%GgXrbHyyQ{u;mBQYaX@yvfLt8PTCfuhcFp#X%Jx_J@0)1J3VoHo%r- z<2l7F)bUq2+0ZBmGqTT7u$-+4_CM%wy=NgND*A=r)h$5sA6WQ%`O$};d`TRKxE0-2 zFDPcAnjLO&SxsV+^3X`7b)q(HN65Qy-LYgF$;4tQKY07y{$kAJjG~Ttzs4`*WpPP`wb;Uov~ag?2K4;Gbcrz5iC?v)EUd=;?AghJfCXR3+EHF6|Z~z zg+;|xLcozX+I#I&_r>QIaxfp)`J=s$fs>GY4Z0)#MIi?@yr@9KCb+%xHRxvb!a@#e z_?rR^JqRAl*Pz?fwS^qiklG-5rBuO_5&0T)gSxJegBo5|kcTpM4*42%YkE;32Q^$@ zprM2)M$fy59AZ(TewtbEQAG^Ie}cbg_7HG&B^O@X|L7tH!ap$|zJvg>Ja{wnrF^5p zI4}@Ci9zzt)AZ=n-AZI9d0hXp4%Q##K6LNTt0j+E@S1w>*42-MGS<0 zd_H^+7Sp-#dhE&XR%SNK?^c-0^1GFp$@06EnaA?G6=t!5Zl!ze8Tr}MGuWB=g;T;k zJ8!!s8iwvwtpYkre!IWjlJZze>lhpn4T>NrE#)uYCm)NzKS z<2WM^Tep{q0y^z}My}lzY=-i%^(>V-y%KimHP171vCGjfbFpKW5gyx&=>V(!q zz@-+i;4QIgHvTUxpcDLW{KAp)Sl-y@61~FVO_jDiczo-ET-5W9oMN zm#;03m74EzPupd3;!yFSm7EOYvv)GXKUf4G)!v(zVTXrvj+_jG$C;)Y*w+`wO3jDz zGVGz^Lvr?Iz;wB=nT?L?gWiWN%tob;_V;$C;i|ebXjt@x`iNq|djm<$?p~0K>MjfR zB!Pu1jD^`_FJcdR^ulb^_r&7t0S!xs9ED}oZIkjmZDBSlJR?t`MZ+pLr#x}t&z0xY zf?QO$H?KSsEZmPN%wAHSXDrM{eP{qL2Fyg+$u? zhRe)92UIV8#JJ?68pro?sf7M<>KxF@Mpybu8M&-Zdb--Fo{A=wWa9pde-t3d2wU>Z zWiG}#G5@hR9?Yc@_95R~CyRY@dM&^QM`Hfa8;)~|7>Hf-7rn%`2zX#U7hbO(&n;pg zd_5n&C;Dc-v|d1-SHwX0Mm{{>cgeM0uOXjW#6bALe0aVolU^vP2VC%8vR*~LzJN~f zn=%U}D~}gv9&6_ChjWBCZJrlz%zwuGZ?>F&SrjMrz1ts7!kBp1)bsRVT;_;mhi9rx zxi!-))Rl5;rdZN$O-I&a7L}yjnrRj)Nx3ysEO2Xj!yfX>b#@u?@EzRb#K?Y?D!`K# zW}~vx{c;JQ;pLumrD=uZtrlJz#Opad$xPW^6sOLkH&a-(9wxFH);v76J*9bkQJmC# zQKq@*+<2JS0){nP`zlGEJB#9^<_mK)dzf%2hc#RKtmcVDaZ>X$ax{CG*qVklTl>mM zp1X_Uq~@pRX!bDi1ZY^Zwa;qaz9>#=erAql4-;GFux4vtDamtQ3-dXtIj@CzoVhK` z+GjQI$g$Dqq~>^`JQEXJ`Si&ydq5?|J?l|Be0*vlChGe_W}@+t(D1^l@CL#}j3+A8 zNcE+Kn5gRCb5tcr_;QvP?qNn0T#Dh@zR}dT01p+NlbPOho(xX(z8w~DiIOI?Cn8qR>=fsO}D*OY3FRZc5$p!eROa>tZ?BWP!Ud(UR>$w9T@NEm-{yq zF;LM7nZ=buz_P|WM3Q;Kd+p59gM}Pa@K9z^trZZgjiqx~g9|_Tav=vbd?QDL!oX87 z-cm~DAsH36trHx}r(`PVD*Uo4WB`hQcT-{Io(HwF5wom&3`i{z#L z-xuk3xH#?2(U12SUH$9b+C7WprT$;!>GyFFlT@JJ+Nt&bbdkK&|3Hy`hl>cu0{yn0 z^mg*zMeb zEK2Ku`?$a&Yd;>=vSsw+!;+vyKP$2*tpm^I7FcBM$Nt<}^uxoFphfo;S(Mg+=kE$E zvi3`h{_C(LXwlD$EK2LZcUlT8vi6rm85Oqdj07zzY}sjv;+Adgmlpk`C=VG4T6F)S z%E;)z=TFlcMYC?;c%*zFNx1+1MRC%CgPHAG022>a6l=!D&D@-vSrjKVU$KB@g^Aa% ziZz$5<^zl3q~rhY5Clk0D0M^oIoau(aXWQY#;7^Vvw-+%G{L`6+;SdmlWv{gH^rYE{Yd!TUei8ce zJR)JQa#z|sNsNLS$clxW%_9=>>MW#^#BIS0WZ6Q_GoN;3LmR;pwncjplad07@xNg{T{K4-+d;bN5PSpg?B>^jd-sO;6V;|z_WPhqzdm;k_b9{L&?G&W7q073;2)36Y{ovGI4Kq zYxR^gmhoA0>(<=g=28j!r+~RiHhM)su47U8={db{Io6t^sYLxn098?OMv<+pPV+)N zN{I_S4wOVQY zQi=Ne5ULtNUh21K{Y|OZHX-p+Cu=~GiTifH?gSa}4xYJ&)EL#(lp06`m9VLS#8EMj zq*3u*tC;^-S>Mj367>guApq6LV)tUhN%X_q=G#_r@|)oAUWkc0#C^OV5MyN_`Ljs`PKF`oKa= zR3&Z&Cb{yE@M@fm5=|KNchjKD{0EhtxiA~m^`u*&1xfw`E-LHf(hB*Zns|JaFSDqo z_WdFTD!C`!76k&FKsKz!Fb5%T%Qi zSHI9VQ#sLJ#>0^eKZd93`odxsDw#~@#6v-xKuU@J)Lv|UvBJfZlBT$|0fvQ2#FLT% z7Cb3wSCN{GmB9d)6xx+6o|H|K3I0kqsiw$yE6m2wtJmmbzSoD(;3d!YiMJ{q6>rOJo% z9e9$7RJ>QN?GSY03x`LVE^jc{JeV2P{9-Qp+{tMU7xkRuM!_%_VlY$fhnpt+(|5AP zGl<5{gi7>ZrrS> z9cBc0xSK|OB0(SHmUJEwFG%>d>h8TG>HcC$P;!DySn=Ruij0Qu1M9xMBkB87`D6m` zO%;NZ#%|jO)*X(YbW(##EuT!_r=@_MG<;Zg>S1Q8gXrh_UNu^~ZqJj&EL5<^*PlYc zNL-*qht*9Lv*_aS%D`7rK@k-w(Xp$S6thstzM`Czu}jD*QQt;&gUU0CS*T=pK#4=a z@N8GkwocSXRbzbHg&$br2>Gprn5gJK-6}4KgcDPHH7UiwPdV_46?KVA9ywf8wktIn zvngq_4Hn{&?e2`9ZbHAR>K|0HCyz+%8P}CPNqno_x*rpus%C^a}JGwZ+C7I zDTgV=`h;xyR$bx`g-Jx?$LI9$yG}^qMNQ8*y~f7(l9=5$<37MGVTQd<47aiO9IA$7M&cF(cuJhIW*#36T}V@lGfX1dHv^gNG|{-SU{#&hd&4Ax{W1Vntz!BQRjVFiQfu1(T;dZVab(3aN(eHGrs(5ccnV=u? z^)bsv8XvK;aZ$-PjgxOF<7ICBQDvp#r;A~vvIpFdn2U&5^E|afiCP^6_UpwkQtcmd z)jC8h8mz}4vCSX;o>9a=HR3EigMcZ+j^hcDpO)qg1p+q4;v zjj2M?D0tY$PP?8GU4TZ-9~WYxBJt&nAQE=dnbu$|F>1~%VxS6fHs`5m?`RIfJ!RMY zDWa>Ka~I&DlDb>-hj1|1hN}fnj&#iXB{vkaP>Xn)+0&v?5N%c8~RiZ`W$gR1gt6r15dGW-s9?L^Lm29<8 zPr?(4&mKuV!yWDE`BAnTP@H6<|5Oawrk5BpBGofJgrw?tcg)qss)d-SWPP@Mdq{9! zW(G7e*bzoMfL^&E7nQvx+dh0O91&*P7&+9ypf!naD#$W59MmG530V#V;RV~68C$fD zr!T-mEf?q2JqP(_1C9Xey78?r8|If5(1|bNWzzC^tS4AX=!Qwez|n;q#6L0H6II14 z46MpC1B$K(j$68rUQ^6M9pZe@&x1mdU-FY=3^y$`oV+$%M2b#$xg--EgmgR>Z+$ot z+bq(1bE(9Aiu2+4viKraX1c%&X)*p8;HMQa5c>kLxk_wK5b(x!wq7+c*#Q2okb?^T z9LSo*z!{ode)DU)gYY{mPd)ZQV)-pe#1zYKLBjIe15?XrQx2aDlL&T)Tiz1PNMUPh zx1=_?yVC?eZO9`M@C3Id^(3)-v&(r)sJHb_T706$qY-e%E$1aoZgFjT^4`;B0bQgK zZ#IC(mz|cos!H&11!j9oA7*|nmrBgLTpRUe5zT1_9!D8;--O#&KqvBiHYXJ{6m^`m zG9){&ZLm44Kf!QG0iD?ULfBd!4c89Lw7b*T%BI2lG3r0mi13I7c&OuXz71&{?1Vyk zcmv4kIeh^h>Jg_c!d{Dm=W9cHc*n`IgjeG0#B9 z^+>vG0UqjE>-2;$MUZcy;-H2%=V>4ZW=*^Hlk)f=CM(=b z&UY@vL_OlgupkngHF>I7=SJ1H7hPJDpk1_SQhmI;b2!#N3H{X~27-UfEk7~{xR4QmA5!qze|1+81L5xu!5aiD z9_)LpNyaW1#_{;**if}yAFPfK>*H+k9&0Wim5KLQ^Z2kwvU@&{hXagz(Pef)F6z5F z-8!3XWxvHjB$?f7c-jmjYiN5h3-vrR+kBKBje;d?N(lx79#NQIRPyR#7Ako|T8W1O ze?UqJ1~)26enH7!7qd{wE7D35aRr92=~|y3iwkSB;c91SI}Q$Z)`lB#d0d}FZeEy; z%AV@m6F@`v@N$JKym(+5=kw+li*CM{g^Hfz=PHGQD{$U;smR#$3{i{vO*KDQh>42s z^}AaJ36=y^wTvpgViGrsbt!8*91~TgdUm49GRfz8HOdfRFshk5qR7&}`rV@vdmL19 zi$65`9MUuBY2cESMYi8x)mdrMiGI+n$kXz;O6QGiR+dMP3S7KOlB;L6va&%2^R4r*9cprM4(G*!Ds zKVLy$?M@faiGCnmyG~wyK+!8ae7s#@i_b@7=)@MEk4V!oe1z?8jf^X75k%+7l1^+9 zM3<&xq7Rq4VMM9?MeIQBOUm7bZy90Trs!J>k5Cn5e2ztg4h- zv*XovSAQ+%Q#mE8IjH0dIW?m=upSX0SMtCkYNYx;Ljh%QaHGKuE@E<(-KP}LiTy~2otDR-W=9G~6ITV4f*TiNqL$aY zx(OoT`i^}Bj|{xe*dD_L)3J69k8J3*H@-@(G)^v(mx}keon#TN3=))lt?lD2Y%!GD z4Q{<3VxhJZ+#DrE7EnGh=58w>X}xm2RQIfx2b_~|o6%a+hKSBHo5$;9nsi`Gcvdn*}p zJA>T>SA29eDFj0$?Dbi5H5L2a4C?l}MZGqcO4OHTQMD{SkeWf|RaR35;(~f&tDzG0 zRasO`l^%)^Skb>*dxN(kTJBe!)9OHGfBh@m7sr}HB?ih)QW=xOk+nA zxyPKqw)J~|R`KXWja%J$E@xq!tPj)?+KHLb!*lv zNXbi1RNk%Pb3OP+u-Eut35j5D_Q4DZv#4KS`fG^_?0sPp!9MJRsV7`&Bk(NQ7$a3I z1nbml`Yyw1c|-!9A?6L%XCjFw9o#UP5XQ#YwVB`d=28jzp;Y}5RLLSF-z`iN)LK=a zOo$z@%>-#gJeX>Bs95~#km60!nvwc7RXga7hrL&z(iHW zxvG>G%9Sp_?-Z7DMHk=?3!6oyB;7=G)pQ#AAA8eB-O@smn1j!_HJl(J+RZKqnT$wR z^^aih43h}a^@EVd<`D^bvJYt`u@$wOU{#9S#@PhnndL9S zidUqv41^X>X=WI3Dw>98^P=MyzX<={A_l^L$j_D$)xWS8u;Eumw`!)Ks^3)bP%#Tt zEOk48017sM={(RufPY-{QN^c<7^vV2nLIcI98HJdk%hz!Ap&ZQd88Ny!rvN%*9>yU zNojsGk^gA-H~co8kO=u5zfBvGd@`0`ym^D)$pxH`xz%2ZO32T;^}SC; z{KherInbl6zgmEY8h+=zOd%Xxt+ie%pFXDdWREJK6JI>xoR){L$QwGE-HDk0X!^^; zBqHA67qgMVH4VEZrJ@eg`NQm-#aT(3Oi*!Fk|JaA>J1E(@FaMjYmt$&sE0^`ZW zEQGK64JCzw6D+%hV`e<^W@Y?TAqQ267p=1xc+VzZL%-5+X(0zShXAq%R`9X>dzm7s5{%H0y@FZbAB#UJc)Um5%lEET>@KoGx1_yO158( zYr;>KrsKuFJZ#;;o?Jku-PK&X`!EFMVe78-lma@j2Xe7{@!D({yFIEq)!7AfV)y4@ zLmt5vVeH1J?oQ_x(1~5o!G=5{EAy~*M>?;7PV7c5b{V0RdDyxOJ+**N?7>{@lDz7} zHq^rB$;}T;gOBp3K}RI&6Z~n=60vOZW>$RSsu`;voLSG#BNDRThqRKYIdAb)tqoS- z4pKh|x+R}X*z^6xnvg~}@s@biS_?(0OZ8V_5&?hbFY$~N)}m=J)V;3$UxY~n`%MOn zQh4nu4TeUl+v(54B!WGd0izV&VoZafH|Y)~Ufo~=KwcDyU=L)#NWw!#X)ttq-Sfqr zdIP3N1QU1a1xeniH^~^E^bqxvj2=ZI*!>yHNW%9D(w1Q$)nn<8!z6x=E zTdmF36tfU|gWp{eY4aNo#CdZzG#tyulk)%?yv4yt&cKWFa6U+F;Tt--HC24K@i@M{_@=1C)%J*T z@>K1Aaqv51VK(YI({C3J!~Pd;dRrf}RY;eS;z)c);)|DICMx@uzvi+4$$#JyX;u~8 zM~WfwBZ=$6R+Yy@RpPpEkO>adY%wZNlG0^;N~;!Tqq_BhV)W5)Y0}`A*+WqRdX=AvEF%W_)?1r&BRwIb5yP#@p4d-Y8EjmYLe0;a;OFM3y(e z1B@omw*=~)dC_))i7Iakv>wS6ZA+C%y*3VS*0z{G<868b5l;&%bJ9FiB%T%y@yLMe z0A2TT@orX-hkC@jSs@-c8~qkjuZ>{sgHoyEt1OK{>)d;25q#9QG*dnqJa|CEIy>8% zt+-Pi!S_(qd~(Mk_^9)%IXVR%V(cDgTIuPg9E@EPcvF5W9-?(>qs6gObGql+((_Pp zK`)%)s$r`Q>F9$`FM^M1znGI@fd^OlSti4eF&RcA8Y;FiTF2Mxo1+!fFfTm7gsv*> z{=*TV73Zea1g4ivN zC3Uu&fTcg>5ed2?katQV`Zt^RBwp$1IWz)Z9LPK5uoKAUy;IxP8q!hT;(EHvfhH4G zJav^KBd#+Hj4L}_j!fs1349>X1ZmdTuspJnI+GKbP;EhyWCDk3OOsJsHiC)3UG;i- z7w=UngI}6UCG6ij@3b$AN9nwBu&8FHJ13t^+?rnwLK;Un)}tj=Vh!Ha=c?BgF%bM^ zehW;%6@q*!UcwLJD46y4#IW5Y6S@+%8)VF4)=l974>u+hvbbrSp%eO-ek)I`#;3w2 z&>ro^$I0RjoOomQ#9|g|cz7sp7De82cS^cD2Jzs8jtzZZxZpJd6?`~c@QOi3V`_Ll z?~e?q!ufq#G9eN+@&^sbXi2nAuVuGY%jQe03iIW;RD#~%w`?aXkE&>>rI?m|zF&%x zOx&%03lU@l>3J_+{=s^?tD83PvCKGvc*l0-OR3~h7 z(yV`8KqvHrIYzTtzsPS;Hbb_>-CD#z^pE=O#zT;gFX~LQ-Ly@M6QQg=k+94C76%zE ziB{vye7x@(k744l)ki+wT0lZPY=8kh{#JePfH`;(} zD2vw})%IPKLnGd<03PHJ4HUpL-!`7gp%HIy2oK*j{*$Z6?g)Z*`C&1A;=x%*Jo=KN z67x1!%RUu5K|2Xs3hpBDswQD~<&%l~Y}e~k(ujAmBda8tA@Ci!RKmVDU@nZpCu$oZ zg*s^F&0!Mp-tHFQ&X!TU-tXmIf0@pG;Z7{XC?&}R6$`Nx84EGH03oT}P)FS67mM{* zMGOQNA3V$;z)kMKqY=1ca#d^Mk#b7=41|A;8-y|pcv9Kc9A7|4ee6Sg1vW(`u=onB zPsKORY&?si;KLK}rr5QEviqkC@KD18Zng;Fz`1Sv8SEd@`XYT^C46;}Sv`*v#%v%O?}~f*fGX z?mrAlcJaKwD(#_sGJ(f}z?7B|ymdB%v{@9{Q9qVmv_073d;(ox*3NlZycqlAq=9;(XQi=MWFe>Jn zT1c+D!=Sz`mrB%|L#UKRT!23gn!(w$JiXkwV*ws&_-d*aQaG5o?E#J|EkjrBPiqm+ z&ICB9V^1oN9tNKM$kBk7qBV&3d3_CvgBo_^X&?vA0)rYq*M* zoLWMejuaDJ{`5crCv*Z|94KHzhd&|PHb}D*+}a`rq8}Z|Q-Xkd$zgaq?~Av#yu2v} z!i%@IG7Q)oxrJO(#nf%4&;l}{#aF#NXiTERVkjbTYM4<&Npk@nst|7}DitXlTr~3A zHyk74TY}S9*E}+hNXW+rAu-Dck7*otc6JcN!Q1m&8{K#aab3roT~ya{=fNnh0%tqu$~uvpz-QdZZS9hLNX*V3AucyN3aacES!Gch9gbd3Z#_~#UlUaLviwNzFR8)?!jVA{@sgL#^v9ASXRlu`=fVxe{aG` zzoc)*MIQP07EG1vjeRR&U%7-`sh3cO7t~9r;B_r8p$B12UP3Rvt>h*2VRZKr`f;Pu zOW1_loL<6a+$8l9w%~5AOu(Hu-!RDRId~;*zk|;VNj+?a_!f@gkUJUyZN334^U<;GC;lMje0s?2) z@ZeIlpX!Ve@6g;j%41+G@N8sQl04AZ+8o7kicl~*)*Kyf!p-+u)of|ZnmFD%I$nb* z;%hOZ6ZF?Wd~mEbHa^-d<8^Jjyb{EL>NZTB_{JF8e<|rEXXsv-mEjs`hvTpVAsWn5; z+q*X2T()K7QEE87u!Dx9Afofw=*+d~wabs_%umiAoEw>hT_1*G-SgMesI61;nuzO_ z8w~sE=Kgub%Wv#z-lGjKZBbZwwj#iOieW#N?6tj9le13XsUd-*jmkBnQ&$pr3ZJ;} z?1Ox5X8$GAmm;dhmUA4du>bGq{5X0mO)_)wep|f<)acd!Na>}z6ZQlmihjeG+ zO|JfEy4va2Yxo+btyY^{t-(ua`-e?ts4uS1Sbny3gM_PRwsSCz_f6Zi7!SzG_H#}R)4Ph2wI?G<4SO; zXH$C-*qTkv>60ag&z!SLG)v zQXB|x$5ITJkK7`{SD;r3|KdjL6abEzN;npEYYbl;)_u!ksXR&u^mEg0!up^%8b-LE1nSi^E6zrJZ1chHyn}hy1p0G}f?y z5vPaDNFrDp>cz~SBh`nlnM3NwF?kMY6Wnb%q|NfBF5iqTINJ?oTa6sQ3Dasr}Sm^&{1xn9DuU&-01BxMPwl*@q9`dTl-_Oq45^4=3bOv5df)J1C1U)KT{2 zTqis5l_O+LjhFMRt6?;u#}HeV^{QC(go>{Y!s>PTfQ zkaI{Cth#eZJ#r~;3dmu?Z;+OwV^K{?A}W`;hY(5aW~Vv26)t_Ru^8eY+5)N13Zf2- zb%*4|JZBAn^SJP$Pg3B3St2>#6*$~kPI=A zEMtX{AtsXarDTYSWC_Re-l)KQ^5fI|_A#Q2y;3D@q&hlY9ahw~o0*e*vS*&;W_MGf zkVB-0H#s4RUc1CbI&VVs#7q`yh@Qx^TtoCko<$p?C-N-a5IvD+0f*>`Jj*ylPvlw5 zUiUQl7bR_d)21w0JYHdY3l1Z%%iDGtSKbV>tI1GYpVW?e{WhV(@))ika|`=YzfEW& z{EMXhIwT01Y7*~riyvk~2@Z^RcH&DO)_h|L=p4taEeZ1I$m##TzSRh-h)#Z#+~~^)1DkToTu5t_V<+r3VWn8N$t8|?aPQ=$3gGj8 zF+wp(@JLu(!Rp*G%oKe(ig_?(mva~C{BS7N?jn(WmkqzXe0R}S*r+qPj{P|?{fB-N zgXxBfRjajLIFmM*5?-yUc;9XW3R$lhB$KMB1ckl!k+?)^0J-UZ3zB$S2*TJ;(f&|S zvv9lZKRCHJ+T;qiJH2me=HNWSO1!4LeR6t!aAwx(T|q`r4J#?u}OXk zQ4fQf2}c+8F5FQz|In)_G(9fGTV&{1ina+MYj$E2ph?EX!^}dm5|`u6@UMn6lGcwM zX+CNNkFbR#d*VvG374YsXnn{>K5CDAkutHhJH+BG;gM^*%JNBNd2z@mRp5Nfk?O$> zU2CN%HKh)(7}_a7oj90D>13ekHoZY5vuT(~>R84?MTl9 zL5*}wqSTGQ|Ar-xCLX7VDd+sJP^#KRxlZ?Q#?lWVo+#*6KH9i`Z{N7e_7hI#jFL2yZ*5$w&R^7s{uEoCNUjbIn09tO4|Yz)(Z#xN zZCs&z_}8UUhVY>p6hC>Ee{17PRoZxu3x&y~)!*8s=XPSE z6f{GRypxiJ?}7ZYi{yI|=~|$_7xLn|Ojbc3u3#3(_d$M7k^X*M_bQM_E#sp$1^M5E z1DgW*O_0CD#kTRzS|#~%B3dgOV!Jjrgb)CGi#Eiw11ujbhC#a?LUXg9$P2-kUiIAt zk%n=MU{BK7t5k^BNQa*^&8E|19ibQM$!UY-=aA5@$p@efQGQ?mv; z$`bS-(G93Ex!MpwQ$xo40|Yg4ywkaYsD|dEKG?Bg^#@$7r--x!!L)YyBgjJ?WDFNf ztiMvwjG3E3 z{c)w-+dDFJjr=l}MJxBj<+Kys3oJ!`g;0F-5sD}B;3@$nN;y9FDr{-uxGPU zd}%lmxTilZ_3Fay52)_hf-k9+m1Ua(Lt&m6oYWV+H+>-{nm@YUm@rHr*%L6m&=85>O93#}Lnv z+qL27I=^>nBD{%l8EY4B^mC+MxT&nGk&qZ<5Ng(J4YlcW9;srxVyBM`o$sMw`pO3w zuGJBZV0Xj)o2R4d1dg0Y9=IDz~b?;@Z(*FX1k}eMBvfsf@^wd|iBz ztc`&>pM&#z8N2XejtZXj^ebPM8@_obFXd%SMLWjoF<&0bF$5XqTfl(%61)<{9OYfei0dXaSPy~5up~_9K zb?$I07sGF6YJ8U2u4yC%NBLn2gOYr&Kh*$@GZ!Y(0NN0;l|v!g#cq%?7N~KNLSpS? zNT_=1c}FIrAn*i5+-@`yTx*eXMbGC?b_bUglCD*`4|r_3sCJ|x%o!4;u!Y2+RwALH8neZV9zYvx{nF^bF5>A7_>U! zrzdII{}uHjJ}Kb&WtKW@&Jiva<$=w%7MVm3)gs3mK$^)IPfee7JF1*^Oh?BwqCwC#+F~(S!TogST!M>Z{Eh z+^;<2^iCn!#%ttL z{SX`NQt4Cq#dW8W7rB!nmgOT4Cbw3SQJr@AnkMp%^&qjLbc(klq$G*uJXjJdMX)_s z+&XUosvg&5byOsS*7Z93Xf_F^>oqd~#Zyu#8YB7gdX37iq(eu{m8GR!rwwMD)qxo9}Tw`e!!q8ToOc61)vsI={G^3W14gSIRW zEy*eQaY&X|9>zAsb%QHsQi&^+zhhh;U;tajo`X@3)3Qf+7(wUn_t3#C`ECkv(bU?&zz@5QI?L+O18xecZF zBj7KTz6mb3Q2J)98$#(@2}vVRH6fSwG#6hkZsDWH98Aakc55gI$O7$sj%MIAnY8!2P#qv%gA=dM6!D2+OBiB%t6g=IEco7xt)Ai^DK2CGx^WYP5{rRm!r?E!eO3SKsuHGu}GC( z$!Zj(mG`vumTCozVNHh)AH?tY-s*%|JT zSvC%d+PJZMaYoE-wX{KaG+u{*{dI=bt5{`^WxhSb>=}=Y>LS(9|KU2S*%{HRhrQ9Y z?i@!s`t;L%YQ`8DAMQ3=!#ks6+@?CsQ?1wGy0d%kG?^2{E$&zV2W{4xSKo##c_ zrCwedZj5g24#5W;-B?7&eWOD8E&aH+?OZ<@{4(y1KdX?Tzl0-+B7`j!IA97GD!AS* z9(@tTVDeb$>z5zi3@~iojCh{{6+O6xe@P)jUjS5wc2+v@J^Uk`=%R8&__jz)t z!Mwb)@|L)9M%&Wqj{WykZt!I$$%IfajvsEm{+=QmJBYA3Wu4?9#SzllPtF*AdfDyRd z7Z}3=H!Lt_1a@PL)C-amb^hr|o1C4!dSGUDcIL_ftWVa%;h|^6Rl`&JFP+~5hqg@_ zotc}TIRK}Kn^RRrFwxDxnZm4^+iXhZYr?)x{aU+T>8qL{M@m{g#uCOw3Z;e6b{fUS~{G1b);zA!zi@^fgoJ>kQh7cO(mtD>xO{ z^;d3HfNn^V*9m{-$g14O5cAIW)y#`O$GaKdBPY-Qe8zbL3_33E5CIod?OKA8-F9`f zqmX$=4sQv)#cjlWdJCVi!t()gT#*de;#m^Y+l>o&=Gz&=y+dB{*E7sff`mX=tp2PE zPf*l(Wp@Y8)pDur9hlPcsAb5Chj3HKWyp#n?-aEH*(c>9S0I~jRS#s(%$4ndY`#^! zkbPpVY%gT6%6VW zwuB|D^_-@OWrQE*5-aje_OxUV&VNIaJTQmF;h>u~!Q!k#!O_P;&@g=4&$^vxfJGbdyzmr@a9%YTK6sM8#&x!xsvbOPZGC!nYL{9Ytl>m> zA_ImWJZaUosjJ~8QC|<$)7J(TX0_3=Gnja@-H=oZ;kH41B-0~dXYfM5697<2aq<6G znFgt;csRtCj)AK;+xlTKOo%nQXn$P5Qg0}hUxeTRgjY_ivyt#{fW)<)dKFQ4+4Kt1 z&kLlNk^a;`dI{<02hw}+QGiW>^a|292hz((7Y_njJ4;A^a)7@F5fo1fq*suBRv^8M z^s@u$C8U>}S3J?nySGPSk)>z#BTR!t$-(dK4RZ7*;g+%~&mc(`X^^B#HAvD08zkwn z4U%;621&YvgCt$ZL6R=#AW0W>kfcjHNYVxF%?7p%)ir7HSedB}RlpTR6z`EqVp$QN z=LSAWEGgpi{WY4=sq5Jq>gt(ysoPj|VQZVuuD_)!fWIe)$UHN8vUEWZF zi@Bw$47Tpsi$e0&LrY%IL%TY}Za0Z!PdRDNbpo#J3;nbT1b*6A2EEK)wV}-D(fz<; zb$I#eV1usqWcyHguMa`k?X4+>WDBUIE}5F0o!X5DkOGav-YzzRW|t`Cwz|1NZ;R2s zJ44tQzs(VJ(g4Gu5J4c0k0hZikB=mwB9D(Gp+_DcNkXqYK9Yn!%yxE)b>Q9A59UzH@|Ay2rh+wP7_A3~T472rp1BEA`s87^r>9>Y zta+48cvL5hwpqUS@5yYz-S(gi9FF3922uu3yXNE+Z@lK@6py{;C4M0 z-hs`@DISCsUpDa2Hs|Ja3!dc-mI2<1&B-YqjeVb+7o;A}CgO|hlEfJ4bG-$!rna}M z4u_9-S}QP}2uZv!WS1dEq*3Kk+@9p?)a~si7Vyt-D|8Dph9HBgdZhL&7gDT+)HzE{ zuTT@$$`f34N0zBNyuG@!gXs8oxz&1>3wz!QK9VBNM6x`L3qIFv#0-OP%IDlZ%cEN> zhTVR}W58=|G(dcu%_CFyw_O$5lF}uCS>LXUwHT(lxYmhQx^yc7lDxO1`L|<38LL&t zpIvqZNLs*d7b&wD=#ODQC3wKM6PAB?qptV%%?e=zDG?Ob9jY`VUcEmu~ zZLKw51)+4tM+l5dde%palHhBax1#Ntb&G~livZrr)vjpqf@o-xwI`iM*e(P94OVL0 z4VqNDde>h4>d4hxj+oa>v2UB1Rld=?QBqpq7%k9Iw8re@+!TUA(rA084``A&QdKw? zxy8=*nc3X~2QR_IiV!oKaqAsV>1)l-Tnd*gg>Z?(9#9)lJYk_i2i6S<)aM0I?b=1> z!k{WC`4~ys)`6?%r;M$422jJcQV1cf_8$5GUqi*bZjTz0lEm8&le=NcyxAw8mX!(B z?rEk*Hfo&hv(xia0_CH@1(iKw&_c~xLx}uORnPm_yj>YurIbMyfWm?|?qB=NtZBi|3J$!Nz?ZYm0lsH`TVhh4h|~fIXAa zW~7$VuXUrHUNWjLD-U7)XO9&5jz6BN=j-}-SqUS^pTho`y3F-7#c6%o&%50|7Y#J1GFfT{_&ZbNJiq32V~`f?;X1f zh@KiJSZ-NCFL9`=aw7TydU{@1Ku`=QqNpGUA_foxsF*-NK+K4O$|7Pw%$OD9 z?^D$?Ju}ZUyD#ti`~ETY^wZU8x~r?Js%yHBTi&S&&NReE*}!oa7(Q%4m2#Mr0+cSO z3=>GH^`78L;IfvE8Hk(W(lMp*C{4$d!H+Z@Qw|@kbj%{Q%OAkx$MRP%`LTS=XMQZ7@R=XWhkNG7 z^0}V*v3#Uwek`Bnsk=$P8|3igvZDD6&y3VXuv%qA7emI#i0%Vhbw+ew@L;|4>z05+ zz~xmZj|P%GVawy>iRda^p{Q43DMn0y6(isShtpT|DjcIiFSyd-m7{Q!jJCn%CBXjH z-LXUwqbo+Bgt5T3i6yFBtQ7v=S%nX(tQuHRR)+h((h`m?0nTw+P^qX?H^1^%MC!xE z3+qR+IkeuKeUgVV<`&x@hi+k|T)eDbN>Ig#YyND<{&bh#uB+p;khqN78Z8mHSHva&FJd#)mHo@P~>>Hyv!7(8M8 zl#@?qYx8Td6%|&W%S+7kY2A5ua+I5^rqTQ9CZG~Igg9n~BA+V$c3L-?o%2M5-A z#|TciiA$f-<9;-MR9R1%NB4)KUk|RNcLTWoxTdF`d;@#qHjw&o{c%@fJ-E`|kgw{) z^@m7U4{lI@*!=a06a4Oj%SXU)JggK#5?tdV&%DcH^KeF@$cTJw{J|loDj7AZys8?d zjHnzlth{Wn_VfG4t|LM@xodX1sK8&u{tuk6ly|AZt3ygg4lHB$ir)W266`kgZ8!-| z34+(1_QlAms1Wqpui+#|BgrotPEv?j{p!)J$oSaCo|^&|_TtJxW&N=e5i6$L zFSx80F4WN9GksC9JT!;3gmxyEhvDFX%ENSL=ce%0mqPR_X9i@vjhC09v#cA?{y zM-S1m5Vt$w1u(Ck^xD6G(~FV67Yi@afLKyX+}S1Rv_1c9yr^p2VbW2_udF&lk5{Kt041@^aoqgI0#&~XC~_z zzC&kDmM15L0^fLOkm^-iaS7Yz10u$A9^#U8QWsDM!^zJVlb-m07tK z4>_$8;HK1IkEx13x6K-+oY7#3k2ByF#b1NuRmH7TVK_aP?~E(u?Vd|w4LFoFM^zrx zAIFOg!2t}J3?;JcPVdra(D+G{r?BS17ecBjKfQ}LavZh=&WHPLBIUqw=bXX~f|)FG zgP-2TuRfuwX3C`V;oBaGoYT8BtvUgVMz|-_9~w(kZnNqWM#Px6L4KjRH+1=p1=7Ub z(GhM?Mb)Tkm{s|zaEPA?!-9HSjUNX5?({qjJ0wbi`9rM)HNl*v&16CY7)-sdl3WQEzXUm+L_l;ugJnP(>Kw zdQio1Sgi-uCw)OhvKf7G{CGXN`r&@idQeBfuvZVNf7&@eS=Z6HPcjy3!fsT(0kJ!% z7gvb!sV`plO?iE|zWA;@fzyL3O@&sQM=Of_acNSKv8VxTAsmXb zh$YI7Kh zcj*+qZH3RgQETpD(G+1kU!V$I=QI{1R{oG)RGD1i9r+~4NVcdZ z%*2Tq3oMq6SZ<6fS!e9xb+^h|)E)B)wNY65lz-Lolh8_NoqRfE?pU0O1}Bo2 z_#}t?!H>%{4K%i@6#GSkkLK`x8l;ptnJ{acYd0iUOj}cE~!pl_e1ne`O$^2GiOBOk^;G`Np%N*uM-xJr88AD zrrX$lefaVS?FYaqIT{~!4Z%@ZdGW9<4l%0p<8j`>5cv{2T`5oKC2^%;Q)E^rK9H13 zWnRNkbWjPjFD>Nepa#MtL<`utxM3wDhGL6I4_jDU$T40@H(K!woRXFJ@QVu!<9mZN zatjLC%(hsNmJH(00$HFKZ>sn5Q98-n+;&RI?LNu2*Ce9R=r!Xk5eT+(!$7sV#mnYP#%1fAxxIB$PdClTXVR<1I zQlMsNoQbJkm3CE}C5b>`RdJTEFqI33Or>5`=87sTVY1@FGzO(LjWdO%h1jG~g)^x+ z27lUcYvTKu8dB(JcOr2~bXagy0uJKVW&)KJu6?@PYh!~+0vVN>I3`7x%DHhAk6uMN z8@Ak-uCV&$MMLMuDN%XRFgD|68NIefh45hn@UBXY5*Myc^xv3`D8yXM%u$3%n29LH z?8`*-!L-Xn^u>JBD{|D@P~+&0FPrPb6((=fj`FFK_*drFqz>SJJ|CgZVK|tLD8#8X zSv^^VliIT4i*Z0ndO(J#;TxA9&BJ$kPANz&T2Z6?hA~op zRu)x-7NX-Sl+CJf9t%TNj4H)BF{$Z?tp+|Pru>9zgs?B1BAgI8vXXI$o6q_6LtL3c z9+O$>7~HIhoV_!VqXr4GC_UrDVp)RYtY4=)EW)CLKg-1MtWS77OGC>?mGe6$4=_u{ zW3#>rU*>7!CgaLR4J$7nIcDhb+&7}#_HG~n9~%#|di^Evbipo#UO@Azz>18scl% zip${W@Py#i>BQ0Dz_k!-l?c#?6A!5vJOpQZwG88Yj>C=HSnf0{;V5?6kRybTjwf~4 zvN0t?%a0$46K>L^U0qr}x*DrQN!4&{*rw-%!eRJvoF&LfD+JsF7z)lfyrOIbn#La6 z+HjpfBkz#PCR*dHti1_!3L^JHH2x$}Yrp8Yzy4I3$K5t9vW#VuiqPm*VUhjpSk=0ZSK; z#VvQE;Xhp;vS>6$G#gnw_UO@a^+BQ^b+N@``_*48F69~x{U^Iv+$%L2CvVn=M6q+~ zMHX|hdU(Q4&~3sQ(2xLf2VhuPB`(eFi;rKjF-5qxJk=P8f;`(;AR9IsmcbNv2$4#t zs=~(kn7BRM?;5YVAK#4YwL%RGRHl(-Bj7QJ%Z%$m6=L^T&l&xaVMffE)PlvTjw&xl zVu=ui;4u2lb!n0btg&Y}zdNUh2FB7sRpmJ9TfPGY5p)leb;wF4XQxk3?)8WoqQ^y* zh6D0+H;2t&p&Ms7<3?P~$%)E5F{_;IyfYfOoQzr`nfe@b40TmMV=K3W`>5(>5%;bkg~gr{IEa zbz922@n%s}d1VPcc4DDPrFf5=ozL@SoO-yl$-}Adk4?6O07uNf3+SW7@*T0C*%$f0buG|2r zTS-jnjait+L8$e0*8ibEUVIK5a*K}$JGLvgt_%|_yM^c1+rmRAfLp}wg37?wMA*ex z=7Y&EYr%k2+@I4Ff^=%;hZOQ%ra@1e8~HV$>$6R7UYt_Cx#bnd0(Vu-Xd!WYJCeHU zx;V`?m>*6UH|fl<)+%s3H4WQw4VW=ef^e4o5LY&$=I%raBFMlGA6#gL0!$=|VvE!7M8bmF2a ze#68+G-z>*C^gUBR70d@zja<>s6RD^7^GCT63MqF`w}+4y_r z3#94{lb$|q(rJ;w_TKc$fnMP?BW%#Hm_}8MaNvj2gn=w#T@CYWjQL*3uT$I|sjF%x z*Gvg-#C|O=b*jgOttQjA$s;?k_GE(fc?G6=0M)C>!z@QG!Gc_>KfDje1x4m2x+vB< zLc8{u;jn8Tk!{zGtjw1M&E@7W{;p>7__HSBn}=vi^s+!5>USkZSechE3sRq=EQb&k zdjE|?T?26>gx-OCHI`NwS6V%6Y<2mlVQj#{_5~m1*CQeKWu$;e9ZPQ^emH**0+BFr z=1^2PP*8;~#spHrbejZ%PpGXJaeO%rL(~FN0)70*vdS?d@Lf_~eHGXSsTf_9w3|lx z6sk}1RL(T2KWsl*#!RE|746=fhI0SlD_JPyW1-W-PNT0hlB@}Ib>(23ri)W>Io;m) z!-3p%K!=GQ$r*~g!mte<%ZA+5i4>}y7O{;xx1O*)+?osOZ;ccqul5L5B{f9Nq$qK1 zfty{@g2ru7@qJ)a%}U>2?r&4&G*6U+u1$W{1be(L3$rMe>k%tkX+lm{rw2+9$B&d7 zcaSMXQGyHUsS+0&CAE*J%#fZArj-J2ha8k#4vj{u3t{uv7=xJs17NKCs)mP{GM+K% zb5-N4*bB_`5sq92?h5?qOtxZhU^SQT3cT>byGyli0TN;b6N&s+Xk+MGz!g=N>Y4py z!lB z3voI?YM4}X5k9}ph%S~d3=%wBrRMSba~^@9HCzR}a8e~zgv~iAE4mQ(tYoAvN^OfV zF-alCI3`UKpQakAl${$@I~$=73PF8EFjD8n72;#B+_>Jbk|g7LOWt%kjw{Sa*Bd67 zWZq)QJ0UNw5C^~Hrt6*4z9Pw+PRDVD8R>fCJ@gu@JA!H9y?9ud7KY)=iebubT@!a* zjA85bH8CPAibrzvFq|r)Ev_M=6ran@iI>+fHnq3@WGuQU^zh?PNbjpZ$-=byZXXRf z50sQ`jL_b}+}ub~MQ3EEj`e{sb;7&l)i_ULRr~_nTd6^ZaSfHFi5v~IF;zmW5K9T- zA;Y^Ak#QwnCcjPBR*|f2TLV3kEFo2!T7ofua(h!7GZGqdtoBBIsZDKb@(PHRB_xJ! zBYm$8T_@+Ik98rW7v(CQY+C?`Ka(;s8p>*El7j&tHgh{bVgvNr&hf=JrDL(rv zHdU$Diwh2w&2In4f@6&@>W93dtMiIZ(V%pm++hcor91P|>X(VT4W#L zx93)rR)xJaJT@&sV1yYU^t^gE{&=!-*!YPxIG0TOILox)$gqsx9ZHL`1~S#A*y6JD zP|DNab`GmK7siWM)6K&vawt!sI$b}dMNk<6V9SFcpb!E>|IRqk#AtlXITI)1mYY+K zh4*8m?XT(XoLDn%65Nqmh8n_}?(T5haC15i>`f%X*OE0jO)Sza)^zvB)YP0&Htu{J z%$>+N1eS}*IOQRcZut0#=kQ0Qd{&*(L68~8NuD+Fl*u?hEBdy1O?UpbIf{P^-K+GF zmi!vkVyI zO0qi1yEnaY6ouAN^U-_*bOUI<1G)h;-vX`8B3$@Ld^@H|PI8nDDBisu zm{}EXT@TH#O7B~5%C9Qgw0=?+4^nlF9`QuEiQdVoHtry;geEepK1$W8-jOE=3`EHr3prbe zEb5JW^!}6{!w|(ct(@c4fob8{7$doTeHuzI z3=Ta%&moNJ(a`4k`vT3uxnT4XyfQ{4ul0zcg_7&?lb4m8nEa?9O0KTNPMpjhA=EwE zdt>1}La58PUrYB4H>h6`F4sORhvvEcJf?VuPt%R!Xt-G7Adtiti^Axt$_H2Cf?xiq zUXC(Np535WArsNq6U$4g@U5q&hLEiYZa56QL*PKF`9Knh~gtxM0vGqJZcGVSjU;5+Q%Zs;{_so;*Qi9&uQAGMs?d0QsLLE4fKGl`VAw=gmf?Fux-TD*5odKTpYNE82z6VcH;(FL9 zxm4zV$`Z=iVU|HzwWOK_&Ltvyn4xRD<2+GzDvk5w7;qO}XZi5mbUQ<}H!Nc)&unR@ zJ5jz2eH!bT%Fs++433n%%EI`Y(Fa=J)JcWgJcyM{mC>FN=zSJ4&N_$vp43U=wJ{wf zKkrVFyGDdfogU}G)?>K;n>d<(;;GvE;Zm$UssV>_0~Fs3i{YzB^N)K>*DQy>#`<$( zFdb#|Y^u~od?Em~@t0^&18U=z9%_@g8eOb(r7b<|Q6q=oe4JE7C5|tT_MEr$$k}tA zhdQFne(9(Yqs}^Y3Jz0=v`*A9YD~#Ud{L;6KIFFP9jVjf)tlqxD6UaBrA(BgbL&SI zCLI%Va~9#N3B5Eiviby;z^hLf#H%s1u7?^z7lMg2kh=)`8x5d~v9GAbDWN-qNJF`%}y6yj5GIAEz@ZAR-ZM1EleIb zk}8_>7A4R9W~^+}4lfy1jZ;oq#hQRdjT%-my4^Hl=f!p{`J5bj*zJgHOD&()R~T(*jeX9BgkVd>;~s;-ci$O$h{UXy2Re zfUrrd@T^StIL|!XsvCU?)h|8P5jOID-ye&kTp!QSC};OrD%Pkd+xA$ZV;oj2%qipC z{8${Va$dS~)cmU$gsojIBun`+FUyCItUeL045@w#r!4%{r=qQx-2Sk5}gPu~X~_gU%t8VU1P zqWpfwH<{^=g1DP12mPqpPnq$Bxa&SEeG#q$%8D<}ec!PBKDqB3#`n#A-!Q&k?)!%E zN8x?-us|K*SC+l)-^DZ?M)SHjGb6SV_vvbK3e$%A(Vcn8F%RJ{o?D|VkbUwJV|wLW zp%7AERgxm3=2hb}hoZceC_2DN9Jx(Y9gy?E0GFTI!`mL)vVl7fTvr>eIc-_Zx#Le( zHxMn%OBwHd#owLt=ByHX8gYKvB|C^0k9NtDDN{8icH~aat4Z6}(PM`qolDhPIvKnLYV0rqznXhM@j5U)l#f?}EG_kVo;^pVYvt2MyM|7%=w}NXmo;5lwEpg zW$ANmxUBFMa*OJdSCsZq=Uf<+yhh-R2fY=8G(0|f%P-86TN$?YbF*Z1nik%Q5F8JV#@=k0VC7XK@Ll1KOf-sA=;z`E zn{!K5+BfOESi*>r;TPPAdojS+;+k=MiC!NPQS(;Ty2_W_n%wf z59zOS$_umgPO5duJcao1BD10qmCzqvi+QJHicZZP%LnT&st?Jh@-ED2V#)E75Ue`N`JMOX6r~Wj zUw%`(2qtpCM@+8+I-2(ycjdew%2660)Vh1?!$~!I_cAI^X9)bbj zh2UI~i5Xdng9C{^SU+NIZF3RD@9!hHr9o6C=!+%Br$q*sCj!-#J1> zgaoq8%NEi@@|1!on|M_onO~efRN0P4D$0Z2M^|VXPeiNjF!s1pS}9JaRh@w>j4K5> z=Cw}sFDuJ>lZZR;Je&@vcY~xy!}Yu{KV7zt(JB-M8mke8`eE#;XGPaywj@m~>BI9Y z%T`G8&c)Okj;dX+^SutKM7?1lxl@b(3x`yIUaO^m9ErfsFG33&l0K^<586m>Uc8eokUX>syCG)kEObI`>i}Um9v16ix zP;VTMC0S)}E!o5Pu-UU?eiX_y*b9eDvpZX+iOk}U_Ee_#6SYM1XwOKZ8K=dRM|;K+ z&0WdZsPEt!7|SVKv6fTX#qHu_fs|Dh4C=kCco^~CN$_Evz7ng$nk)n}!PDY7EHxw- z%jNMLPU3j6v~tSRizUBGXq8LmDTJj{Gm9ib7R%cb>mfHg;&HNAo>m`{7t2$#2PoR- z*w(W-kG|Gy;h7gXp>6BgOi%8E`#8u zWX(46eu}axMhvQy{jSalxlCS>w=iP!=Z6W2QKPF)2v>-fIejPlAK~%Rn-gnQGG}?x z0Y_RSxn#K>mX)WP4;4=wCZEhB2G@sj$U&7?%2f194vN?Ruzg?V5Co&}V&$-)r71-r z(1w3yAf#~@#7mSkPUXP&m9a3vJ;2f2sHHi5ig*?Zbi2~@7-GYw)q|7PW#YmH#&Sd0 zl28meBEN$eqnfFk&#Nfs6XRv#c%mpiB!}Z-a)>a|i~%dr&5Lk)iGL>U*a*jC$R`x( zp-3W1aY9(q${BS!ysGjlLHDV$*42wE#jRB->4{%8B|X(97&(yVL8pu*15O=E2H)hT z`=2BO&MmrreP<=as|zPhNCt`91i1saQF=*BZ0u`8pY#$IaybEdL4HfKGRHCmS1yaV zWZ#ybU9W8D@z_k-fK(!HuB8&*6b?OfqPNK?F_ua=cS5z(% z6=k@&B-4xy*Z($EC8%ZM(<1)&+y zeQ-}3hCFUNBm1V%ASE635LqmycD z0)f;1?!#!RMTBoCR2krvpv6no3*7l==BRRZYv=2B8^ZIgyD5C%(K-2FX%Jr|Q!HHY zxPH8T;n4m=?;^caBWC$ISVLUTy>3wkzcIF*a1DGodv#UCaD0$aQixp$Ei^{R zN?c7gxDXn+mNX;G(DD-nRhVC*9H5AcX9^*I>5oIAd{K2p*w@Iet_a^@)Kgti@_65< z#HhL=T(gi{A~VFnxcBbiG{3`phnT2irsriX3bQ_xmo>yhS*N8*tnX-WveF^vDNbGp z(_9V{3DJs;7UHt96osa<7eQESD0>l3M@eNb&Z+%_basu7YG2q;_9AQvrE1T~US!-5 z3;H}9eMj>e0C6ET8zq)m5~iuP6X@h>Lh(7?T9eSYqNMYnjzv*LnAr6dRfNNrQ$-c4 zRwa%W=b|K5TJ=V{C_zN6`X-~OB8Y3L7mSKx29;`6qNpPH)TO9Xc=Sjt2)&aZ&v45W zrbyhf6z^^kNB8B$;QXwjjv70%AKa%i))t;2L-;1Bqx14%5s@a;X019!#wl4DqzUI` zVWbIsa;R!{>#*6VL^q*-y6adq;^n#!ru9^xvSOqVuR!)v<%t>twMfPHNXJ7dQt=7D zUa7xyh>Gu;W=4DvYs5MV;Uk)=J!)1_^6V-uEov4o?pe($!X<90_^??;I14=|UYb>e z>oZe4GTE#mYz3y8#kv;GK7nSI*sJAcMF?g$soqzJ=soeZY+iXdg9PQhmyIX{|H&(_ zNcS7e!>RJBpq=qjR0usM^|lyc72h*m97pQX3PGQl#qos8Dy|3~ld0CFiYvlL+WK@y z?xbO7jXMRLpD!04K5pVUa2+WD)hpu{e|9F?3tv#Y5w)qUre-*VkDa8{p?@dFj%HjQ zYy=gs(nz_;E|(VnoqcE2E>&m{f}5TA65`hINSo-2vxSwdp+i^>G}kG(R9q*SoIEup zp|m`fej~I%BUw+GjLT1TeJlhki^G{%PgQ*_!}_!>U^!bzq(!rIivr zVsu3*&PfKuXF#|`YVWRJgiPS@oJ5dNKt$DS_ZnGMQOWlWV=Ek^(1Wl`;~?`yXrtQH zmpD?kDD0GE303f2^sY`8L2afYpV8MOH=nIW`d zagG!7a_DnMk~uK+Ve>dsk3-8O<}P_B&eSe1llJ~h)+DC1L|tR@vgyH3X5$7%$M>F- zmnCaFGK)zJ3QoVxPJ)x1YtEGOJmvhS@FTnG@h6`#dBizqLJHN>Eo|T@$-xQ6hL+t& zV@sj_rY(1*VA&XV{@97gtiF0%BHRj8W;8Fssok*8j(~5+@q=-^gJ$XDCQq)JG-d4B z(cGVGT*!T)yo*mAKcNPuV9hZm@cAsiLS{8tTZNfxCQUkh+(aDA&1c4F`GTkLSlMzL zR#`d}CvCnG&#)LbvZACEC(moiBgPD2%)BfN%&%2AI$pElI1g`6P0K;RjE_qaa7E?n z41`plxNk;^;v7hi7r|!~ zT0D>9Q~PIE#=1+0hent@_2W-5W6avRk|tv!%ihz9%(Qx^O47zVReSlnO<4%_dFg+M z3rK8^qzk~?hBMO0Os)4rq`Fa9ez0bapK?AsX`c^aK+T-iQNtxcxqO1WGarldJ2daM`2N}{3p36!EE#kf1GS0ha~U!mHO2D8IPW8txZ6LH5vxJ|@~ z+u&H7&l}~wG?DuY7F?vv*}XKyOxHiP zyU5xRfsWrHrV|34b|cUkfzHn&&;@}m$JUx%@!NGiBDx_!b-y*J+b#GP;C+LxwPtt3 zcK=ze*#mFUV;>NQBXD?^TC*p9d;S8icsR1XjSev@Yt5WR2V#p-xgF9ti^9jDh?jT?_ty@co4s>sBf?azpbfXa36l#&{4r^ z{I;e3!9DnGM@I*D;kP~gI#`L{pU`iD75MEy#{{?IwM{C1_1;70s*qk+Lf{03ASEWmGfDhsa1Zx1RD_&pA%LBTcn?MZ`!xphO00vZxn z2W*hXGzZ`s2DdSIn8A|_b~E^#!Fm^98$eGCM9%RiNGzp53_rL6> z7)96krQN*N{7YST<5za;!2S*JC3t>^XC$5z@caeODmv~FWa@3V2_C?2q1{e~vdC^P zLs@M9M251D-2p?{+~{j}L=!-n{2Z)1%;;x#4(z|7pfm8SrsKAtHAmU#KKtvKL8##|uI&YY9vFijgKN#D z7@Xhqz#x2rPC3T@O)#VGcgAn+V}mB>!zL5Z8%N;jh36*jnwuHi!r)E@cQLpJpm{l- zAz*Az;7^Mu89W8>R9&U<+m`FVL|SeJIPA}0aG>f|-SK>bh*ndPsMR!p)|caN>p2YO z0kpZF!5RjSFj&iABf!h(g5OH04YSTRTNymX;5mS{C*t`No=f=8wG6IfumGT)uuo>x z?G`gw!eA*t+qx>_x9yhkU*>}yR-ri^?qjfq!6OXTGI*N7b_Opoc#Xkc25&HU8=&L+ zD4^p<0KMvdZ~V67L4-Q-n|Ip6;7JDD&Q9AHFk|oZ0)rPB>;mY_FWPwn1Ag1i{Cb_A z0O)d5t$6_tO;_%yuCp0j1<BX#*H!1=0H5dYt4e6;OT^? zxYnFq*UR{AK?VL`78aa@=T@XH;8mr7SBrwT7<>V+q;9xztUVw&><<{hKjJ|Lx4sOB z#2`Jue;;HJ4;K%6n@1Tu#$Xcze)-klipRFaoNvo-(e?^}_L#`+v9xr!pLE~jq!L8ygCN2GT6`HT?SlZEl6X4$DQE)$biY!V-di+oWZpWu4nKigNvAre4xP+ zOlnWSQV!kBfG6QdDO4uEfccn?-pxEQnU1Ze89c*)hr!}TTHHvBTV=h+-~$HVGT@co z`W~Q=3$=dWzuZ!*77envxfahZ>p})RgRP|ucp6(gjV-2bi>cdM$KX*0>ltv@A1Q@y z7DuX=?c#c>b(IwVn3^oDul0rB0-_Ow{3dq_x zlew0F>p3JqmdZQ$uYgB6B;Z*N3E<^(nH0)AGQl3@ukgq$Mky>)xTOGDe`A)(q3Ken z#0m4v0hjZT<$xYCF{e953T1JYn9I`*44C^7b3bBUK+Nxn83NtJfSEqs%z&9bG1Dhz ze#Fd=ZU<0>GE*bw8T1f?hZ!(?Bc7+k^OSg=63PU12I=1<_g4IftV{0a|N2tfLQ~v)iPqO^toKF(k# zgO?b*%wQLT_ZYm-fL9S>iIl!$@I8Yc82ref7JQSY0?d_`PUFAR8C=L<27{RlE@E&o zgINqNVQ?vf%NShFU^as*7+lF<4!~tn=vDl8E`w_r%wupZgXY8NANm4F+#Ac#FY425&R?g29&zzGCn-gM$E(q}$}oTC-7InK7WrL`33g z263rb2Rx8Ynn7%82Kl2IRE=g(&YD5rX$DcYSplA(;(^B8Y%T~-w1+Z&+gOiiwuBJ^ zcnxmGYp@cfmvM*};%3VktkB>N4hhhL_K|f1jRDQkrsil##EzD0LDJ@6ck2W@NdD?E@Diy=b}XaRw-#W8pW;$f*B!c>b5s8Io)qb&sR^lY(( z!Q%{Aq;H8zTB4GcsAM}A))KwY61BDLfu|Q9^hV47!t+Z!sI}!PaGsW{8Qjl+xoS&h zs4drOunwW=uxbow`6$P+=&Jw=Yb^z^_^6Z!Xo`pNGd6twieG-lsizf2rzJ$p0j)4Z zt-~@nEQ09f1dpY{lzBD_$2`@w(9JQwGdqTQL_^fLUoPW~GntXtrW5ssOXn zR?JEjn98AP0Ihk=Yt3t(0=(w6=9Ml1c+C^xc`_HOv>sjpTk{gwnwLNYcpX&g5HE(U zuhL*HhXnAl*qWC`(U@BEvUntnOat0rWZHmK+jPhCIARk@5-(M4K|*aYifu89ZIQO^ zAMpGU545wkynwgmhX1;5m@%L&*V~p?-L}^=m=Dkn+1nv|J7jN%?CnrhJIso9f?U8U zcnxmHYjCV-T~IgJ7|@QFU(vbR@$%aqrL@N&wFd>Y?~Vt9)gFV@9)r~$G~52?c#g!w zLPmQQGCH8X)l769P-zEL+5v;z0Y!8`_72G20ogksdxw=6j}E*Pb>LM<0a5JO9;dXs zhYV!$u2{Zk6=(z(rVX!*!yzcZMgNGRK ztP_i3`~)Keu!>yD{nv?wtWMiC*ukNf8N3pK&gihtXlrM*wKLk<8Ex&1wsvMAO#yC2 z0Z)p~+?38-ZD+2rGtZ08Tv=zXrwdBzf|9zRq%L5NU4Db-7^v8Y?~3@Yi0_IT)-aFi zifX!|nuI3K^R_Eb#jZS8y7E-)dL2MFh6Kz=z-zr0iM z_#K7?iCZKFhu#P;P+L4`9lE@O#!#{ZYcQ!3YcKx-ZyCk>(za{qIU=S|$@H^c8V^EFX5%!;gD*RU3e-1|C zcclH7U_@Ov$aLNGAmTYELzT4hW31ru8c_!?ut})SGUj<1{-)aW0BJg+nHf)?AaGrg;8N7nP`Sx-%cnN`j*sDzJ zCb-50_Jd}y1%ZFs>&;*t0{^nNnAi(&jepxun6MnX#((UmO_+>517owpgk9e=rkeIn z6PA6?m}c6$%-{xurki%18O%rMLeqZTg#EsWF~hX?o5$H7nZfb+H`BD=!M_702*NWi zGVRaI;NJ*cY}%ij!9Nk2W!m4GAWP4<#I(ONL71L#scC<2f;2tjGSmLS1aW%C<)&Rr z!FveJHtnetyo1mcrag^7D97OdnN^Y5xUB>FQQ-%HcsZ64(7fSU?ajc zt~Q;+gMkQKV>&&9;}Dou4-6 ztzm(85bKWumskif*oMu38%ztA{hZ;*vuRo$;WnY3xp^S07N+=T?&lY8PdzVAJXelF`*wDaS81Ooytb27F+RuO&MP4718 ze+_=XpSw)&B>XuUv$?Txx9Qd3&#A%3_;ZixosK`_gLmuN7^_SVy93^Y!1@e~$7025 zFVd_wz5hn^q+kdB+-rJZ@ZPzy(|4cgosU2Nz+O;e<9^fo7ykS^c&M(au?FMKBLi-= z5;XpR3F~dJ2;}r2n{Wf~Ce!=?@ei>rH@Fh<4@=0q(==bizekv&0{o+GNVS&7AA40z zjCE}64ZMd;EZLs%D3e4m8S(3x?gDR%X)Z+k2Bwmr2Jsu&5FB{hO{gKB@fcf#gE5HT z#MBvhdra)Tc*bU?rJw@wTO{PYXPUpqzsK2R9N-@fN2;w%Y{9P){{&NX;C*SDeGva7 z(;qgUnix+>$eTvy0{nZLNj|_oYKK(Muz?xesEP3`TbToIHksce{yC=EU^e2nNywW| z*mr7TJkJ*B0RQN9q}tA=Xw=~uFEC|eXR?X$qJ+HJmia9@e23{RwgPJ($gDAv?KHhx zt>9dQUNXJAtl&(9UN*h^Ep$s$;}z3;6p0sLA{5oNGj^HYllVIyf2~)UpkD_ViX3&O zx5L5;=NY?A?+q*Hi(TPYO^;0(-ZuaPfZ4-S8LOFRye6TaBD9yMTksQvUYAgNgx&!A zv4fciy=i(^+gRy6<1IF%qivmxeG>9+vC(eZ!lQnd+n6++jJHj1sT}}I-tE9H$Fma8 zowm6SlWad5;RA1l#F`(X+;>1GcJOId?c8F90w$XT|W>yo||2B403#| zVy{EYeAjG)m`^wqNVSk%RI&lV{H6Hu1d9HT3XqlaKj{U!M2SD{Ju z7S6(Ax3Y+`%&AP4%+bYANvv%s8|C*LnhxHp%!y)26eA)lXf0H!tb-{NVQdZ*OQ2Zz z#C*r5I*P4yVsjJwnpoAuuq8&Ud0T}?LfORO};iQ$QT4>I0>C~ z5O#KS)+1F`w%IeKlghMcR(@swJ62Kd()R*}` zt8evNyjeX_c5c>KbIsX5a2%Uo#FBlIDs?KlUD>lQ$6N#Y?Nku^nI$-hON?B2I&Tk&+n*GvrN!w>vO{9 z{6CwUd#O_EGdj~W%$WbZy?LoBRjkfea0%MroG>%zSeO@Zx-8@JQbsHT2r29TXj4v` zlVeNrj=H`)w_fL3-eB-1gNE(NY)Y;L8~(<$wwl3F2z?9x9y8#j|2y8>g+q*Ie9s%a zL2rb9;9cI}mk9mHTfMSq*An)7;f@6Lgsg2Q9Fm}(5Vn8ek_7dHtnEs9xsWWVF*hP^ z23b&JSeThf*2_wHxrnS+%-}l2T}&1PnQIW5Mb>UsXrPvmwTDG1s3l~*Wti!G z2cfIU`h*28&$x!Hug%~Lgyxa;jR`&6Gp;3UUPBZ2jOz$H*wDp2<9fn2c5o6x^9kG7 zSjIeK0bws28oFoPK-kcRBIp?l3A@_R1U+LBVQU+zpl94j7L=tO2rVY;bO$dWw1lh~ z6g-d6O=Mk6!7~UgC2JN1Pa$+OSrD?eBD9RG%LwYDXWT;8Y=VI58Ml&k1;OdeGj1bm z4ne2%jN8e&ih@TFT29v01eY_b->Bc^TFF$hwu_XyzIBleL`SV&)lZ z$XY=%st=I$Fa;MvUU-nORt4BhC+whOrxhYIVP8L}#me?DVF?ScpHAFcj}UhGp{lkp z))Kb*18l6D*ixs@fm=t|_YclPo<|9bU4RXCVs&^u!2v*&+6@FR04TMsjg5qrFu-=Z ziHG2AWL{C%$9RmaEr^w!{dg-s-n*9_`*@$8H`gbif=wV}3jU1HW`cwg{1KroAZQ9s zMCfr4G>JUEmEda-Sg*Ns8seV-c~dY7p(jD!B!b*i1owlW5)FJBgpRcP(7=6Y;P(z3 z&>&xf=qVTqVewhA_6i=Wwm1XG{{CwaY5#_F&yn>e!Fb~t+sJy0M7Vt((}bX6L(V2^ zKS9TaoQ-Kh!EX?H5z~Z%qY>JH$w5%uAYNl~kg$N4$T~nU@<6=CG$Ckmp79DH{(ef<_2J*|koPmP7Ffb1J}2u2OSr@rm`RrKhA+v2 z^1{5~E6gNI2 z&$6J_G2_41vffeyew}6Qv%oCCye(_09qdAAzGcm_!FH>R1(r3>K6FM9J21xnHcVsU zdLsSzPdIR*Q0~P_bngw8buG%j34i16JpvqPp=Dk7zo?k2TMKTm$g-|SwzwUd8|(r0 zM$1}|jjcml7F*U0z^2>M1#MYkSqp*q-*Cfw@tQYT)`O5HjzWhnwX8?&;3|Y}wygEG ztlP^#m$t0iw}38fnaH<-CT*F>w}BpQ8PeN9i%OGT4qCJ^xJ``}mbDcvT8eHPfkN*9 zE!r}|D?y7kM%Xv*1o5GEW+Qijplq4HcU#trHs-5W8Jf0uEU&eVLU7$IM=e18T9aG#v@j2vEqra)`C|y*6kL? zItjrCmp#z1lEG+X!C4!taSLO;gy5RXK51rk-7ky{mNJ5fC4{XbVj@vC5p5U|>xd2W z-^MVt#+-;=ehd_ajK!#FlLe1(u-+ENW(mRn*W^{X9dKJLIErHgS{RQ@2yVf=TAM5j zZN-o|!8qWakPy6u*(DA>_)U!`F%FIz=Zs`h6Y$)%vJ@-*(J5QQXri zHDeLOtKl;i9MmDeV%3z8^%Zbf^5wzG%ByQLq&gn%3^5MdMJH3?yonA7lYul~oj$=5My zkr%jsBhMRP<}PH4CdQi*!kmJf(!_WRTpg+Kk7c2Km|!mY-#6X{*Tt;cjL7{KEXvr@ z!IBMP^02MY!gyCg;PlKn;RoRw?^$#KghkhQ-=cp)18|KGEczED0@wJ^qJKjmaE*^F z`cH5<3OZmxR}E$%^sxosK9L7LvEbk*^1!DSy!=Et_{@T!TnE^gRd?40E&2U(1H;|#Di}vI0A~A@T~>67i!255ZtOu(dYa1ZA&estsR3*(;f5!~PMx0qk@eUW2l0a-j{^LF}4f zX|~}%80Ij2=g{}aBTP)22Ub%g-wf1Q7o>s;c+O6#T*-Mhaym1WyAOqY(%=b zHo;c69-*skcp-|4ag9y4n4)6Lv*C{j^Eg&p8>Sh23;|WihG$}MKSI~r1k=>L2+g+% z_U>B{T42)yW^gk?H`uV-1UDhH(1!6QSd7pj8_tWcszX(>VWpG3uEjR3RqEmro1mt$ zGuOXJUKT zGaj_*Q!^Nb&_gzil)>*1df0~1DHwv#BQ`uNgFy(bwc%!o-5IDwHcXh+!LZw1JZNtJP(&IBW%v_>EK5G+p2A3em zbD(D^cF=DR`?@w3Nhm6#v3-RMjflTy!#ojky3qcz|I}& zD}%=oGEmW*Hmz5x;afJ`PenD{XVXSj4Wahfus(_U)u0<4ca2^D;v(P*uwLSuWfj|Vkh4- z4%#p-g6~%u-`E7DvK<@j+g;Cq4ZQ6ZFt~xiLI#T%+{j=tgCz{u(IR%lia&n21jT;~ z+NIz}guVmq5;pz8i$S}DU4N)dpk2bYKU5~ruG%`Pb!e&;e1^EG4nf=e1fgjTLEAil z&~%3`wBQ7QU3G`%Six%$#AY~f#tjO(m<4^QKi1Qk4*YV1f?;OC@lN6#U&h8Y|ny4jguag5{=Ju-c@t;Jq6ZY=Dn2{$1k0jW;M*Z_QvmPD0ywr59FONzJb%OUcRVxDm&gpToB_`Pv;trQ1NLA-6KX}&xxzt9 z@c#n_2N`?^z~g+SL(o$nMre)$hhwoXUFE>*SnNx49k?FjTR1Ei4*ZXylfts*zzG@O z!@;uVz!O=R$h8hZi(QGh>l|8Zi7g3cpLLellIA<`Qx;p&0te2@*c`-i;lN{AtV#x#zzdLf znFAkZS^95*;YnErZgt@8EKC1w4qTqW@^Q(%L%Xe@;~VIRj{6wwXYd|__Ze_sDTlY% z&Fxc;;~o8kUmJI)xUUf^U+&Pm7DQth=^VIK2V)Vs!+~$Lm<(1raIhAW!JQ6$Xo-#K zE{DERrhvO0cwP%5xW|F}wJ?HJ4t%i18noJhBeqzB?sede9h9Kt`y9Ar%Nl+^W`Zqi z_!`UvTh{OgFcWN9!ym*3wvfO!Oc`6&k>?#ah08j!-GOJgtRpWta1WPtXFY@Bc4&7o4(Y)foZ(QWXT@IYbMP97K#IZ$Q+>MFDo5Zk}VdB_oZNbE`)!KrI zqg2$r4n1Vcn7{78(;Rk1NZ}6L&EesLg##1E7MtQ*m^f;4cpoN?triYU92*PAaAQ9v zjvaJf1FGxH3sLNEs9X(s@~dz7HgjkT174isPx@l_LzV;Iap+k)_$@;3I`D88i{g6@ z+}y>Y_`ZY93AOw<@O8)XbGY%LLoe7tmqP6B!tqbs7V(i_7kJx5?u#tNeB{tx8%|@8 z?Hz1rz-4E?J5TI z81TB2>$k{Dj(m8S@L*huI9|fOgq7J28X@$R19yD5oMBmW;FAwe6fA2F9P{A-1M{5& z?|gWjVJ&jtqK~!cXyZG~Pdn&(F^cLsivfF0tM4Fr<5NC{%yPke3#ELIS>%WW`2%K= zBNF6~m_?3AkhLyd=D-sTtCvfcJ8(tA>gCdGCwLv9=`LO2V9mnn<R6b!0o@VwbLVWIJM(OE4k4fE<^&G|!Rkh)Z3%*1@tf)VR#0>zw~5 zOUozFUN3XAmKHYRT<+5Kj%<6(c4@v7Jb}0?Tw37ZdwVQAF5Tb+tWM5xX`v$c~=col7@6vQ%B~(lSSu zs`)P6;>c39z@=LqS*mVu2}TcIsusF*yCd@MBA1psBJbYl(h5hmOcuLzha>Xt5|>sw zBJbYh(w&aTyGvcVi;XlekGZtgQRXq1);Y>N=F+2%GLN~m-cjZ;mo_-cJm%6yM>Lz| zEaFaYr;8DE?a=;Zt|J^n@dt%{?x`9K%xX zDwm#epxNNu9+#f}e>2AOFvhDh$M|E^c&|&(IHEV*=hCx|=uP*#^qivlH7;#aRR4fW z&nv2b(53B;=uHo~^nxRL)59*k=!o9*h)X*hF|@CBX{RHbaO+%p$$_IR)*_c)c0`w2 z@6s!dnA|tGw964w+(wt`95KZ`<`RrhRmic)rB@v>zHfGEj|2Bvn6_Mc%@IB9ahLWw zqK9pD>2*i+uqRx4!x25~NtfPqL=St)rLP^?GJV>mgN|&OKI76iPVjS-_pD3bIdGGO z7UU9~d6?&IbLj_1c;53a)w)6{+g*aw&O%^caA}$=0?~^uO?O2g+TqfLt_VasU7F#_ zYWR{%GhJB?Uv}vtS60JUT)Nnm)o_s-3TmDO;!OP9K`8ommi;tG}R0Z(y- z%CLO}ix=z9d%;s&p|aP(Q(U34H^5U|p|Ur@Q(U34x4=_ep|XA8DXvi2+u$i|^@1S? zJjE6L`5o{SSLonf%z9Vo;62QGc0Tfq_c7~T;eH=r*1N*}KE$kdg$_Q#tapVD4q(>1 zLI)pX*1JLnpJ3LzLIhPyKQpJ9f(GWwrmhPyKQUtor_4Gi2KGu)NY{|YnQmC^qi zGu)NYKZqIb%IJTC8ScvHe~WqTioEq5=Cv#G*7q*m?TWnhgG=|gB5(cZ(keF?fI4bD zTJ4IwHPxegU6Hq@d32vE^44^Z?srAry3nHsT;WACJbKU-UNqCAhg{)B7kTuED^k|Q z9<6mn%9`cTI#;BuOFVki6)Eddk6_m=;|7eo>Fu*&!eXmU0v(ZGm5UR^XOSc zSJ!(4yWvdKJKv+{6#nR@AiEqgNC) zE%9iVq9*KXy{c$vsYiPh4PkfdHAO?%1AE;SiRu=Q-f%@*zty8RUD4KW^XM%X+B!DO zJ=*7r1isv(w_TCIS9rAF6$$(fkKS=b0$=ITyRJxMcY5@mE7I6q9=-31G=Jo?BLX>7Ge2V7C(@Ac?oSJe3XJo>~H>HU6>K2_AT#-q;^H9g?b=Zcyh z^ymvkO%HkWrJ|;XJ^IQO8SD{{zIH_hTkFxcu1H?%u>0qV;{Pai{#;S~*L(DXE4#WI zJo?dp(pFv7LR6lvYtKe(M(U)v#lOogQ%c{JM-F15|0D?H&+ z&wF&GCtPZ~M{_*kQZIOPl_y;4MUUosBD3%C=xR@7_MIMG|J}b#1k&{hDSGf!lmByXsIV$>Mf6M_Jm9A^JtkTTihaRo;gkOE+(Vd>~s{`W!sR6Mpptc#bFh>PwH-c*3u~0{8KRUwsYk;|YZw z1o!cT!oKn7VNay|Z^4H=p|$V8eLS%heh=>BiLLMla34=xhkgY2@njvW^=YFgveQ(b z9#gb7&8JO@)~5TkS<%{sK5bF7Hp8dK6|K$mX{(~Oi+p-Q(b~m6J*jAImQPP9TD!!j zrxmST>eDld)-LnuSw(A?`}CZmwb?#xQ?z!4PtPk_yV9raiq_`%^n#+bt9*J<(b`;} zb|_lA+NYh0)~@mCB}HrVe0tdv9(JuyuXw`4uJdV^Cp_$WA9}u+7v}r4+Y?Q3flse` zqAA|s(;iPW#f3h-=82}b$fv!YXo@%b^tvaS;$olP@I+Hw;?tX+@U@$Kddm~Ow$!J6 zp76DseR|syzP8M#{hsi(TYP%Q6TWtn z=m}rD!>5lt;cF{>I^YRkyVIwSJ>hG2`SgjRy1RY)R8ieMK7FRBZk118cp@3C_UTJc zB%^zM`pOdv^?g2l?TLl@exD9{VxeB+(>I=2s2}j@TTd+15Bl_-Cl>05eEQxK3-!Z3 z{h+As5ubikRJYcrT3=Slbv{k?MPh%{r)j=W-Fly<`@-Qi_;jH!9B!jeGkoE2kNGsy z7Y?_{r;B{yaGQO)*cT4B#iv=maJa{Py2KX_x7DXhec^CV_;i^s9PUY}DE zUpU;;K3(AphkM4SD}CW`&-ygS7Y_HFPgnWE;kNlS*B1`=yiZsA!r`|2bd4_@?ggLb z`NH8|^yyk(INT1OuJeWJcKUR^FI4xEPxF1Dx|e-g;0x8g;?oVjP~9${7WzVUbv`Zf zh3aR$8dCSRy-uTM*Tp}N<7y4e@1d&8$?zEItpKHcIA z)xG7@t-es*KA&#$h3ek+>2_bJZof~-M(m<8``V|qzHqpMKCSa*HT}k?M}1jMzx8Ro zFRSTyK5g)2HT@nO&KEQK58!aVcuV~V4(E%vRBa>L?2BwRwGnOcMK+t(h#vPvHk;mv zw)!HQUD$}8@I^M8(TJY(MK+t+h@SGr0(Ma&dfHbGla1&ZAN$wX1#Cpm`r<)#Nh5mB z7Z;368__mjbj-^d(eu9On3p&D|LA(lFk6l*S#+Ou@7uQvva+~#)kZPcV#y-QAen8M zXAA8?>bkIc5igw${O=bu?&O9o&B>gSOYfrFAxFM;+XM7lU@zA+B~cXjdKLYBz&+ z*CDQUH)u~C;%X0r_Gzy5G-$u(S}%hRXs-1(=ujP^X&-|Q*CCqrHRwnkqG>;aj%kMV zH|V%#*Z_l0Xod|m=u{nI=pchm*CB=uHt0+pV(1Wq&ecK9h8lFf4r(^cpbK?Sv*89^ ztb>}3Fz8Yp)NG_dm+PQrqYS!IhZs8ApsRI=p<@iXR)-im)}ZTkh@s;Qx>1K1I^Lk0 zb%>!847yzhHJfPAojR!5B!lkOLCq!`bYJsoib3@Toc>gU8XBmqPBW;n0jEFRpe6=1 zY=%Ki4QSX*gPIx8uvrE*H=tp&4QgRP!{!*&$^e_@8r0eVo8}qR#sHh<8`RbSn-&<< z&H$Sh8r0qZn-&?=!2p{U8`RMNo0b^V$pD*{8r0bUo0b{W#Q>X@8`RYRn^qXq%>bKL z8r0nYn^qar!vLFB8`RSPo7NcA%K)3!8r0hWo7NfB#{iqw8`ReTn>HBK&j6b?8r0ta zn>HCVzyO;z8#K^>OWR`5AOkLKt3iVexU_8s4Kd)-wi`6efO73HXt)98+G)@T1Io3_ zppgcYYqvq83@FzggGL)ruDu40F`!)g3>s@dx%L}0&VX_qFlf91>6v60S&v(+GIe(Zm=R5s8-x$MKbsmKCX7MA{m(Yyv>SaVB+%* zE0V#lZgTCC70KXtH@Wl1ie&K1o7{P0MKUn^S#Qz?1M#w9nf6sVA3H2QL>{+hYdu@P9_~O5G6aCbksnU>|)X}15vW8NyjzU zx|wuBbFI5cCpFi4m~={Wt*1$+HP?EXbVhTnw@GI;*ZP=rPIIlVN#`}!`k8b=bFIHg z7d6)gm~=^VZJ=FiN!K;khM9Cjb8WauH#OHrm~=~X zZKO%JHP=R&bVqY-v`Ke0*T$H1PjhXoN%u9^#+g)aqJlBrq=qIc7!yotWJ1>_n$*~Y zu1zwjiHVNUWRsej=on2gshNq6(NvR~o5((=nbg8WEn~V#Elt!iW|-8Xwa%mwCX{QvNux}#X@g0lO(@q!lg5}(u1zM5Gm%wp zHfg+xta6J<6HH{4TTPl|La(-&G}(k+Z8vF(3BB53(i{_BYNttaO?atYCe1V9rFNS% z--MUiW6}Z>UTUvN3r%>beI_k3;idMQwAh4~I$+Wg6JF||NlQ(5sY50$GZFI+o3z|S z%sXPz3KKE!s7WhLIQU~Gtuo=@kDIjGgo8g}(i#(a<4Kd&n#dbZnY7MC-gw%i^(OMh zGprjX>ZfN}H%utfIo1smigccJ!-OJTFlmbkMY_leVnUHFv4WUTq|2-zCKTxkD~Jh2 zy2=V-VjBG#D~O4gJFl~Xn6;Rd>jo=`SqmB6WCby6KBHT#AZE>Fbek2#tT~MCm~_zO z*D+cDSV2tmjP9|5nCKbZX9Y3QGpe`fsEO#;(4u1|qF*D6j+=;njV(H1BKkG4=%k70 z*VLj@CZb<6i%x3}HMi)D=1>cZ&T0;|wCJ3P=-0}k^CnzXYl|+Ja8+$Ax@f{xwYBJy zW>Y(hE^9Wmx9EyyQwNK#ny689wCI`%f7QvN>n8kFXNzu_@K;?dx@n?D(bb|`CLDY> zi*B26@ZBxCqgmI(qPv=PJuSMYS=Y;=`FHxpLkpdrz7{pI(CO)CQDY08 zp8gg!vC!!mU{O;Got}XfHM7v^8Dvp&3!R?97PYX@=^0{COADQzp%%5W(CHawQELmG zp5Yd?u~1zdVNqKPo@=Br>3yL(>qRti+X`Dq}EGW`= zi@I7+qzM*vv!F;5E$VJTktSKx!-67Bwy38CMVew!FAIt^)uP@OJl8af`dIK>(=F<2 z!E?>9sGkMTHPfR07ChH1iw0QmT(d12Xu)&Mv1pJ5&o$Sg!4^E%Jd1`{@LcmP8ft-c z3oIIDfprTl8g7Agi!2&pfpv>58fk%bODq~?fptqQ8f`(jmRU5$f^sdlXsiY0T4B*R z3#?md(Rd52TV>G%3#?mh(L@WZTVv5A3mUf8qA3wcQpiwV-QzELvtk*Y;Yp+=8y{vuK3{UE6QbDhvMVfJLh<_^X2!t+C** z4q3Ftf?gfAXsZRiI%3f_3wm|bq8%1;zhf5dw9xN4ZqY6a{hkvR?XjRzCoS4*L8VSv zw9kS{own$Jh0gXFiw;^Cx;ksoAqzuS=PWv6L7UFAs#wsb3#=*@wCN&iiN)Kd@Qc{2 zB^I>lGHZziZMwn=V%75e*{iG|R_%W?y2c7()woKPyUw~{VWR2=>xPAis++7E7AC50 zv07NQ8+_kwRtu|kjnN%e3#)d8(OuRE3lmlMSR*VlcP+T^ zMmF8kjA(4rea(m_Hr3mhhiz(8LmTt3&1`CHql?|#rY1JJ*ez^oYNLzY(x&FNo`SWh zg{`MxZE9)jDOj6Y+jyz2txaug-Cee+t*yJuHnq1g``W>#4mM_AJKEII#_Ve+n>yQ2 zn$9+Lv7t0wZ0c%5X}a3f*M__4W>Y^K?xwp<{cX6L9ySfMp&&hN8e}7D>t)km8(CX# zn}*s@kUlmIv!Nh;Z5nPvLHgM=(nh_hzfGfT)SCv_G}?xL9%$288@e&brg1iOW3Wx* zZT<3vO%rYSoS`;Nvf*=v*)-XP&lzshR2ynB!lr39)MBJf(`~55D4S;5a5tlEnq|Y? zjIn994RvhwV?uQY&vJdwXC)2 zybaf~&ZdhtRA9YLmuz%>H`sL9#-z(eo37eWflW4Dv*A@X+jQNASJ`6I4I5r%t4%j; zc$IB7-Ljzv+ihwj5Epjvnh|)?J9*6rJn3CFH52f$yLrtBJn22WW(1z}US2Z-PkNtC ztpuL*eqKESPx=6_8G&eU(57|*(cloT9)W0Zm{*TLG&sVmN8m{xwW*W9lRn1lNZ?5y z=XE3y4NmYn5^%I9ZR#fAXiwSHUBH8!wyB4J2RUO?Pl32_)}~$pap9azy#*L?-ljeR zjJUw7QGgK_c{K_+-%Gq21)T3?n+6Ct-z&T>1)T3yUY7#gxW?;JfE(9s8X~}r8@w(B zxN(!$r2sc>*)&3c8@G8~3i#bSyeS42>9K5Hcb)8tnc%B6UeOV1x*vkb{Yzr zA)p711kDuCgT{hp2~?t+2%00H2TcXd70`obg60W0isphA2DGdl2;|dk1T7V)KerXMOh6gh30f|o4DAK25Kx8=f>sJ-Kph3G63Bo$30f_X z0d*F%Ml+|2ptYJgT?MVv%;_d*y=G2#K^ru4dI;L6nbT9yCIOA;C1|sNM)Vf6ML;9^ z2-+&35q$-16Uc@73ED1@3-uSYQ!{6Ppk10d0|o8Y%o!wTk7mwbL3=fGh6viHnKM+- ze$AX=f(~fr3>S1zGiQXLLz+1w1s&GR871h5X3l6qM>TWC2s);jGgi=X&75(9PH5(g z7j#lHXM&(pnmH2%ofhyGlLVa+@D`H=ofYsFQv{t8@D@`Ao!1F|NnHCAUBakyK7IaTQeU=EiFED4fR8YMG_qt3_LkI44xu8Z4-0KQKjU7axm4aG3 zVACo=Z5*&^wV<{R*tAAadk5;XR!|2Aab}&Mjt*SudO@8WxY7-RIy-Qs8wGW7;7T_M z>gvFiZWh$dfh*l2sJjCl+A64r10C8XsHX!R+AgS<10C8SsE-2>wT;5H!R=JUS?7m;?1WBxtw;^*JnP zgah?CB50JO>wkhqJG%ZSXpE!le}cw2(3}&3#yilQlY%BV(414O3=Y@zcoQF12B-G_ zoq(WDL72x^&#+4T>(x2zyUq%l?XVvWa_3k({`K=S`09Dqk$=59jlb#wYl_2lz#w-~ z(ENY>{3O15iIwJGuc~?9%d9#M>VsEUbsY3KuCnSl@VVDmbsYA&LGC)M&cA;3Fur<& z73g2DstJ{wtU(U@Uzxkb8pNOH{TbDNuke-ItVRF4@*%$a4r`Lbkx=IDvL^lWbI{|;Yi<Fpfa??5fvJ9NN-T6S>gpaZq+=+I#Yaki5~M;yf2&JG=Q z5NEqMbX@bht3xL=zq>hfQuDjJL#G{%u3oN(LudGB+Qbv8cnRQLzSh&Bv;X%s^-fYR zht4U^d%4~Yo#)SYyS%(4lJ%D&m72y6&JNKG>m~4zzTLL$@4g=}?DmJJ8Z$4mFmjJ`Q)N ziA42rghNdw{P{?SnoFJGJJdqz4Bw%aQfK%MwU#==cc_ij8NNeprOxmjYA?|bp5Rai ziGJ`zhdN65^GObMmQcpY4t0@G#wiYUl~Bg14t108=hGbOF5%CoJJdrWub<&iPl>#K zrbE3X^7>g0^_K8&vmNRq;os&s)K@}5=Q`9+LP6&_G(f_?&39;^gnwJ$&>#u_w$P!$ z68>$GLqjC|+hT`?N<`r$4h@rt!b=?*F2Sp14vmoD)pCbMO7LohL!%@VbfrV1B@}d( zLt`WqbhSfcB@}dxL*pbAbge_LlYzvbiG3pB@}dnLz5&FbfZI)C3-2F9GW80 zOWEwuRH-w3ho(uL;X5>4>I~nZ8B%BX4$YK0!*^(w)ET}*vn80b%b__E%-QYGTnXmv zacG`|liTaidv_?WJPdl_$q9$<0p>-13 zz**KPiEQ8;Ym-DgKF^vY5sxphCP~b_Ut~>^s196WO_Hb%TxLy@s196VEs}U8>ndxI z#4B0XSc4>9$-2(kBk?Nk4Tp9~)Cq2~`bg9XZn64E)Cq30`bg9;?>MwiqK0|bp<}Xk zhu7*oRux&h#pph(ibPGIUeYOvc-&CZX^D8;NYWXJc-&ahInAaflFn;3HI;Nhv#FV+ zi<(W%C0){NY9Z;eW>ZT^S2UYiNxG`p)LPOt&89Yzu4^{6m2^Y1shy;onoaE`-O_C8 zAnCSdQ%6a6G@Cj}x~tjLS<*etrY@51Yc_S2RPW*)*=~{=x~LO$m(<8bouG%L#xCjv zJtZ}9@s4aSNljh6U(;Jsa~E}jK9X9vs7Use)Y3&ovY(_@E-I4!CAD@@ksKhYjf;xp zKuK*~=+z)e?Of>9U`g#==+zKO9bDuOLnU=|kv|NR)X7EuFkDh+7n3X_Bz1A2Tq7lQ zb)j6NBz1G4T%#p*caceqk<`OQCNWl0PZycQI7z)+WD?^g^>&d-Opw&aMJ6#(QePLD z#3V`mTzJ39lKQ*wep4h3aN+%?N*d@Qlb9xHkc&)Wx}?D_a?lx)hPcqMnUaRO(6CvO zhPlwN*^-94(6Bj@M!3+hxspb@(6D)uM!C?i`I1Jv(69xP#<wUTDK(6DuqX1mBi*Grn?A_v_dX|9VLbfcvCE|hDNqy;XNYqO+2k+jBz zUhS2%#YJAQPtsNwdBJ{3+g#)Y2PAEGkry14w8KSSa7fZl7gfr`l6JYMQXY}C+eLli zsH8nE>J!H#?R8O~I4)_Qi~7U~N&8*YCr(N_;G#ZpO430W^~%$d4!NjTo{@CeMK9&7 zq$4hG{L1eFNjmD*Oh)G=9e1Ha7bKl{I$1Ob6nm=mMfgBId1J7qdTlQ zZtV=CyR11bc0#_#n&V<89%H0W0&q|<}`8Xu4YbC zm+ooiG;`^`W=?aL>OE95Te#HFLp8IdON~5KGh4aT*uy*htzBy3;hp|AE;aS=PJdgM zntSM=v~#J2hYm`6ms)!0pmcDlqld0-N0&Nz=-PI2sj~;))Y+vj9(+?5m%4iJOYCkM>fxb|(Zi*l9=f(YUFzk*LG^N}w+9E++oe99u5h~4&w~#2b*aAx z9qQ-O08dvqT^i`=3a3khJYC^*X|M+!8syRt4>~m1rJ){lXoyS0Jm}C+mxg=LpllSeM3o(4lcIP4tk1 zj(2I2ha7Z*OOrk1pc7r1;vol}kU<(>%nyDK1U-5c8(GG{ZwJY?@0mJ$Ur# zF3s}b(Py|c+k;1+>CzkzwXj((&Gk?Vo9)s(54Es4F3tB)3!CfG0uQyYc`hyVPz#&y z(jpJp=mM8kdGJUJU0UtIBQ0`ijR&P!?9w_9`Q{Rr)_ce|m%6mUL#1MwOPf6C%W{`C zdvHc8T-xHn8Lf0_n+JVa<4*mxwAH0!9yDj0OUFHE&UTkhc+i|3 zE}in=eRjHZ+JpDm<O>9PmMbHJr5 z9+c*wOV>PfMh>}j-9u;OuuC^QD9sUG=N^>iD6ex5N^^|Yxd){=&a2zwU8(s!NnYJv z?JA>_yt+NSb$*K1w2#Pin%A_C$aIF+w2#PimRGV5Mx1l0nGZ&s=QZtv5f^w(`(VUH zUei7paml4tJ{WP?r8Yj|(G{24`iMtYU25ke9$j;(gO7N0omId`Ji5Uu;3FR0WEJpH z6TQVM;G;fqn^nLEU+(bQ_Ysfo^4j+ikM8l>_raI@yyAVtqk50}_~?-|^r){7@6*Vm zem=ZUV~_g#@IFmE8sNkGH1%kZ52b15(O@4+)7+yWK9r_~N5gzLo|YaB_u+V2c{IX@ z<7w^DNFR=;jYp$=IG(m1jrO55?K~ReLuuN3G}edGbns}L52fko(Rd$9)5)U=K9r`j zM-zQ0O&5V4G~GO!;zMb=doCto_O4G}u89tPzw?{L5 zC`})aX8BN>z8=l?p)~zGn&U%h`g=6jhvOOG(L5iHXP`&(eK?*$9xd?Ucm{j4$cNGl z@o2FRr5Wnc5+6!4%%i0~lxDa`%X}!!2#=QgP@0h*tE9xdbC9| zY??<~HN&QRv`sT?hDX~q!)AK4!-pcx@@S_IMVjr=E+6^+9FKPU$oJ=Zv`2Goo=5w9 z{t2{dABQIO+(Rm+v*&2^7_{huFdUVN$3tH#VWgjkR zy+>DkxS$OlUGtHRZS?56k8Es{M>l+AW1Bs?<-_}I@#wY>@3YmTJASQ>6=a)7_k4Jt z?H=9t;eB>^R3D&ry3?aZ0XVeFqs9R^wA-U50XVeBqhgjNC!P?6F`v;dDJd|A|3XqeE>x|;!%eHigeVYP5~V9F^@V2aLC6!>Jq>q zpYW(_07W|KQMUk!bjqXd0Tk)9M?C^$`DZ-p86e9)>rt-&5$v2ty#qwB^QlD(B5O$izFcB03BZ@j9t{k@mn*C#0V3E{){+1b?3zbI1MuZKYe|3zc7wGfKm@zV zS`vUSw^%^}M6lbeAORxS9afM4e7VcI5g>xyW8DZ4!S1te1mH`(Pm=;DQbV662T-I& zK1~UrNR54(8bFbn_%tnmA~p4CdH_Xg=F`jo)uZM<%?eOGYT?uD0M(y?xpq zAfxKz(~bZcRbQWWYQFUIX_w|pf1h@1z6|hbkLJrjpZ03L4DxB8=F4E8_G`Wj@#%o( z%TS*VYQ7Bf>5%5jaGwrqzKrnch~~>kpNu|A#D z%o*p?Db1YmKAqOgnc&lz07^5_r?UZ+W|B|m0%Tc}eL5e&1x@kkg67avpDt<+P4nq; z02egfrz@I6Gkm(LIW*I!Ynnr|e7YV$b7uQ=BY@`2@#$uO9Bi&nw*vT~c|P3^;D_e> zbSHoxTHw>&0P3^Qr+Wd^XOU0$1E|kppXx(IwIx0^3=!3q`qU^yR9og#;}B78xlc_( zuxW))O+&D0rBBU5uxXV~%|ozhwNEWW^l;Yr)GCAyt@WvOh#t;5pW24dq4hqs3!y_B zd}<$pLmPeS5Q0OSeCik?d*AF+rx4lu7N0tYP^7IsbqS$J+kEO8LXo!n)Gb8zzQd>P zA+qS8uVds6C5Q1SBe3}@7VHa6xLa5Xw zR+a821++?YsBu86HHVr6 zv^GQ)yJ4i6v|e+lc|aRO#IhCvZPFZS8PI0Up;iHH4H3&)2ed6jENc_c_7JhG zZ9w}qH`)bsKy#ygKnFE9Is|k$)Dw;Y9SQY>V?akk_~*_69Sh-ex&(AQgwN?3(1{Q} zr&~ZLH8;8kbV_rhM?j}FH+lwiCWMpj70}rbPP%tM=R!E?J^`H%;iUTpbRk6C>KD+( z5OJ%2K$k+qtpNdD4&ieK26QEarydm0)etqF!2w+hk%J8h=z53 zJfPc}8zTa`qq#9Mpu3tIqXN38xiLDR`DcfSN~o!ZDy0k)Ci2sAYs$HZ7o5k)Ci2sCA?#90O_-=?TYx z+D3Z9F`)Jl)Ms`;9U`dDoPat;P@lO0b&8-q^8)G|A(qV#s7r)cwjiLc5n|cGfVxHC z(4v64N6?|g0riNWLrVhc89|4Z2GlEp4lN6)cLW_;9#EeMIHbGRLnGb)2xwTO`yT-fk97Ydpb-(&XH!5EBIwKJ zfF?%Z(3XHEMc~lZfF?)a(6)f4MBvc&fTl*^(2jtnMc~lRfTl;_(5`@HMBvcwfM!PE z(4K&1Mc~lhfM!SF(7u4?MBvc=faXSUK?eew7r_M`3}}7?*L*0T1rc2H;eZxKm@_yM z(BcUCax|bN5%lF)KuaU&%khAgMbMWM0WFV^(Vt{xh>+2rVr7WnpHH(gMDWjNSQ#St z=d%H=iO|T{7bB7*u{VvUHPK9>X95}})Mg*75VZhw_E zB0_F|Eub9{rXH^cv@=3(e5pw&R0qu^E+usUkPlVk5c0hY04;$2nBkIF3{?KxFIoBvOeEntWOK>~xR5xAZ&o>T@;Q#OQ>L9x&p%HN; z%IBJfMuEdmKG!TXQjR|PT=US#IQZmqEkdKnu_vEv85$-2$@95Zp;6|@lh3sdjS2^z ze6CGsR5|YCb8SO@tLG&K?Ly-Ljym~V`_OohgHArzAv7N1n3KU^einZ=vxdlYvit3ylvj7x>h-(D)!z zflqx4ji;Ci`CRYNc$$fj&-Dq7XP5{1T;I@mmPGkfy6QK9jT+ClDOj}8q!o+zEi+tFrx zeN0#v<98Yx)+ONgxUi1Dwb~hVd{|eiZ=j|xCWLi-F5V>mrV~SxDPyX(Zaz0DG!u@w zd_Y-f@l{K*t;*-7gjRuhpU+JVt(0k>&rJ)hj9H)0O%JUi7qs%Z8KG6;>@lC48Cqpd z9`m_bp;h7BF`t_qS`Xkyo)cORGT-yLxuNwC(>cp65Mq^SQO5^#YIl z=5y;p>(e};o6oHetzvdPo zwad!Z(E53OgEts$15$gPZV#txg(*d@K(P0 z+|f`}c_-g|?pP>lypeB|J06M$YN87hM|4#mCh`Zh7EgrYVXphk ziX$XXhvG3V`t#1np?I8Y{=74CD4yUJrJFk!iYIHLhx$f6`NPlnbLT_xERQeea~DGK z99QP@xr?EAo(psN+@(;wz;(HN?s6zz=CXf2cO?|Ba4jyMyBdmDxfGYrT?@sBxzeA{ zT@S?@_}kwI#YfmFvyp09hC=y@9f^8g$FJZwpiNu$&V4Ftb8#vgr zStP#6v+1m3k@yx)_-ql0Z{vi|mXUY|Cw#Vw#Jf1*vvnli=ub%;e^lbk@z)lqsBTGiQn)pYOG_C_$_au#yS>>-|-%5tYeY*J&&QYjz!`R z;CSCi{E>&yS;r#rCy>2=B>v1zn|y9SB-9CntYeY*AAaeDbu1Ep!J`};iNB)AIwTUj z{j}OE4V+MS?ezR=aAB zjs$Ne-JQ{xNbqLTYFEv%k>HJ^J2Dy<3EnumJ)`lF;Eki(GMW$x-Z)xq$U89-ym53( zMw24J+dwyBG&vHy4Rk%DDUsl9p#R2bY9x3Y=)W+U7Kzb%o8{?|n5Z|@o)L*jdPD7* zk(jJE)SeZIDSAWg*^!v4H`JaJiD`O6?YWWQ&7}X6zu&w_@Mh9KWHdh#yqUDx&Sya+ zcr)qmFN?k$VNVtruh@<=Rc z06VrK5=$Gvj;)NuGQA!1sz@x?+cB?>#0tF~^O{Jk)Y~zyjRbE~{R#fRt&0S2Q~f5R z^^xE$sXxMKLnL^+=;s-2j0A5Nt;W>hd8ikvOFe)n!qO#OVfTi0p|3pM#_} zH{2VEv+AT>-UdDr=hRWVd`L?q&a1O_|4;5fBzWWK|HbHFBzQyUyNnJ+f;WV|&FF9> zcthx$jE+R2o{)+ijRbE9t+w|%775-E`ZtV@M}jwm{uQGWk>CxX)y6p|Bf%R&tL?o` zMS?ek{^{vhDRA**YF6#8yX&Fc$0a~_wHwSOT&E(Z!_ol z>K=x7G~CVbu7jGct}%@P?q1*SJkWbC9|KxK)Hos4T=ERnHOWWGDO zzOhrPIdAe8zg6GhkNlZ_u~X%e1zWzDM@CBw2E@(-T(DrNjGaed3kSu{qp*d8W9KnM znIWN>4UdQ0T_}KZl^6#vVvHF3VGnxpbHa?pat6!iAqsc&x8BK|uPt-SP z$Y?5%(#&bG^U3-KN;9X&&Zp`dD9xM!r1mME89Se@Z}4YEvw;4@Xm;%Ik>-D3G$(d= zX!dvf_nsR|{(DP@7ad!?SQg;^=EpLH`&$sp4DN4XEQ{>^%-o__mTHoBj8=cp#j&g* zf-Z^W1BjqYWBDK==(1Qo#1YiYEsy2HHTgxh8vF$-V)?kXda-;$TfJC5sjXftpGG)c z6U%2foSM0{v3#~B`5@q%{FUos`64?ZwtKOBiBB|OyBEt3@$iG0+ZfB2Yx1l0e5Nj2 zzF5AF*tt2DALiI;=C;K0jhg&=eFGJ%x5o10Jdu^pZHwibJdkDPw#V|Vn&d-;)%V;H z%TL4e?2P4S;CXh%@^d`&kk9Roe{huLBQRq50}irm^kVr#jU*UNhCh~9ayp0n1cN|{P zIFa@G$ciS3w_v5SSZk`LUN%BVvk*$+)-)G?8K z;D*|lyi+3iz>V>YIwz7nlG^OGOCs4Ljb_v}k$v>x72Oia&Pe&I?uleSG>}n`M6w@J z{;Fpp`S^@JjCv)KkI(4EsCOdy_>3Nm`XrK%&*;XeZzB2lj4q7&C6awpCr14f$-b!r zqXCIz-_(xLz(lfdYQtzyBH1^!Vl+6BWBzg6MIy)kKLkJu{3@R@}hcP{%~D|6?8y{OKls=7fUaW`4fv073SDiR8m3zQ$-PKUIAi#I{6E z)n`C#Pvi`B@~tcYN&k5E`DBobtl8!8Y)M!M?>XE_9k)>->{Y8J`J}p z+^^wgh6fV4ly6wi@L(dBF#H}I`zL4;E;tIZUF>xQ@QC$|n#C?$Cf}6XXxDVCbsp`w7@ds6vx{|n$ zqONc?aUWyVU^z_O$9X!=&0SC2Cu;6Yb@wd(ph`|R68D2hl5ZyNQ%I6;CGOJ*7`GGm z86H=0b9WN=*_x|%S$EYg>#7QMH*r724PlnZ#C@6j!7P!9`wFWDOJu=)4TY|T1^0Cn zx*8SS52Mi4xZu8lLRXW5`w=*rrUmz-a5T*d?#JM0nit%UBX4d|aNmNpX<2YT0c+E$ z;C>R;rgg#n6qh_X11`9qh6QL_a6bbJ(5~Qq78am=!TlTxKphJ1+b}yF3+@+Tb~+W@ zFTw0|F1TNY+38Ynzk<3?*Mj?v+G+mI-3snEYbP0WFSy@AO5LO2ej6!u&w~37QtDm> z_g#2^-UatPq||*1?)ylo`xe~qB0TgfxIaaf+`r)d43U07!TmY1$uX|rw$w)vjW4*Zw60GmxEyV|^Vd!+xEyU%wmhle z@7%W>zAjOG_y&cl_iFDSSift0Q< zEVvwje$8l6!Q}|_UyK$PT#i7$V6>#*as>JrqooCxW6X~jEi1SjV}8JBdBNov^L<{c zD+=x;=JHL3D>YQv*{TAT;5CM;HB{Nz8Vyx;wzh!fd5PgV4KFfWU%(PniP{DY&oSIs zz?xKv+9nN8Gu*79%GtIQu&7Qj+^XSmhT95QWh#B!uAxfbc4(;5x19wn;e!l!X?TF) z?gG}dQpi0T?q#@FLzUF+E4Xv{H&$Y~UqdC92Q=Kq@L<7JXZR?wJfxu#%fkg%ogTE2 z;SmitFg#jt7xC3K43BB3bo01|s~DarxQqD)rJE-;T+Z-R!Ck^vmohx9p_0%u1y`NV zpd|FHhDt)u6+D(u&q1aBe8G!Rb-GaS60E0-1+RehbgAH_SWlM=UWWB_rQj7&b-G&c zN~k(rD|ltBuOX>Hb9U-Kiez(6>OaQGrkk6a`j6NA%glZM3V%>3-MrM-y@dIx|3Xc* z5Ei8VizvJ=O#PQocwdzIucA!5IQ3scnRZF)zm78P($xPb>gvl<|6{1DFHilCqprRp z_1}b@Seg27!A`77{ZGJ7tWNz;BF$Wr`k&%7llvB_|7m{hhZEV<{|wy3`qcj{+{A{| z{~Wss?pvh(=Xungli1Y%0+PDKIdqP zEGJT*b2L?RJ(>EPqbVnQD)l)tQ}xx;sn40&JB-exe%l5ZtT~(d95t1vJ(v2Ng?)w5 z`PAoF`6WgdQlGQ1w;5ebeU6%+XLKp`IWB&R(dE?VxTqZdmDJ}L_%TLTQ=em?s-<2_ zeU5?3*I!S4j)AXnKki2Aa}4yaF;zzLCvK)b2fY^=-Aa89daCexJM}s3dX~|h)aSJ8 zX-0QbpVO(w8Qn|$aSbqobwBmT>%wb&=1pmie4^sU)v?=5yMmlDrm~KU-UcmYF|CCwZ+hpHnfF6y}%PMOc?nbMWcna}B& z(v>cm&*_;`ldhT1>6ucKZkf;NnbMH%na}B&(vTjR&*_;`j-Hv%>6xNHugvH4Oi`eB z=5uft3^Jes@CXf603Mn7SNWT%06Z$g!&iyRXbsmf z9FzI#+$|M#$7-k&mvI`Z06aeP)r-k0ahaf@3cwRH|2AJ;%y5#1DgaN;{Cj+L9>Xab z&Sf}N!#ND6W&VA>VHU&b8qQ=mBlGJy3;GblnHsA4=`0OjWH>wX8}be6^wc>Ts#5CQ z%x}b3pJ6yp!>3uQ=Vt*+b>MI+&hnQ9G5WU)vmk+wUz7y}`1r+Hkiy3=$$|_%erXmI z;p3NOK?(iaMVEwMZGmy@F2RLYqQ`Xi0`^A zco^clJ_{a!_-@F8M^ORVm<5l);%~}=$5HFsoCQxH&)bp(Pa@CTngt&~p0_OvJ_udj zo&`@qmv>~r)6nIeS?~;Wc~=%Z3tirw1=))6It*d zD8il0f*+s=cPa~hh$7tSEch{MZ)dXLC#b!h&4Qnz_I54{eumoH`7HQ3YHt^^;5XbI z;bb)nev3Nor7ZXZcSN{imj!?1xgt(cv*1tc%(-Hh1-jC9EermF$9+8u{*HBZBMUfj z`FCc<%`9lfj8pFVmWIk*-_C;Od{w#YI~po?eOE)}uJ2_*3%)_Q>-$-tj;m75k@_Ow z4;VHq2Cew2$_5%0gVqec%doMA-(lE9!}l3B)$l!r&5A)AzV{u5%{BZs!xkE9yK z_)Uhbih(*JOZ^tDHT*Y*Z8ZEk!?qf#mPxx}(2no@3d8mqs+LKIVxW%JQZ18?8mg8_ zCk?;AuyZl!z&Cu3VHXWQ%dl%PQ0IiHDoQsEl`eJHQ1w)L6oXED!&?k{YWOC@Ud5m@ zUsa8i-WqoUuW3A7UuQD7^47xE?jg)~JDoq$v4AePg zN(csP_yVuk; zJ$Fi#Mol^Fs$0RV)zKG+W2DlD6HCqV)z)W+Qee` zIIP;FV)z8C+T>#RB&^z$V)z{D0aJ_N3lNKG#qdMWi0Q@fWoX2VV)zO)VrDUX6&f+C z7`_ILm|YBChepgPh98DT%q@m*KqKZA!;e5C<`=_{LL(Lw!;e8D78b*gLn9Uy!#AN3 zi;Lk~(1<0)@DtF8rN!`*(1>Nl@Kex;<;C#R(1;bq@Uuv5Ru;o|V6|2i!*@~fUtJ8} zgVkD74Bv;9pQ60KsTlqY<^9dY@aHJ+ zZz+bqKzV;_G5i&(`rC@(uOTSgi{Wn|C_9SbZy_i>luA()c;#~~6q!F^?Y0B3R z6+^aa-(z&R7_wFS4x=N*kgb}sZ%2zETQz0hjuk^LaD0ou{&+Fu0!PS2Y2_eJ6hkg( zDC2gr7;InQh+%ULA7t1tKofy{WMff$o?fBC}n}= zm!cX^`*DA_6g_}Mbz~`e5Q*xjQuGiK)zPI$tKXPXq}6Y1DbngUt`t21(Hmcio`mR4 zC`BKD=uIp|ALRU$hxSU*Q@q(Fr@*D?Y2NFS2lh(QGg=Qz(X*(JPAf&vp*}jj6g`jn z=!{bI0_vkPOVNup)yAAvie5r}bapBF5bC3IO3}+0IhtFFUO_H9uN1wCTy}mbdJVbk zf>QK4MvfMiq7S3^v#1okf#T2NQuGlNf0mS@kD~aqv=n^|#h+!R=;J8EEuNlkvhuzZC=KW$}ulvp3YEnevQjA;a$M&8+s(Bq$CX;Fem0yLK9j$`bvdq~CfKGNKY*HG+j9IMYJ%;` z@gpb&wlBwzLOeQ@T&@Smxj-P`-bS=j(px)Q59KQrz z=w6OrMsuV`IerypsAoBT9Z6NMa{LD5pm#a`C~~Pj<@n=JfxhMVEu>KW%JC<$`1_aR zPa|_0P>w%~H9xQ%e;#INP&s}ZOMP%TejiJ8NICuvmgvxO{9P>3VdeNguri02;~$_b zJE9!_5KDAqIsOrr=%{l1Q>@I<<@guKX2z7`U!u4)wjBQ#ic90l@vl%^8efio4aYN~ z9RCK6XJR@2BmB*za{ND7ev`}bU$Fe9l;gi*`Asdyf5Y;dR*wIU9?0}^%$*d~`Iu3T zxhB+>(adtp_CggbW|d>M5^5%Jb~$D%p^Bq($}w9BHQzF~9CIb;znMGp$~YBXMWp!} zs))3pjOXq$T&SUnNQ=rKf(k>6HMAKn(a>VJw2Xu0Rd8CSp$bmRHB`ZAMHz?A|33^@ zYWTkyuF_D2tkq>4NZ)|r8Vyy*TC1T7S?kI;tX{48^%~w`xIsg;{5O_yko`@Dn>19* zf3t>a`EM!XkbBiM*{b0chTF}ZWEW_Ozstj+B zhAP9`TaE|u4N5BZX?TL+ehrms94N=?tmC5$4{CUX;UNtVGdx_5hwu$bK#pj5fZf>New~hQaO15RKHwK9z;R)N;!E5oWEL59%jxvxohR* zky`Rs{$Ku0Rp5EVrJOtt%HJp_Pk{0_%gK{4`M1i+2VnAVmy-|jBCv9I%E?o;q#^$r zYPjZZIe8Yf)O+RRIn+|`my_pFORcXYy64calIWg8qe`NC4vi~`?m0B6B)aF&w36ta zL$gYvdk)PjiS9YHs3fmLgIZRS55uIisw8i~q_nOiAAuOPsU#moiq^K0dS;{z<_kEBwvLXb*m)bL>|_? zl6(t!SdU8bZRBA+E6F>^!+KSccaewnt|Z?>*43wy`~b;T-%9dBJkEZVOFDrp6!wCRoNuPuZ zTu@0rfY7k8l70{_a8V_FN_R9W>C?KSQAwZC9gRx*Jj~y+O8OE!-||ZO3gXC$O8P3| z$jVCk8m!)`O8N%k$m&Y^5yX)-mGq;CBWo+^o9ODTtE6wCtGB+Aegal+LnZw*9NxxC z`WZO9O_lVsn3daHNxz_tT_t^68@o#SMNB?ytE68=p1i%1ehtfLMH@j#Sb=pt^RnlKzn=kGZ5*N&kd0+wn^JXO!7aRMP)OneAjH z{U7ds^CU_o{R_9hc?hqP{uTAMGnMpjAjjECsta%DDk-Pos;6XsUGF_^qoP2+Q(dA0Ykx`|~S1Ktd-m1HCwUTn;t-2f6Dk(=x#p~;pw4?5B z+^D478F`hj-K?bD8sH`1Ta}d4@0a-6?Mlj11gf2Jr;_r-0Gb$;l=~r1@U?rDl=~r% zF}hz#xpeRdqxx#fGXaAbHLRwbrVn7$sG4$nq#vWk)s)*KeHb;VrepMML(^)?O%WC0 zn^jY8fT&rt=GAn%o?~cHO}WLPiV7{ODYrNpGip^$xy7Mo(OOqiZgHqaXq#%vEe_QP zZCg#b#i8aH+EvrV4KOp_zM69T;ir79LpA00!;cwttft(4_z|N{)s$Ne-)GdhnsTe* zyNtS2Q*Jf9&!}rPPK2DfLcDYrA;U^J+j zp4aWA!PWGNehNdX=~X?$KeU=&(=+_Ts_9MLR2p7QZ|SDeh-!LUPxFtgrgs|P#r{#% z^sb&j8(mHB=?Szk)%1P?yp%n*n${D%*SKoRllE$caC|jwLtIPZ$-HXXR?nhMtfoAH zrk=;7YTA+TJSJDuPK4(%rJC|AnrcE%t)|@xvw_p9X%9WkKfRjv)-(Jws%alR!#}f{ z_SG}|v#RL;HM!5Ou9^-cJgqs^bP(Zb&1E(bp4Pl-I$Y1T&99~-2*srZ)f7{1Z0VR+ ztboe)EUKnzyjAgUXP$X}E#mc4j_bRpqc98m?uyvzpH5tEvXJtD35T zz2yvdYq*Tz9u1c=+^eA~hwZDTYIbiC!~GgAWOzWs1q=`J>f#$z4eXGHa~U4ia1O&G z)pQBpFpJ?)4QDbuR!!B&-*kq@HJrxqgoaZYo~)*7cEmm_G!3Q^#7ysWgL5wXBMlNjulF8eS&t zQp+B|%cNav*@JkQv|BBE2t$S4YuUrdl6%y$M=(^_vz9%IPC~C*_88LT-nHy0v<&*x zvZs+H_pN2mpk>gnmOTrr+P{`P2dg@umOT%vIX*N`_4t7WgFn=rhVeH@->L@j$0o@it(dkdauR4w}iJkjV{_DOi6F}3XTu&QHg z*%#0t7+1^QhG!jL%f13DG@+J#6}k1qTJ|+~qDi&v>+Ff#+~ivJZ?)`*`Xe6Y59-ax zDYfhyaIaHq**B4cOsi$zVjJt`rq{A>*Ro^k?&JJHHC1NRvUg#aX4bOzV3=mrviD(_ zX4kUspd>b@mi-5kkGZw%2gtzZ)v_O=!!W;={Rqx!K`r}FIH!fR?8k6Ui)z_Vkbo?% zWk1C*$C6t1GYoSqt!2MQhhbSQ`vW=*%WK&m(P3Co%l?E8!^&FrXLJ}=)v~|iy}Z@6 zj5GN^v8u1BW$bIz`y^{?8MhbI2-3P*)}h5XnX&Cy{K7Fv&I<8w~b30_)?jm}S{f z4k+hv zykmJhOZVj+&*SA0y3gP%<}unYE`m08@)KPIrHZ==YTzO9W9 zV3aL=J4Lqi?QMJzqny9!pvXqQqaqvqPKw)soo##wbGHJ!D6;+Us>t@gn<6JmyW99M z=Cb|op|~E{Q*j-zm*QIBJ2vLFmX*NXitGyXu`zeBEeG~hWLKb{BD(_p6_)@9*qD1+ z76Jz;9Gl3%%X8=bkvV$;6ksXB5 zHa?BHQ-Na?*+Ceq$PU6d8*>v4I|$*oW!Xq+%aFv?de#FvFT0 z_Mt{;rZqM<@8dTxT;jVHKVz0PUQEVE)&wybv#qI!$(Uo!m0~jHT2lumqef|-HCN?^ z8-NX$^1g}J&$mW@iQd&NGivgSUq538-YU+lvgYrZRy^;&DbCz16!YaWou zdc8H@mpug=ta(ssCmXG4Aj#WJ);ugZ+s)QIB01YF);ub)_Eu{ilURG3HIGZIz1^B0 zN|kztH9wM|`x9$^ESu1FTJwY$lU>$4DaPbeYn~As@|iWyiVfLq&2v&Z*<;P~(*Ls8 znir()WuG-KN)2VdH7`p?=>cngE?dqHTJuY(svNTBSEyWLABQ!+mYrrttoaS$dV;_e#zmqLz$E;-B;2BxbE zs3jSgsSco4WKdz}6#Cm_5NbEVebbs`Eyut%inW1l6>9<8k*xE72ew!I7O;cjH-R0= z@E(@Sft?h;0qjh&#{Ui2Me$#OT@|YXyOFH_e*tz^{AXYf#eV|!B*RthuL651eg*gr znVA@654pEu1nfhGo7^t|`zo?M=|^S`M%kY9C&QiXY(xeqo&pY3WP375k?qM~GV?H( z?a2^DwkJas*`5qjWDW)UW^JsGXI8#smx7r5D;j8)tP z97l%h*Bma6S7ggEfy~DkWpgo6kS$ngU* zt1y8r#}q}j98<}x#wc5kX^Lz)rjuENQ8pJJl35RA8!sN6 zM$9I&5ff$s=P1sEKF_5D`ke4nRdB2eB{jwGo=-_F>Ec;HNo^@yEu8xVJ;^L@qT~k2 zEN`adM&0F0$xTuU+e*pJQWw}p$*m%^+bOwCgmwodcZf&+2_<)mN4}Gi`l7G9D7jmT zW1muTuQ=kLQF5O+;=3uiUmWp0lzdlepnEC#p0pM2qvQdpNbjfQ`%;lUKuH79*MpQi zB>H-Yl82=teVCF*@+Nr4j!^Qr1b#;;`5{VYkV8tIkW}a~N}iNd=y6J(l2qskN}iTf z=t)YRkyPj@N}iQe=xIuxlT_##N}iWg=vhjBBB{`Gl>Aguq30=iK~kX?D0va?JGOFA z^0H(=zo6vjk^!wMl3$1!ZCE7#A!f8uk^EB3XyYRJl|)`misaYQlhCwCej{n=W<~Of zq@|k|$*WT5Y*8eyNq)Lzk^HAv(N;zBd$FQ#7m4olYF#9{)2mI9=uWS;Me@2tVC{|4mHXI<>4 zcqy=dkxauk<8;9Q#f!j!iY$?X6j>q%7YVx}ERjPL&j5!ivRV!+5_VHqB8MxoM2=8A z4jfq|voL|haFilf4@WB=0*)yX?g34v!6Xl zk^Ss<71__8TqN9a#A^ATBCF;5itJ~9P$b-D#A-Q3aU*bQk+5R3T251B=X!dPuuQXB zeyGT5IYV(3aAuLPVzXM#Qsk7|M~cg#YO{+nRIRKVP3IISCGNuFo?Dbv)#eptRkis= znN{tw(t@IF@^W3g29I8=hq()ja#>dUqN1G2YF}KGb18`}Daxv8ON+7-DO*;QgDmpp zMY#^vHp1nie0^2Kf$j>S=Rhk9{sGT`RtY@~S}nw7g*65L=qEsHg?avgDN--` ze6&b|==0}AS`kP1Sdm^Sj_~m!y;}77M3G)2`h2oTuN6o5RFPgMj_~Os{f_AKnIgSj z^!aR&))jp|SEThspU)TRjpF}aDAJompDz~a&7#j=6zMIJOsR6|t&;v~=+fJzK-1$#=d${!X(%IG1rGJ)d(aWWOkxTH7 zOW(vhk3AnQh1bl!Z6B95=DjeGJ(sq?b*&5Rr+7WEzmrS;ZQuaK>wp6luLTZrvK+1k z4pzJhIK-vg86JQ`6+Lj6q5}?BEPx|i$_-!^I8reOj#A8kqg~3)VP)VL#RNE3(E!J} zl-s9j0>>+|V?Dv8T`-QAdv3}pB+-k*E;{!!@ ztfwfl0h#L3?wG(;pXS%Gm6pv@QES7cgk;{y% zi`gzqur6wp=D4h!XZ&Yno$w!TFqrGIToi1c%d9Mw`7R?_Dhpgzh`nCuGB0apk;{VQ zP8YkZBJSA|mt86D*;1F)5%+AF%dQcxY`M#>6|d}Lmt8OS{|cAYm36h!W%a~fuX5Q9 z68^4s*^RQm*0}5@-2T-|Yh8A8o^e|W?|NA0vfJd=U+=QpW!-IX*&TB0Z*~7J3tuDJqG+>*{9+Vq>yUQBLjlRQW56O-GiOYT=pI?EkvJgq1jM1-t%;g2+jMRt`(vAz|-}jFH=0#6@8iN zsh;S|G*35(zD)OYi&&`-J>4pf#tculiK8*o)9vDD%<^=H2+c>H?i8V!?ddKNnmL~8 zi_pyVbhil2JWrZ%o9{^zZVNnV!fl}^O}H)cqzSjho;2aM#FHl6mU`lZTlLa1PY>p_ z4S!{A{FTc+JuFq3k3Bsi!Qcu{k4iAO($iybHma9ad3rpj9e71GykfPdCv-cArzgeH zSnKI2aWvL>dK!*K_0oDz&*ZcnuegX;Z1D7)M1vbWJukAf$?w90sT11Be=E>JWwy~o@o&XNkC5XwG4z%vmK~aAfy8&;TNc{o)*$NP(M8_q)i~yxtd{K+dxPb zHUYH@ggRFvQ2Rirb8(p3ArJ!Aw?G{Oq0aRts8gU}diGQ2Ku9WbU9U?Z)V}@%>KX{O zuRnmg1w!qMw-R*^gxVKxCF&6fwJ+XE)H4tQVBSj9E6{k|0{l*(3AzQicOWDwe}S*| z2{cK!0QU`qYT3^))-MpMWiNpG2SSaE1D^qbP$T0C-@rgqw8A$i5Nc#x;Ts%inpXIR z1e&h>R6_%yM#kaJut2DhagZ}S&`j;88W9LJvIZC%8ECeyt5JdG=(-vmXs)iSF@fgk zx*8j3zOJirffnex8Xst(uB!=wur-?3)xis~d$nm=RAP~Bgt^!R7v`ROWPYr}BUBKA1Kx?%3XL=y?CUNcX!$7FqaqVzM zpbc6(oEd1N)(&R{+N8C^j{zCIIII(V=m`xr$?f^AyJb=LZpyQNRU? zBY_JQM*tTE(WPO)#fn3LOM=M#VBk{4LBM4}w0!_@xgwvQ{c$K@Uql_4CG=PwoPpDb_%?9x@FHlf5HFT>LO%tq4=%65?oq_ILcDA?24^{7 zM0_j6QS#>CpeYxqsp?iC%7xMA$6}1N6!0#tD}+gexdppI}oZ#{C!>NV5oL$ z{^bMR`4Q)QGW<*U7>aA@hw*>BZAuP~dqZm9EqS}8q_%H^KhbaEL!H19>IT0e0^E2uB<1%iy4pI8$ zW7|1>aw7NpA@Y*YJs+YVA?bw> zRV3ASF+^8NLidXh)scj5RVBI#=g-$DHLOHe=lX8)TiO^4u~8+uPX30M@JZuJR8M~Q z`|(MWN_3O_%&TB=n^q!RAb!zY{Pbp(=uT;qX6pV67gwO ziEy;%Fbuyfb%zF8FE;}YLI zie}&|BP#s1WBKr{9Qo1s7#|^Ld_`%beq|^|_+w-g?Zf<06%SkPN8me*jxNRAOZ~(s zI)S%#bcHXEpBX{^s+Y#-XR{(C3a==Qt?(s+POw(+!y}>w7#&yP3k2a{@rdvsiRdU^ pIljV|$DfN($*NhJQ1Pem*%|!2v-nx(@NqthURnQ@Qt6Ts{U5oLcJ%-N literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pmu.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pmu.crf new file mode 100644 index 0000000000000000000000000000000000000000..e9659d9e239784bea8700639a09da1459b034e20 GIT binary patch literal 209682 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 g~nT_u-6d^ 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pwm.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_pwm.crf new file mode 100644 index 0000000000000000000000000000000000000000..07009bb8a928f41fb521ed838a6ca76a031791fe GIT binary patch literal 204464 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_rtc.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_rtc.crf new file mode 100644 index 0000000000000000000000000000000000000000..01ef695fd6d76976c1e762578ad11871c7662e69 GIT binary patch literal 204728 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_spi.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_spi.crf new file mode 100644 index 0000000000000000000000000000000000000000..416750501191cb316cf636077abf5a7256b3b851 GIT binary patch literal 202903 zcmbq+2b^S8mHwL?7$y*gC}O~fP*ojfMggg=s-7;VySk{V?w&!kY-Sp!WoCNl?jad= zT|wPdRyT;ae>2Luu8LXE6?4LXVRdB;i)jT^RAf!K`v1Or@4NTh_wIY$v+K|4rtdlD zJLl$e&kgTeYociBlIV<2JT_W?*HfaUXP*M+UE89iPqL!;4<}t2Y1i8n+;?ct)J5}?vzJcI zL-viaY~`*-v~-~IIQB% z{^;)BUjX0--gv{k%9sgdOac&~mC8i}(+8Nr*qFKbJ<|th%#CmU>Ccqx@Lla_>Gp)| zqK(-u0wh({b* z)_3o_OiG_~gwp#DO6mT)&W)B9!wn-~{_feU53*<3?4N&R+V|}Ds;zot+ArBRIk#78 z-*eYF(bB@At-ti(^o$h$^pP1qUGi%Fs=J;VE$vyf^69ymEnAEIQvb-2>EE||kCd() zS?2do&w1v5?#PrM+sY&gKy8HZo4$ii{KkCQ| z{ZLQI>#S!Vq4?yi*V}GAvL@%|ENlPXBP+Wr_jvjrd)Il<(o(p|`*XlPcoV}jlY1KD zEfn7yVz1!+M+8ur*)!EDk4S*8D4vb9BT{d~~zNz{FLw@Vw6AXF7(B$l%!O27W z4CNirtl`$R$19Wj_G!E|F1a~%U{8BoC;#d2@rL{8_SJKp>D`y<^owDrMp@Gw8PjP4 zF0Iw6=(HWq__3bSj)G2o$WJZm)IT`+ddbLNarhXcXDtfOFdi?&%dL(9{gj_-ct7c< zmb9u*_^CZQ_2YhOuTK4#pW3HWKYDnxF>HOkJ<4I)n6WKIFqUj}S?P?l4EF{v(QvN! z5{=16dx^&4buO_vF=8-b$40Y?N*SZR&6}`#o?1o;-+r5FyrOJ2TrgEwuuFar)BeK~#u_T;J`EG{+!ZYu6f`=mnB6 zC}uA!-RLQYHyW|kh7!H)@F^zg*qFJ}ZI2BO)^|c6 zLaA%*Yr5TLx!tLiqJ{)fY0+QFlGGY2(Q;||Se*Kf!zUW!HfqZ&*6yWJV0g5#o&Ta& ztK4urmO~+mQgaZ)w?Eti;#yu{BS zla-2zbh=WoE1j<3J1$)r8{=r<%TIYUYye!TH(f zovz-HGo+vyJkJdsG)E_{^ceR~UIoVMeMX(Q8H}a_q2X@rj?^2`nCmS_Lm4sg(Ox3V zXX0bLM3~ORM98Cp#+4MB*P^cVwag{equrP`~7- z8raXdt_y(fa18^9E`rO|D8Np=(Nau7oF5>W;ur{!Ore|`R)uWL1cXdp&I^!ChC)`D zTs_4}v0QAnpzB08c{q|$_LC6JXuCH=GwObXMr@`OY8$j=c)Oov5=;?ZpQe}+e0iE; z3h-}&YLKUYON*Esy);cR`3V?ca`O@=qe{qR2YRLw#Tw@aq}~9@XzCA;jH;q*lPI`m zr=@z&KcrKk;qR1-tUPC$rI?ZYWRDr0LP6Y=P6h89eF(*jAJAQ{|~ zu6Ww@?cH)`bOas4 z@bzM1)y;4f*tT{n(H}5B>Xg+;L7S*VpZAhbMV06aUJ|ON5`D%cv9O7Clheo~1vcxa zDYSV%O~K8$G>Ed?E76e4D)DsUucXtYR%5a2ftAnshfg=TIg!pF{*M5%rH_0$?-#4R>u!BnGuo~0lep~=1;?hKu;V{CX?9|X| zqpM^p{m-#>tr|UF6&;s*aPKM=dXlJo;Sg#IE2AUL`f#m{qE_A!-6btyL>`4UCUc_G zU{GtU(utP2PD*!~?A@^jeey|Js$-4vaD97&L^RGGy40d&_*8U-iB`Q+i^gTkNb$64 z#o&_?o%EZ2V8hy^+vr@FApPJ5#8&iAyv(l9SCHM)H`tFxu`MAfbm+TGulEU z8yK!d6EfG5g5eWZ4veAj3V>aH+6t({x(r)E=opPoYjile2(atcK5|L4{MIF~WOnLO ztmNirXZA&BOA&@bVv#0_=S(H?p(U%aPoTJeZE-%7zy(;=O=ex)|`RAJ2e|^k)kXKioOUgi!OyvFWE3Zb8z$$iYmFNZec&2 z1KTHIY0(H^Uy0_a%jI)RHYPuG)qH|O| z*lbr?7)nGk;dSzFF?VY4uP<47$-%kZv(d-p@Yxt`q6LWYbYid`Jk3VOajAfZDgQUtzwYlkp4p0t#gUU1GtO* z(ZAcQd~eChD<=0Hnu^8TjdI)`*wO4n9Lcr1RZxfE zP4s)K?ME@ryD_-0Rvr0AOIFQJ%^_@wn8G@nwsbCfu~bzVzA!pj0=L`c4gyB&qcc}? z1i5#~a%3ZV850yN66Pl7qwA2cI_AK#FnWiVFnu7pMWT)o_2(A#evL{?G%6B^`j-Sz zYLGzGo7HH`@<(JvPt9=<=@`#*aY3ePtyybS%ZN`!$hRI|mt#DRZkKdKxRZ^)V7zv)1NWD<;Zb_w*_q;?Z!i&Idq*BQ{ zmPj2}yiZA`l6T+;3V6LK$m^FbuVZEyv?YH1Qd#0#Y^l9$DN60rw$$+FmC+}l(3Bcy zE?sKxan0OFPlGgKR}?X~fM5Y~%3r z#GjSuXY$Vrqi@JR8`1aqr)o~GWWoHKrQ**kquX4;a6Z-r^8#0CDp5D5b*WSq%CU)5 z-JGISDtU!hrf_w0Iw8S}6(o31OQh=NB%-tmVO;SZmEi5DYFwF0CGOF#auq^c>3aj| z9%o)BXZy-zZ>o2}?oA;uD%1Ibtc<3EQOd*C0U0BPf2E)^#As-a({pMLAo zW%Z_tADVuzc1P4s%I)D?$F=mSr7J7Vv3fPSme#1j{ZlB23I?A$XpKn`1uW?TVRK<8>ryE32~ z!HI_-X(q9gnWl2kt&cQ^Ya`gv!D^Tz_lFl^Vx#!P;nNJ#W`{IhZq+gKDwJR5F%aRm z@Tm2KdWu8f3K}cJ3Rbf<1#{JcT*Uedw_J8uO)SdbvoT9OIdsZD**OzV9xh#-n@Zab< zuIi?h&q9=4ZdGopkBf8GPYkne0UqKU8&E}@a-~xr*Uf$+pM@yT^gEauQ4rj#bavEs zsT|#($3TSt_B*hkgE2sHYbx#t9F6H zdDTKpM0(xfN1L(bRMwQs8Jd+S<+B!MBU+zdkQk`DSYVDeSntZFyYm=`@RI<;aIMy? z;-5lzD35^%Oa0`?JAWyba#I^`R_3d~T51#0n5 zOXuV%`7A^k@W*sDU3GDoraU~%BE|BWgJojm4{#CdFT&GwJSV?k*@{Z1H5{$BvounM zM-fMcMNFd={cymu68_jG#`dHmFbn z=1LZ#d_YWBai-Z&y6qjc2?g@2Tn=LVF3XZmtudm9$~Wb+5anM)5Ff=+8XT@7Lg2O- z@OO!gTBNlr?e0LiT|=yZCk0fTI&Re}or@TqzE-)xDsh7Yo1ma+7P4D!n~5kBH>V?DYKA+h=DE9h^RJ zDLgp4ouGKO2Y8-}fTXr-gW{S;c=$j~J+qf=Iaft%AT+c(n>i}$gjLx;84(69LABhFok`FCgp$?cb zdcRR^&wzXX)c%>-tGm1RP9C^)Y7e$@Pc=x`?o<^4eGcp_3-%EM_9C=jt(tLYp5POW z^v9O{qlW!jREgG&ZOggcd#Cms+Bem`cyboEkY=&jy53L`$=ow{F}xFzFpY#Cpvtv6 z9N>%X6HWJ>R^z9PMlQg73BNPE$x3|2NIVZCrIx_KL!~3xL4IguK4)Z}gM4Wje zLEMvSd6+P9_e&4n56NzLVCG=-brhd&?i)DwLLE*yCD$gealv~YTFAq!V){pI;Dv4xSvwOK@2~oM~C+WPOpyRiIhGauoEf$ zh|KvoTcVF9Qnq5h#^>19p2tY7_b^ao@64m67J?SO<<^945SP znGF*bqiuvVg|((!t#Bb;!(O8RfGgj|(e0l~dyrOZM4f~%l@}005yH@3=?o*neT=sJ z{QH)zhMH=*Q^wgDBpThT$%tc1(YMlxrRYCo7DwvsO7zxHc1qD!shfI6+c*njBE_pk z&U-NO3hiXAG`TSm;O)iUo?lAUN@Jv;Bg@8qTcmwhzsG^}`<5ML@`|JR2&DVv0S$kFitCNK&QP`3E#O4fiMD_Rsi#|t&Iyycl_Bgx+ej|& z38)d^bQD%ND6jJWPs{bX_kLSXNWo#fGKR6Zaq5%-v?D)dH2R)xS^u;gOW{^)7q%6S zHPPgwDy?0JyeTVqE+AmV(I%5`T)wPcLnnz>+HYLGoDKKUEKL=?e&cf2Yo2eFz7a|b zY^0y^liIBc#)-HSDz0j~gUu>0X&C+Bb6!%BSfBKhh;_T4M63_{NyPfBmsBFwC;TL0 zeZ)^9)`$EgV)2-uZW^?{hgcu?lZfSKsE1g$`CP>Mv~9g_T)wJYYZL6ExVNl(<8s>p zidd+ip|ikG*Q|&TA|hfN6|bq7xJIx#O%HtQlG{XeeaiOM+m^4cS8C1HXeYYI+H~9U zRjsN@J42>TAaV=7V`4j3-zM$su`T5`-BQ-YeCq^X3AexEjtezrG(1JxQ^7HYYPE&) zobiwXBP(sJIgq&8PsB2LtcFey_i$vg(yr*#n{C&)4c({QZbx5|DQaxLQySCUu2eMq zG&Q)6+R;Mfr6;;nvSMk)75cd{4O?bR8xOuz>Z5yX$%6srMkmMw96D3mva!UP`e=D##~5&4DB0Mze`9lb=km2+Gqv-W zxXZ7*Q?#LBPa0dEw!V*pbUdFH5g>>w2hsp-j8<#g<&drr~#kS6j7C70RHtt2b;{Jn-MQe1&SGx7kL96xEV% zl_{#dzs?rKeY%r=+vemxk&`|+K4zp+}dN!K1*^%T0Mb%tOVZ-A3en24ZwyglE z1Ld)5wLU(qP66u@bE!kobFJAAn5;P$4=MG=;3(XpxKli^e0gPXd-OkE!tf4+vFu*D zxumF#er(uiz;Td$!;*)VFB=@dl`J#OJ?kNni!WNs9x`+E^|quQic4yj%_>COwe2jw z0(NxcVsWWO92-ifmLi@iH)TCsscN$y7B)L>ao4U`-NtEF^jLUCG3K=^*62i>H~YLD zmabi~3cIVdRtpEn<2H2d3IskdB&@aBxpu|M>R4yjaP;P6(h%ImcnAj;0w%-gbC*i3 zaqq{uH^DhnSFQ3TGOel8{u0tU$49Xz6m_0oo}cGetXQqa&WQ@nlEivmv0_yP(RXyx zXG2;yE-)euEp7-W4O5AXQVHoHu%aa9WLi_FUFKU^(pLU$*vhyPZd|dZ+U9N#K)-06 z*&A0JrBl_!#7j`x)Ei-{ISTAr^o=W)bI>}IMa)K80H!VCXG++Ne+p+j?wD_0 zv7Bzr7TYnAfV0+!1{?5oZ(gyYLY7;}LUl-4&XW_uzrlrFt?iFtZLv@GwiPQ!)qv~P zL2p~Jy3V9RQC%q01so@qdT`+0ju6xWPOa(PVNG$qZb5C-Dp)Cq1m044qU}w$tXMIG z?VspQ$xpL=~Qy;0p#gE(TEvU*J2wa~dPqZ?T(i^Qv zr1asgiZ9iV^VWXK7OZYj1?(lqp#|bDNA#!IwOB3eF5yyjJecTOM+LWVpim@2xPucI zKol7-591b$YF=(AM_H<5Hn5Mdgw^^qPGu8Q?u|)Zt9Vr-+nHi!KYzcMTCI$ssqKJQ zE`h6+5meMLhDtvb0~S(w>)yrpG00#B#yPWisJMH@%Fa#>sJ(s? zUB@w*)KXmieiFGRY~=u5xo+=rhVhXLW!Un3!|pML@j|#R*n3v2)JvB!+e+_Qu}W{b zib)D-rfdAvX~nY&TI>JhYrTJk_7>k~wcfvCrH)hWu(<-0DzjHxJMOnSe{5UQ{VP@* zPflI5(|G`zb{MC?r>ko17!Gr3c2WpF11zKjN{acHOs!~KahI8?Rh@c=&s)=}pZ8M-b?WEPqcv{4f>1_W=Q2U( zU8TJcTNs+vJ>sDVgDFB$OVk_+-BQI&KiOnNJ8mlVZa=l8dH>VN(}z%;qo^G%zZP?F zK_@aC;1Z4Ylf6U(d6Jjdqs33eyspKMj^}lyYpK)E!9%6(bO7p&6_qG1s;hTAR3be` zV-ymNDn{~5qI%avah~cW8uLY-z-i1Ec|xMWJjoRvJB}%nullJ5^(%g=ffX&02nP4d zK5wrs0MS0l+ow}S`_xa@sEn-^2P-CHGATKf!kj@y6QZ* zc3}lnzrmdsFJS;~s+Ul~KAM+M#n~n=fe{xkVK5rT;HGP8mC`bZ+1%QNPJxNr4hiw2 zHaHEOOe(Qg3eWz{MvRq${JSVEWYd)vvem*un`6~r zF^PH!MQm+&2_;$Qs)a@^pQBec0@W^MBT!9J-D}b{x{?XSNF1)^pw5l4E<*T&tqbVd z^T^V7-3gxn2hZmG2)le5^w=~97V-8Bu%Q;IVFV$qSjFq|S*YVJ?!t5c1)h9T3GS_r zG)p+^6e|(Ol?{T&LM3lXDUmF2eS%7gLdk3LS*YZuuo8oUy&LVlvQ+M^S)>Rn{@2L+Z*jhwx_#ubf{U?$I0KEO(yccVlzl1 zZ%jxdHk>rNr`sGJw#bt?bVBb<8Exee;|yXC$5uZhhfeH0VQk7HFr4faJzX63Z|cLI zD>JFYJ=z^kvc;ifF|MRh2evm2>e@^yQ8xupl`Pt1x*XVj;&Mngj2_j!NGEc-VOTmE zMi9FgWB+9io!Bo9lre0hJp6lmNY0c~U$;D7sSJ--YaLT2+ZN!Vj`LGCcsSA5Qmwa7 z<=-4c{!})Z=wC=R?pQi{Mp&|FfIpp0Ch!--z>tRLpB$_D;iYsi)m1UUs)7B*`7BiM zw<-M+B|6<5Wi!RE$VIE7lE**=Ps6zu-S3Y{Az)6nS8gm3?!y454wZx6JO;u)B>*2I zU=5vYJX^Zs)k?iFw5uJDh^H*TLnV()H69NK%YFOeoXN&k-AJpWrimWT<)Du5r#iO4 zK-@L0VZ2&xj^iSZp2Tm@<)DU72Q*j=EZ&oycx$(cjuzuTJBLp6%Tt}$$|Gu%tmbW~ z2i!W3d$2e$X$nv<5dBf9YIY0=pd?M-rsj{>^j$f0f&ctNTMOBCG9NoHUGlhiPt+!#?kOx%w!Mepc@Z=^C{>9|ag z#KvLS%8s^BFGUWLn2Qi_%QZ9WT?yfRY>QKH9YB3PI2<@qdBazmyP<@h}=OpbGr zcHC7tkWBEmr>3x&j7u3wk5Z9hzu}*=$pn697?@r|dbS5J1~Z%!P>m<;Q93%I(;lUz z!=p@2DvUCzdAEiryuyFn0zA}lcB%n;I5WuxRBIP zEaF^!V_<^OhN8?V<&=OR64z zmPsWtUjx#v$p#L6P8LfnZ(vgtddt4p%eLPfAEp=(NSSp)T_px%b^qdnlLuy zaoEJ`P)aWcb91kmr zS=*LjJgy{WZAnkg+A+{vy%qU~%Myv7dR!3j)$W^tXFJ_l>=)@jMU<>)^ zuCV7S?{Q#{%IZq(H}_Eg+#!`esAb9@X8~uwnpP?oB2FcvNV`Qi-VcboBFJt zs@e)u8F_j>3$#h|gpI7Zvbpv&jU0 za~5zBhp0m>XLz)-L%Z->a_EFUFW7RFJdTuPVGk**#nmm<4RwAgJEUgmflTZnJOSlZ zCtAAN8S7%7vTLTIxqKE{e~n*m2^0)n-ehFSJkg;?uf!@V!9f)t_J@0)1HtcbHoz8V z<2m^()bUpt+0ZCBW@MkEU^!b8?0+!ede1^kRP+nKt6PBhKj8R#`O%x7d`TRexFy|I zFUV)1nw@@r5-4~9Fh@y2H7)VX0JH2P6jbZlm8YZtHziw15o<9N+0*h_n3D@~loYpN zL6M_mt5UKfpM^?Vc}lh-P@bb?i&8S2&q5{bJSAJAALk+TDO&ZjEA*r$|?^#6~mWbw7Jp9s}VYooRh>E1r+Ygx8(yv^)mFpOFo}1vd&Z;q^S1UH4{| zdrUTbKTgvHc;7R?lyb&4%y83O5s8&ux#$V_@MtE*riVm$5S8_3-n^JO;u) zJ{!IV&U7Zc9(%I8m6^@5yA|fL>~3Xdvg~eU=CSNH9yQh^wlgFh z+ZkEdy1k6&&}sKGGVLy5F_eX^XQ{;Qm9R_uJkQL;E=Ir1#MUikXAYfqcQdgIk$61E zEC(5jLIcAdiGEV)EB@?<)t%%Z{(tzhpU;6ue7$aJsqKyl=xoSiAijPPnvdtG9a;|o zms-4nx5Tnp_`fiRPVm3+3rEVsy|K?FdWFNADlNP5_?88^sORk&#b~h*J@K?5P=uq? zU2G`fJ5}obnptiv#6@l6zP2UIU)_8S+^PW`Vx z{5XSt`U2>8)O?qF+Aft7hl&raWMmkhy^|UK!6Nvm_TH=vJ3Q=jWMmjT&NS7)zP>nCYCfEm zVGk7_lCv)ZCd-A*tTCoHdLOnh8ke3<+D)H$NhjpENy-x zWajS!s+T^xxa6Z6$M-U+g#K}2AJEE1SNckMa#`*4baYTXahg<;iTf}9R)8Sm*pg>1 zb1~ZP@*j)i!AvS)AM(w0vREf4eE~i=(&Z1m;5a9bf!Gz_=_R&Bzys@<@Y;JkH;;kv z)ol2l=$qNn+JQVTkAd*DY>v1ATww)Pd`JZH5qpOc!iTA0U~*}|-S zR`bpb8+}e{?k<#PVqz(u+}ULhD0Okqx?zWpPc6hmeP2jTG(Hja6+1}FOR;m4RM>@+il8G4+h z`2GCr7Q;x5FIy=8e9GZ8f038UUaa-!i{PWu2Nx&`>U>c~4xn5WYZVWis~Y_5Vi>9Q z%Nbdfh&aXUtwC*8$%J4{r?p*a=WM!majaCmDL5aN=y(WJ9H&V-SGsx!#@hPj{*8GI zRCGehxpD|_YrIV)nK!)G&MZBc%RvPXrJQQ5fM6}S&S4Gi_{o=ZIjG?q85$G@o`UgQ zDVc|Ou;gd;#J*~hg*p<)ni4E{+v4#C;Ss`9)KB$w?MSNq-TN2GOSS)<>K|OYrEqbT zCr7^>dA0suEs~e|f0w7<;Ue6aqu=IVd*r`ZBro;u?=iai*Q>RA7RgKfzsS<>2f;dHNkLPB`Z1xAml# zllLx?m->I1r{Ce?bXbmlYp2%#vqkb!|F84(J6xQJINS99$NK#r9*V4g%m(J06yHB0 z3EFbc;U^j$k6Ks!uI3fvJbZ?$T zNgW6u=U8Oz$HQ8-jDCDX613=Nc@`yg;Mv?9i>&=vpIeK5ctjGk=)OFQk~;AGU5-W8 zereHv9gzer`gxv3Ngeo3OO8d>{(>l@+?Jh^phdYYJ1LRhvaS8nqMzjDAtgbJ?q5_H z86EiiX>y@x{05FkDh3iC_dl>GPFip%wOk8e;^B&X%~-gZo0Bt(;-uy)7SOCP@%mN1 z=AzYna8aDpeB}a~6(-*9$k$x3nlE1zCpC+27Ntjf)S$w|iXyqZOV$bMn|}J|7sE)s zUrDWb(ulYskgpc&SgrPs#V}IsR~JxAM7&*+ua;XoDz{%)3?tQkZ2`4J#9IXUY74R2 zFD{0WYQMgKS|UbMZt14q$>zEVJID5f!CUhfsOA>8wo4)4Lw0uQD2R9tdb`p7U+%VW5@cLzwp%!Ygjd>B&EJ+uCG5xC7LG3~&zEZo zUpVjTALu^fsB@A`+-D@swbJn5?X4CoiJkvWOK<;+)8I)mfu9}#*3y_X)4;e1)oJPL zP*2V#6Sy1z*3xL4$%esa+Y!XzPmU$G=P?lc)2W8x5O4&`UTNd*Nxjys^i<3EMd-`3 zh=je$U1{?qF$$(2OBQlAi%7_;(~wFMw*^y>MGHBXMI_`kX-FlBn>H!Pf`y#VA`pDnv2 zK_lMl19*_b;jy%R=$;DiR8kB^91{#>?i3G~&H1fCn13GtzkI zj|xw`&}8vQBi{7^JkW4;B8`X6sPM$AOcswc;{9y^4>W9xr}5Ae72ZoSXvBMY01t9_ zm)!bT)`lLtr||VmDlrc`AIq1;8L2dC$)f&yCY7k)4xlR8Xn#PiXi>%9fVD{j{wGi~7w>Dp9{1KvlBQj6a(4x$*8G9A;Hf=VlR!S@nlnD~Z!P-h`kC_z1g( z?8zb$^2q^6O5*XWG^Aa0oSH=>9{L&+i>V|{g-1^h=G33+QanYgz& zUp*lWH$H7{)tdX;Oe$gj6fjrGMz09SwJj6zSS(*Dutg zl(^92KuIL#S%KQ3B-V5GaYHL*+SJ#>B*Gnb&k_qM3{T!5TESWPF8^^|a%BdMaL@M# z(O53pn2^DjcDnqh*Eznfm`1#-5_pD&RgPco?Bo?Ydi*hyO3Y=6TCuWt=qP|{2apFc zsYLyK2vrRsFZElr{-#vdHX-p+Cu=~GiTgIc?gSa<9XxXlsn*cdlo&_^m9U9{#8EMj zBvJ8Qt1kbsvc8>3CF&3SLIA3f#p=Z#C(#dcn{Qinh!FSIRO7thVy7(0)T(sP;vhbR&?ZN3`Tjepbl ze_x1+dcN&qD_T#C5Pyeke;P%7iwvstZ>sv`LQGWk+q5bV2_M8rJb9CMK7jp32d={#BVY08s;`-Zm$EOjv*#IT_7nD3dpM^@q>sqEN zjkx-SzM060{xTl6WcV>WRo55hvrx%oGAAAi&Iu%x=uho+%`aBCcv8|7w>H4AP>Fa_ zGQff-C9M~!$?yyY=u+rVvUpN9NhbI!-K3fzQV`oey`Y)61Czi!|p)jg`-Qd1VDp7xxf!dGZE{v+rUHv?hN>qM_Td%4%csc38 zxz==>QJ<|;w@CGE=EpCjrv4_KE}Cp9uY4{__pfqy)*9qVoFeQf=pQP;9`P|hVKLGzP&T<`%~Fu z0`E%{f|JH-+XvPij-PZ=gGwcvOyH*_fSojASa#}RX3B%;=lWhXTDxw~lld%Eu-Dh0 zK*30yqeLI8o62X=#p9KMucU+`%2A@vu3nPQLM8k2a#F-9A+1Dx8`TXe&&X$?l05+> z4h6%r^_*>;sE?|4@og7=V2LB-w-#ceqW^SWTo4I6ruJ%5f`OlM;1w(C5|=zOxTtJ* zVl-w`(q{gP|4mbBC%&&SN0_Ft#%s#^GjqfEfyKl;%5$<1n<6=47KlO}L z=_X+HtuTpb|LGfNq~z1@v{@zNg-B)G3j)TGM!1&*i~}t?IVhu#6U=4Mh<8m8ZxrKx zI=2i)m{+2Rc=GGroRw{nF7)C04zzvC+h&XGWrFJM*t51RbdNGVt z`-e=m4iQd+jTpqX`NQ8c@))Q_?4_p=FlE?rJSOtf(!62Z*=esXi6;v(xTr{clOoK8 zhZk+U#pCGgY;|@aDpns<71zHo8}*&*Cd>>pe0#M8{47L9__7B(2>ky|_Q=~vax z?#tz%ieI_KQyK#cuT*j2E9_mRAb!Spd;uP65nrW>wMZPfG?#SMYvMOAo*33+d8nt9 zt`_Qvc_Q)IBdKS&ts^}@N_PW_lT7rViXq$d5<|vG^;8cbsXW#hb+xf-AtowWpKjkC z62h0M0gViHgwX+@S1!m!Wv@xM4<8F#gsC=04mB`nP2!shvP=yJwTNIsngfUMf^E!< zEn3IZ7vQ0mi?iyUgM7V)K!6S1_*R$&^GkE+#24pflJa=0Cs<18hVhAkO}QMzKQY}C zRmCd|c;%@9Mb`tzEnP^j$!DPsu|MeNL7~Vm`AIT{o2D90UK=hVMJK#;$wUVs9goG^ z7>>j?PI_-9mAFrFF&tkOU&KmH7kDA9i+=|AX?YC9zCbLlVw+<;JN63j?p zX=|6HHo3FQ9DdrEMI_(}Zb|A%V)bU-c}u9a^h#QMqQ;{UaK^dwk|vk9Ha&jt>9T+> z(ug-3z~jqK%UxB)c(?*H(bSunU(2Kt^Dfs$eOa95v;&W$47zW^?a!eTc|M(!5*muy zPFfj~9oR8gAJ(5>xFm;8?EN8ZEsut42WHycu5D-2;Qbi&A8JH+!~#6j@i^axBo0RIdbgmC2K?bDm}vX0B#>ISC(2X%bZwdphm#zs5*`P89U!^d(ts6ib3 zN@HL@DO-bX!5_@!poZJC@&GG`u_DXRfLDujzZOoAZ=vF#hMTf9kOQ-(_5GwgK8VQ* zHc$z!IO^#VHv$1&p zBVj8!sN`MYCZ{pvGiF-8S#GK3?2f7&N|u<Ss<}ncbTh9GRA>cwr0Defp>-g1Oc?^WVI|OeK z;5^v(SmTUcFpTZ-#^_MFRUIsk4eRY}@g8d?AC-ysShM)BMzU)@kB0+{d(mZfK`!dM zI@vnwEoHyO!bvi_*6_3$M%K_oJ`43cGu?cY9*qJQHlYNA0knkHrPwY`EMWn!v`vuF7z&TO89nky{sL zqq3*^_5{$-J-l4u3NId*#{Rtd#iE@Stj{BuSOXH3`R9`M-*B5SHF9dx*i9W zyvHA!eGVBJ^fb^VWsx25y*evRI?)d~k31=lt90JTW@WkcsKCXmRGzS6Ai8*!D#d{1 znO&%OL>?uk=`%TWf?ttgI^^+)K*IE4k}ogY&H@DH@LDj=>4uJmxCHsg5 z(a%>9Si93XbfO8c;&6`-9&c?Y5F;P!7qZh_VSOMj#(mmn4g_x+SmanRi zS+is1R!4s==TjLat2wCT3mG+|IItoK*9@t>s%Ac&%Rvoa%+b&bA1hmf9#%h-%Rvoa z%F)n+w?wlw=#llaxg69Wjv9Kci{((lkfu@7WS3!L;LC(F^e+8(aexWL7kTxItuIdoz_(qSj%F{s&*!qLQ40j1!^g_x-2 z^{#G$NVvXZAHgF7?=!YWalv%7Rly@0+V{p+sg=gbMeNO)7$uFhrAQ5F2dSXX^PE-Dk@ z$}kqzTtRJcwa^r85uUvu7q#`faZhSjhPTC+Zzk_HJMbR-V{WIEaLR3qGd~HnXALY*<|9j(?x5f@x7Il zx$VJDj4M968W)10688GExtfagZVGjxYEiGvq!RU|X;dwX52U70d6m_afw-U^+iIvp zeN`G&Q{{&jV>t&ZUQ+Oh#Qd(?EB1&8Hlz%#?X=k!_e^3jLnY{6rw!HADB*E%fT``Q zBlnmS*tUM}&nh0B$WeL_isf-Y#5#e_CSu2(_l`UUqJPynfhhzWB2N{FnapVT>ochY zzByeWS{9#TNp%WRVv`SMlZks}x>FcwyxnM>ZsrBeFX^0#Pdf!T2tVg%%E!R-SJrbi z@^me$o!DDBI)_g5qPE_70<8wXuN3hrUU@?hcH~C=`3f zECg#;D*7(NX<0-9o+0K9)@LkO?YE&e2MX(2_A(qQ(S|xkcLdu%K`ZOYK6WzYzCK_Kst!=bt~US(9D0=qDSM!d-Y9^`OGJYC~3 z+;o>8WKxNFZ=lANEMh7ND_dw}E&Wj~aT8gWqoEOTd(uix!`76W4^iWsq(;?G{Fe^Z ziBK_76CA|8($9;};mx>7c^#?~q2iQ=l4`G4_ zH&0bT7hry_z_f6#3Z(^dg&O0Ko}Vi)Eu5=DaiLu4 z0usOgO6&t}DZ!3-Itl zOjISFZ3!7&gs+~fN*ACwnifLQ1t^ZD1)1d0v;ad%7hry_z_f6#N~HyIRni5RpDQp? zRer8Y#f5UE3-CL+rCibl_`}?0Q7XtV5kocYn*PV$^ik(pND_1K8Rx?Z5>C5WhmgrQ z>8kz_>>Xhe!QSVC87cWmQi2VQjpebw?V9I@9Aklhw0 z5$P@Qq;-;oj=oXQU8# z^z7SJgP*T{5N<;jk${_h`>Z51d63*R?y4VzJT{9+$di3YD~YA3T?DIA+%d)`h{!B| z5mvk+m1ZEccuF(HfL+lfJewB-zxYM?_vSGW{zHDYjHv#FwSYZ-Wpt}%3aa`|1rO!3 zP{mTW0tldB0hr7K0|fX-r;jQ=mB&B@Ur6P_Az*7d1dlAlVF+=c#+XNnVIcgiL3qs| zSDcjQM-%yvc7MZf(=myV-|^eDA;~9W3C5c@_#I!s`Iz(e5>!Hd*7^576(`T_J`^cj znBh0Jsmz8RZT-~(Jk;E>`ZIq3v66Vb z%!6!BVA(uTHI}Z49WTJoaRdA13SG9P2 z-mrr}oP&ptF+sDnmVg1m%i}N};lhOi{9yGKvxtP->KkAsans8ixe%&lfLs46Y6s)V z`7DGl`wb<5f*mZogkxqr@>XU1R4xZqh!?HX70AzKIOq?3UP&@1n zo$$+YIjCVaM?(o0^0GB(-&<@Vq)J&k-eMCW&4EpXYz?|c?9b(39_DlMP{6rQZ>mKt zVVqJwO_y7j$3XmqljR{qZ}I03LDZdXOAejj=eanSDW2H8tvK}L&0PXpcQf%~UqZHD zjcX!KmZamwzAS9r!JeE$r`_dDyZbN%Wnt^C^^_bsu?I4-d-2+A7`xTbo$BlyI@@7_i;;Pn|Ll>xza?D>Qenxm_)$e`7WN3f-jl`L*47@|3#QYu-~M> zD23Oql3-}0x}E+!Od{BWDKJXmEyg4mdXw%@;?)f{0OUoH2=+h9_0(Dgc-JG%PBQ8z>&&?Uap$|q-bpy7EQrd|$We_Jgq zTgo?Elg~ovjed8DrOj_V5a-R=(A=qwG`s4juI6{-a!|$l{5jjlz<`vkLAT0x=5kPj z_%w$pQDNi+6jYYM2)uU_wWg zcK?wG(28>teYsl6)_{9F)}_J4m-s0nrC5BsMv|!F-Oi;Eq^RONd7F%<-1G~K$7B%+ zc#`vZJV{&*wueG2AwD}R7L6W_fOU5$MAGn861!}$>6Ny<&MQt|Cdota)eN2{O)ghJkTqhwjL9HkrT&15J=-jSkB#8>utikqOlnBuOT4sJ1j2wPjB*5xApX zFYn;JN@eg%GpU6Adl#MdW$`GTR}L1{%yj2ulZjjL%RxwE3&%#Zq)PbU9lfu5T^<9$ zU*@;K7+fL9r{X32Ahv>8e@_hCO){ZNVY@-bEM~(L9`JB&Tp^2_#wj|Xf9bdK*lK(# zY#i;;E_|FU?!bvRW>3s#p@xTt@@7%wEqAA+vvUv+PUy3t?+X{aW}t!(hYMaY$kUh_ zp3nOu1FCR-pOlP=gpK?`12S3?t|c_x*hH~1~v$;z!N8fqz~WuNbt zq9hY{yWc_t8He<|77~*N$INqTKgppJ`hLHKNO}3KLTU7%Ir%8Q5tbwqd285cNMlzg zY;@eLf1X1p^n)2jvsu5$Z%{Tvw#D6=$3XOt`t8O;kdH6wOtamzOp6moS$!g5m-{Ua zGFlR?#+&(g-?cjm_eC{0@p)@PIwB#D_8~1%-mS1w?GapFR+zW>jaZ3kDnUQyH)2P{ zQ4()HRg`$kaXf=Y#Ao>PX)K53O&YH?s5{yv88qVU58y!#&;JGR8rtXXX3&UtNeHh| zLue?C*J)_`F3O-0Z+8F>ayShXz%$=Ap30yRZ(j%x-!}e}tH;g=4(;;8VtU7evyOQ5 zB|# zf0f5TaPh&z6avEJ9y}U>+a_1FCLSrLw9i2J*SJ9_#egT3ZO!oogv7@_#8+SwR04~y z!1`2ti#MRj}2Oi9}evhNFDh>YT96He-<|c`xJU$H_#Kt!jbVCvE?n+rjC-%`{Y|`OQ z1h82p277r9o!Cc(u(doMW%S1uRqF7!wbi#|Qi=NkH!H|I!Q!E?oSAFhmPsY*yThoM zYbqhR&Q62+)=Vln-skl-C=P1anWcdo*b5A5P;E(T7|rFNhViflje*-F zep|OWG&%S~4xQ-YBUXM6Vf{ZOYSDZeC;nEA8Xk{XfQLFxO4yLVLD0|71N#)V=y>~I z={P5cPW(!szZ!XjQquhuR};+lD88OaCGO!sA5gMzab3OgCO0iEr~}Zk&3EK-5dEt{ zcM1co-%ZnwTCEMl!LV(448%WQOw&mOc{oTteW5epiu{l$awn|m1b?n5@&p|lWUj~^ zEiUqPnN;E)D~jBcmB+Az#pTMVS%HbKOQh&T7GIZ0(h z-@XwT5#JINuZk#XMJA`vx$D8f5qq|-8 zaf~W%k~tbucAqYZ2jtEC$b)on5o zYXPNn3%m0#32Wzxhy{{G0EV%D;QyjLE-y@yfXTyAN)a{JTGTr}y_3 z?DR|eR$Szfe{aK7x!%~f6804fSe1GSMMOcpgc4rY@)CM*tjSC0#kZBbgg%V!UP3=^ zRC)sM|HdPN(IMox?Myu>`NS7_1Xtpn7j=K-UbOc zIKzgAkgEMuXBX!k>f0OK28M%YPlmj$Ri z(JhZRsYmP7v4eXi=cnLsas;6IV{n@+?y1#Q9U)+B{fX{6Tp!@hHoNNsuB%mR!?+wc z(#B?pC=K%RsjMN~Y_cN^6WCSpzIS;XkFSlR?rc^BalBfoH>$1CCXP(nxy7Sb)#(!0 zZg;;0xiW(Dk&n+J73BpXA;s6+hfzf~Mw*}v;mE3&6L{v`u_nG?(CrNM;3?-6ad>pX z5U)-XW62VlYo=rg%|AtqC5tG%6fxFWL{CZ)W61(KQHmH#7SJhE#12n2a8m%1_SO#z zh=qXG$*+3MI5#7vw1=C6<@#_}RVZ3QO4KxiKoPh$@M6D8sBye%8o*Cn`;2v}+J9Uy zy@*y}+jGp1oRx7qD3m^elX$jG$NZf8Ho0briHMXk_Pgp0H10;FhD|Ly02s1v_427T zL(t2+7T#R8W#dsQ*uAiWhNIv_=dsb5Ytd_$AJv|poIf--G6}mr48^+VucuMlr{*;g z*DE&~_SN+R^NN?>*wwt73@>d_Sa`M~zp31Rl?Ky`I9GKicwdXv<$u>l%uYDx4 z{@vqNjLhtr!j{2io3gI5Z)W#p?U_TfyQiWllv2#PMiB;QFUOpJyiGl-ecANE_T>J9 z`=)UJ^F*7zzI?^h?Bu0WhQxctG0^(X?DVCVPR$w}SHs4bw7Rl)^1y+qeP|#j*uJ;$vXJ9uzv7DSxh6sf~ASL)Pn+kzm5$rY^sIBG*@>7L`(Lfqt(dn?+$jj#{t z&cvHt{n2!_(yvzVHB4KrHo06ul+yMOo6MuWxISa~+13pbuAbS>!8G1CZB@E>Kvtg5 z7Zg67iY{%H7%VM^cTnA=q0#u2v!VL-AzTMZDk2FZBW^4O(D((kFQR1i=em!g1?p^E z0U`BtYA+79rc<}#NTSWOMJSf=0+>xU_7fZNcxwo`ijt{5&KIVZwbpuL2Daiett09#E3Y>PS{!xsm+C{JCbrAu-fBTepsqh#k& zQz|b1@SvTu0nL@6a-)H8LIa=QM6CsB+Z)vaR&znxKpD>Aqy5s3F+sy|MJ$K>wr@06 z;J}F8LuMovtPJ&HX3vo7L)Xk8^<$engR}+VwhYo%`BIl}#y0Hj2D7b3j^Bi7m7!u0 zO)Mx^g$s(ujcol$btvXyPxSL_VlVEPWJ>no!?#|Wj|&s!O84P}Oe)+6_}oERe4&oA zCudSAE8>{(pl7NW%WuXea2U**o#4R0{I8ir4CZfj{Ujl&YT&?3nUSl!DL9_)@pA|$M z80`$ni+Ro(0Lxb}s181wSmlUk1Y%;mZs2riig510X44 zELntyks`*DjHRTAv19?;^4_SxeDdSd{PrWj&jJq7V|kWwh#t$c zn7!_4@-Ir-#->eKvUt40_8bl)uglwZ8CTvsW>=9%aeY!N>h;@%I+n-d`duzzU+T9B zO+mViz&##&3UBCQHDCXOKZG8G&Z^BN|) zyHcg9qet$J5;CT$%ILw&nk`#O&N`lK3G+&}Y!MT4kgD_+;Rgh%%H~3rRZ6xXJ%3Xa z#xM+gNp}-24u*DY5PA)+XPoN@-UMlklKeBjy*jd<8RU5YmLceLs}SShyn*c@ueEC` z?|~S)m?J6Omr#D6FYd@j{Qvny1-eu&zSnNRwO1D_zu5)lNLRD+GhHjw1vrjF{al_Q z>|~>a6rugHu}*f zFrlLdEfm|C>yYK8YbN*X?jk5UiRpN~F>>V5)Em1HfqP3h_7um5Zrr@KJ$>nc$$f2vjb3acVK;6@m2_~= zv4{=QI6P((O9-o`5__<6wc#&@o7s(3`0G_(gh1KV##T#tm~L==wAPQ80%Z&#&9Oy( z3Q-S(nh9GM)egc@HviD8C^WrW=x&oo#}c$HII?CZHUS!ETs+JyBum|5cPrwnA&sQ< zV?~;cTEZi2A<3R@sk;T2qOxdx$VWD6k9?6bwzV_F;w|8jYwKnCq@uhy;$G5*|qC#lu~IJrbZ9VA4E5P17{62cCSQ!&?AmVUiB!j$>_m|W`)WLpVS#_U` z)&1D2`{ZV!?o3Y|KC~;;of1|T=j3xS^xbGBCaBFXl1T_YG8fo=h#|fZLwpx?qalvr z2a9}=&xJwaQvR~d_FgdRBK`8_)z~kX-ZM3eec)3J^s(?VS#Q$7Ys1(v&et5yI#*Ks zIO^vRXu!0y>$$OWDz+}x zeQWay6~n(Skuro2)u8yvv;13|SE|y+dt4|?CawO~=2g0sa9Ybifo%nI4A(%U(0W|Y zwKdPo#Pbc?>Xh))vDt+U&TU;9#38ZNKO#@taWl-L7kftVbd+1wCh7g%z7eczvKcU# zk6^zcn*p=L2%dqvFrSlYRj zm?#C!&?E1pq~UuY|Li>ZUYvBz(ccSsaa|^@pbu9tbL9IVzc){RKdyV_$fK6=QJb9n zZ^4F5j{FwLU*gWT@y=Q){&FH(D;r{~GCG7K0QMGbh-W8QK9~=Kc0GjVWV;jNlq_bD4BVHqIe$q6Z&WLq{UZ^Lhjh3H7LaQPlfVLzxEZpSQ{*o{h{WGR! z4Yt7&^dQj*s4=v0?QGT&*XFv;>D~t@|U$Lv3UX z7ffutQqYWx8D-Yj(@*N202L$Qmj11zicfi2Sqy_c zTb1HV1G0tg*5Wp$SL~-)*+RFsuubU|u`59>6?&CkvGZl9L-E$L`24vf>E?D-s$hp$ zu+3D#A{hlMp6`mWx}xODsr(Ifi~U`bdoj#9;ceai{({PaxF&7Mc+7uW&lZ*cQmRge zFvZzA6*m%{^tNvAwxTNA-hgHJ9)qbhF#uZOp8js3R~K%7Ky}YHd`YdSEZY(w_m;YS z+jOO$9U}L2w{GcEmK6e)^=|7HHC0?`rDdwpSV8~ecX^YJ8v2N@P4`JQ1>KS80_uV1 z7~(l{t1=v2=l4!cL^QEmgzw^wevZ_OFqI885)y+9j+)h*LoLRfN6J{P*y$rh=X)ra zzOn&^D^;9Eu&d@2K&7>-*})8-jlkjKV+ndQVd6(~==_rM*ArQg^0+r%gp=c&C>eOW zrGS&^`5Z+V98lRzVw4aZ$j9ix0~`4qy@+b&bM!^0x_7ctc9^fZ7jPHfKBAVzRK&@U zY+Zbjtc8I(n}hRv5v%ZgjuM{r^ebPM8@_obFXg37MLUM~m@N-?42O)eE#QIq0-_T6 z9K~oNzX6r-9JAj^WG2wUcB>M-k+% zg(^4g>)hcy7sGF6YJ8U2`ZSV)t^6>Bhm!oLKh*$@GZ!Y(0NN0;l|doe#cq%?7N~KN zLc(`4Bvd{1ygijs5V(UPZZ{eU`dXx1kv7dx#5a76j2sQ&h+989CX0HGew)UHpM%rB zSYVuN;!0}NuI#%^M3(rRkBQ*20M+W1i*KA(9K~8!$9dK^r)H-Q?wv(g_c6hEjt$HZ zgI34ru}h( z8wa=^3Tuo3esRKT9#$p5I&=<=`im3RRrXHpzKqp5vj^L(@p;u>oUld_8i)2H25-YI z)K{4~bU;PM8L7A@tTfK%gEpHyim7!zc*0s8ucRrzMea@PirAVE=jfSX@EGWKC#*#b z5*89@no$^aD))CMtZE-pMf)t7)){IsGp|5z)CxCHApl}+Yu&XCQi?d}YwvL|p#=BY zUJ_zQ$AQrwIWNyF@v%xCX%=g) zmghCHss0fg9a8C2`Negof_HK!K`hEg9!zenBu{l(_ccl68|y)0N$C`CM@UH$i&?NF zmhxbG;M}@s0jeI?Wc8^?9$MFa_9iw7rfZ)WfZ{2s1dS*8vgCM>&z{QFt%|U?2xcQ9 zL^C^1aQK@|TmtHhcE_1ZTS%vYB8iO2ose0aC=F7)j^Oo?HHFUK`ZqY zAa`t#1|vZ`-t}c;WM!y^ml2g!UX%p}sWbBo1|09_L8Y71ey91$6e&LI_fx-k6-}M= z<7s}~XVw`jNW(2Puc*}BGIX-`*Z>?VuckDKgg3Zu8E1%B(&RgTEFjJbV+CeQvtjXzwj?B>h~vdULJ0>6f`lG?wl_%V zg#!^J^x-2^K|(*i;%W(TBTzLVU3;2~FBdoQ(PIv#V}83e6dcF`?R}1B;53=E_q(Gy zK)ecv9qpMVYB1ZwI|E#LyZ9*K&%YVYi1s7bP?i)t-HP)f>a>&3X?J1CDYlg7Gx(jC z4}RsJ38BeFnrBaEP^kh@Ha?J{)9weW-0&<8k7+597cNqx-E21yO8B@8ea;JqdB%Zs zD*t1VD!r1`C`v2uY3n7`3K+wh4sFJJMTFtPtj8KDVY}_loMD9mUb9^ILyFg}NLcRv zL8Y@(+#$2F}Kvx2I0|oeFW^UQ>m)kr`{ai6&>Ri)k&UmwTjT4U2`YNoG9MowxyEfmO7VT z!~sqhc~N$$mzRcXjqRNw#DJq4^XRy5lq0X3p7tnAj7-Gg#rgvo5pp z&T9O9mKl=8aixWWwpPXxbd4j= zX_7|7^C7kkTPf^Nz!OE3l2@`H$D>*6dB}HVdC#8NGMq6tp=s?%o|>C0n>l6H7Z`w- z78V#V0+;&&qi}G;0;5J?55`FCkesOV&q&(j?CjM8GqbZZR}R2GS&x8+o)uROPaU{) zelG&rHl;B$H$QU_K@m5ns*GTwo1I4{aU;|6=14o=#YvAG+BZLaaNpJFmy3Z28GsNF z4#6%)+D&23fL43&^d<8}T*!TtDWg+#8JVN5!;^FKqX%(ATb<|@H)!=lhy5{3b3?9; zF(JN$SHQ(r>%mGw5xp@;DB(O&kkEt6qros^9L9UkNo%T8bF7V7EOX;f;CoJ5-Jad8 z5=Y=|>Fe5H9h}7tcT^Spd$6iY++b}^?!JtPyU3~{Y+ywjnpbzT90XLj!kwnuUAkXQWm46{Ly za1a*WpAF#&irTO2?8LrWCbhK_Q(6|a2wCwEZUVUoS+V7vpq3!}q)g-zWV5a6f$W)? zvOSQ^wyGDhPt261G}eUN=ZrfeT%&vb*n$Zx!t3h_7RG5|pwflDK>z{S&P0R|wv z#RW$NgW82Hz=gGu(r0~q5CXC z3EmJG&J=_R;|jMca`{O-AXjTq78Unc#6ewUNsp$c#^)xb+(rdvO#<#(<5PJ@It>6 z08mNM`Twg_gVaSKh9yP))dPxLht~>D~l=_RC}7f3H6{i%WU0@BY9r1#*X09yj-C8Tc+q!*Dc9t5;@7Lfkr0DlioP&_G+ zUPAg=f%GEM&km#)kX~?6@mMeK-fn=CrDye{OoK$pA@1!Ba*QV7ma-|&AW0W#kfcjB zNYVuxBVD%+P4TYQo;x=BbGRAoIu^Ga40Y**{2j_Mi*`j^cX;QU*`EX5~bq#n*D;*0B4<8 zdJeLtwkA}E!^bnaaZxA^Oo?D6tO3g=Ha>EbKOGBF!-i? z&aJaNy0v21tyeq-yw*ko#K+k@GIf93RiP~@T@sk}tzWFgFx7P{?P#S-w;~|PdrO*s z0t?En@;d(P>cfy&P2ItIquw5ZLu&mXA!vxt3$zxlmTK*G^xZ&fDOX#q30yRj9*agL zWoQCtAndZ%ny(I_w8usWj7xepMvIc*Ynr#B?HRvCLn$YKw{mqTTD%|{nq=)xrxCVp zz`wytjk{5kDp&8`r(Yepn(l~s%@pglnOPMZy&EN^1&+}IZAGiiPR>o?Fh~+@@AN@U z5?iVY=OX9qOw7#g88~zaCRQ9Vvl+M1@r1tS?98PI$x;ZHIP3gd3_A%Xh5 z0IKy}bS@04l9G>+ByAnIdVb2-dS?JNY%7Iuq}AR-AK+`KnAh!ALtK)0`(bhqOqn<9 z1r3^=j{pI7Eab6a2Xwl z+1o!2kpkU})=J4UjO4?tWO?7dl<=ROFl$2XqG12Qwt6Pk4(w46R%%O5(0FZZ+wcr; z`_TT@rBH)cU1SbQb3?VMmP9&nIVX~ zt_m|lSi-Oaf^K3_N9Bp=19WlYki>)m1PP)jVn8ux5fO97gvy9wL`B7%!|(Gs)m`0v zZ_hm5_qTuaxpnJQ>Z((x&N+3eI=^V#e0v})I)|+3(j0dhVxw%(L<|fsThOKKE~Nlv z3aY{c(rSGmxPfq4%f<}Cm*TQ9mGCId##F(NG#gV5AFXW6U1F8fs{TiCzfZWO4ITHOld4ny_ClCn$OZ$-tbu(%ga4W zV|lMek_6b_ zx;~L867;Z9C}9Gy?GuTr7%PSUPhR1JYib7#tE$5Hzp@gJDFM!LMo<}6qrd#hQ$+gU z;+)2jG>0~tvv2xR#^PcJ;L=TFY%WH^d0|9~3*m$#zA%7qZs{gLXG=0J&#+S zlW4{9O9>L1no*Y}3;I-#^27Ov3J6cRIr`!TpIpQM97M|WHOEcr=r1QiqK(wJSsDqy zBC}@`V>0{6^OI=>eAEkRuaDFz$EW~wQlf;+QzFB+F^)jyY2`#kyfra2rt-?y;i}$?dyV zQuj#k*h4p>q?m_Gi^*h>_s-;k!cy`MMiR`a1&eD*`n-2GCbP^tYsbgyD*WBco7_WIP{}P-kpyI!`jgj#tw6MLCUWSighL_El*% zqct!cn9>Z~&yF~GpX5qI-ZULax~3%q2S=V!Z4yyDW^FTI9?UBx^FFX}$3@6o)f%O= zqqgq&i6_D%D6fnRQBFXYOX8?48xtWqzLcq1w(Susi_-7GDoW;QUbUGH;Qqjn$&;oZ zc`U8XuO^a*7Q?~5VYmHbzBnAq)GPODHfHj~lj}s0oQtJHZ;-CstM!n&De#q=j9V}# z4}?0%TS{YG+kw-j)xlrv$m6D*@Yl(8M?rt-0P>2_na^n~!;%xZ{jfnsx?Y?xea348 zQ!OObm-7+jFvOT;BAufGi(xLJ4~*csh`#u=MJ}QrJ_nYI=#Sf(auNIE>R7YfvQ^xI z;?sLZ@7~sPjp7DiE4Pt+kY}H56gL1Tq8iBuTkJE9;s)R>UnBWozkIq;+yKZyjpXaw z8=u~23^xEr^%}wT>kS)bW4Hm35*oq5(e}wkaRZ>~Hj;1u-q_b}3^xG6M;2k=m3BV`^i0E&JixPiT!zzx7>dK$?$s5ia_(im<4zLnSruCh1etHy8x zAQCo$8$19ue{V}MR6uD!Nzn{$G+{x1nFtNpMRL zyzY!IMqWkbpx6FQCpiE~e$jN2a?I*qC0APHRfIw&B{ufr6tJ-OsTo`~06P(hV#knZ4 zadh)2J-nsC-r%V!?lqhDDx4UZD?i2>7$=S$mnT7Z)@w&|zSsC#scmjbQ$#F|j)-qi zxi}`>myfIvm?K5c;ePcF|AyjFoCFVl9}j2ahH-2HeRt&22+I>3hFHhJD$nT;Gc z5SPXzi-=B%+X;B{#S7WG<5!aFKi)|+@u>KWGGbAh()Wi>6?tU?I!#MS(rMA={ofkV zLyRoMcBi}m7B`aK_!ls}82R_5@FERJB(>BxyCj{l=bwld)s5R-Ix2n2YA@*V8rP1v zA}izX8flOb#Fz(u2Gi@NQlp?vdm0#3zV>Bg>m-wwhb328?i-l{ThcfPTvz2L>lMAj zUQAXZCq)9^BxsQORogIGZQYS|lTNOqA_7~15!>-!4z=r)Etzsm-ISvw*>$;<8}X27 zwE#E04tq?sJZ_seOhuzXiH{lZ6~$kH9_?z`vZGr%{K*N$~w8W37veA3YFze24SM^C+-}#E2DT zjnFkXIhXoqBY8k30d}8LB^x9^Sd87=YG_g^3zKd)dJy&YhIzRWR5`w)*9fWtBisn8 z4;)q-LG{gkpd#Ijez<sqIX_+30r;L|BGyFRsCxrqci1Sd z9OKhiz6zWrZw%K5d#R1#`r=G^W4L}eSDwO|L6xRLt1Y1wP5$_3QiXL<6WDS%6y*_1 zoE_J5r_gcF$pk{#y)jZvpvy5@O`t02gV&Vwna(SpVmU4`G-h*J%Tp_VL@&BbR(MS*2@*+*YRXKU znz6uQ*+}HZq(thBsTV2fN91IZ=v~atK&rL6gy?k=TY9z%c)Ksp?L}R7m!Vj`fngWW^{OX>$oh@!T^YPTr*u$jhN2JHl6rc<5)hMnK6{mXDOCkV8JrxN|+}P5ov&Z}s86`@e5}MA;t-S=cf_qqNcNRL9OM2`Va;}ukL%q+2h4F5>dM4mSpzIN8{Y%krOAw zCt^R)lP;=5Toj~Q*y*E!=I0ia_eOc;Xd5YCtw(M-%_A$JbL6p*xf5|F9-LTS;!O^v zgP#bGQTntbR+pP4*-uZqwKi_4jQa#rB zdMrcl>>3On#QkHO0Z+vZ8a{X!TnfKW%&=^iF~iQxZ(1ybf7x}nF?GjOPMFfGhyQG;+-RU^47 zQ2E$jv7&16Ya$$R440HOvE`#V##3MO51`zR3GXEeb z#hEZ=%(P@&RqZ(3$kiJnUP*L+L|gEWc@irCDi zM39yY;?DwEpby^E?B!=LeTyy#Gf1dhX;G8$8F6k07>{0#niCg^ZFQ(duk)J6K;+T_ z8g@*LsK@jvv2A7}qMosJF}+AKSrRp;9Y9?j)}$_;-V8X_v84?bU8QU_reBLWarZ#6Dm%Ld`3%=CdcyL z)wyZS{F1bZV7D#V4#yibaTY9F0MbTNz)Gr1eaX*E8mVqf?ZA=RhRC^gN;0M5hD(BK z+2`I|ipAbg^;GRberXPNsKKtGeO4yBJFIpFwjJ~4zTr$#`LJ3xX&F=MP5!Errk^r& z(lN*4ouP4uHp)y))Dfb^lyDj&Q%i=S6Q>?Ecp@%iVWrpPHZPlj z_ae(j{g`1nTO`^{VFVOKexR$6Sc0P#{cgm-cxd)a7BJ17;Cun*^pkwCGTtV7y<0Q- z%#A+buTUVDq6jV2>gWm`y(AsYPn7BCvng+i*!+68-EbSJj(s+rcpyH~uA}Eex``9F z8i(%#j;gAo^ZE%>-RQmv2nwX(Uw*n1Jd>kCQKS_r|`mna4T!a_kW|g|EO~a8vj`km8%d z_f3DFA*cR+(6yS%-yfIQH-+Cn{ZS0?DfUl>O+B94HP-0bYTOPmGMkD%Nm`g{%@Tx` z#@F&=9ETbRUn$>jZZQ~he+sZI)*+D6eIbDJn0*LPs^L3Nw-Fb!iKdENKJ^t4*>*h3QWCBFPk$7GcvSUuM#C4Br0H#_9J7HDu87-f8L+_EEuc3HVHaF=Fbha6C5UUH~4g z37}mH8JC*6#L1M(+_)&r$oR|#rcb(pY+e!#izM!_D~ZNd7`}UDR^Yf0UX=ph&&(*X zaQ(fJjroXj%*EUs6_|v%h(4Hoxrn})cDaatm~Td3h+7-kLwe)hg~o8@@Leb=P=6<6 zZ7G7wLOHyMN^JUJ(79xeQ|g?99>|KGaBFC<0_{qwnZFExo~Ha zI3iV~$6Yp=Ns1`i-*w@|jUh(L&#Fe-jhg%&=Wm9Q{WMN}njvC2$8Y=rU_tLnqX zA_T9M4BrAOTAkPrx@g$KiBGW5|ke7}0!Wp9u$ylMl0``q32IXF~tRi^V4c$H6+2 zUo5_QHx5>l#*irXyhf3ISgaYIs1r<^a6>&LfZ_odQB{LadiR6TB_C5^QN2jLBSb;Y zHVR}T#$n$gGrJ?C7OHCD)-yh75BuHVb@$^&3$s?}VS&mtx@r{snenOhMo{JOZ86J% zdC4dv=1gY6qN=0IE0S1ZL^(K&d2>^mWCCmK6}|ah8KS{f&fwZ=e273!se=f5M9Dhk zC6g~Z%ueq_iyC6aMVE%_J54u7&7jbY8|Lx77Fd5XTwMBh=;3f)9f40*_8vJd{Sh(K zkx>GeppoFjWFX92qR%GiM7TD=>`gL%^%VHERgIZkS9hXprQCqVMOFfX9(L5^Izdjy zoR92@2AO32a#yV}=DY|Cfm{&TAP&sSZ#G_;HnUCnPG0g%`--+ByC#R`#Z)vL6s_N; zLsWR>)KjKSpEx->!2NErl^s`JGZ05HDKzP?J-x>!Xe$dMrO?B&-OCo&3`}zDmY2gE zV`nwG(dj$~CGAF8GjI~LLu4pwIey}Cbtj!Tq59;yDbsOda%N=3Wt*gQW%WvT+jka(X z3Sf)q%&ZNE&4pb|ARkPh`v(KkaevBE2-4}9A5qA6xi&pxa^!13*QYUWagtJQ1mKF} zfV=8uw3ax2yX_>g^YzKH4f4au6Q>>@)mjUVr>9{@)_@rkCx~X*4@qSyBdzgLVJ5Co zY}e@Aq#2IJq>1mxO}QB|4btmhY{g?Of5~&ZiwqnmJfmLVYpiY!hv zFVQ+8yY~2zuxsy=Z`Y2k%9D6oU6>4;yu8HTKhtfRsWXI=ZT6{3x87EU9l8Hfe{At4P~T z<9r&`H+^St7Bv92A0uOCQ8?qjt*D{wADrQbLOuaHJ?u2*gKLsCg&tco1b2OF-5R5|F{^r1`G<4sx6?h?5kv9i%G7?7{|mDr=K)ci~HlUg%3*#-;^Dr*= z=cvF@){Iid?$nvk%bAH8%{z=L%yP?;T=L$@oID`$*G*wE(=l~He=12b6NhK{PgJok z0{7eHwMx&wi?S0mlTl_>vn(@>5+t*3c=B4*-8iE1X4Tl8H{HbO%8|ynbxKjsj*RVF zt4gxOCax2cH7F`fOjm=G3{mZs14qkLI5t}c^cirUVS|UjEx{PvSdt*%6rZ}!IF6z(+7s(y*vGN90A9<10`(sVg$u zVk9Ohqz^7}G_1o=jZ{jf1>Mfw&@P-xZaXCn~rhiIq7=C z1e4C&NAgZCi7UsoRK@9f7qzcK@@CU9t~@7QZ@hqQA7DvBdHZUlS~jKwuVRN^r2dCBq`#b)-_A5BCTjUIXEVcC84M=4C}TSd^2 z8K9(mlY;RIVsm3j6`hfvI?)HB)G6P)tx2BLs`xp$w^oC8XAL!#sT@tTF;haK5K9T- zzsFsQ*hG>nliy}*8^K$`QA)JqNG?QB4fd{T`AVol-x|1 zn5y*aB?U*yX7~Tcg3U#cBq!;IlA_0!6rG_#or#}Ohs)BnC27seB;5v6ftbu<$&fC9 zv2M>+RMtklH8L?RL12U#Ao2@+H#yo}Gh)(|I^3FQPGHEiU}RLrZ+E3dc>|egQ(|%1 zyes9IljkGqPKNPfYqoi~;}Yd*R2M8InuuBqo07cYP2GQNlGSK#aVq@a+C&<{_8$I7e1Gd$Tvwe+gtOdrxJxkBEw=Y4jIXOZu4>{b z5GhhQhr)6(4cb#G-N;E(PT~>wC)1I*?Dm8yM@@qnDZY7Odk@~c5XbX6YORN~;cJYY zbbK98p3pCidP~j=#pQh5qq$fEbxT%bDbtG2$30p~eB7KTN-%NVZ$Mm+^R$sXsfOJI z791Hr*f2rIE&DcEPX$+5d8iz0-aA=O89xliNF&T?iQbP3V|3I~G`~;Z1e#x{ZvxG4)El!13m=V>ts3;Ue%ctS98_cqjo&AIV_iyVW1*Dp z^?r5g&h!{jskensDDJzlQ9nRLG>TK4$LwK0kZmF>iZ`%RJIQf2ptyTID7PwZT@Np< z%IsU;Us_eXY5jUKBjc(l^?p@Snrw^8#{G?nsu*P<&h&+`W2KOqEYe?qPa#u1VoVGv zbkZq}l&t%u5v1-KGvcXoQ@xW{ZPGzT2~B0zeUzzFzau9I3`FVgsWMxHtmuueeEu;z zh7pS2@l1JQrZUmKa$a`YMkc7tm)DuYn5McUS~=tOb&k=^J)_yazD*?<0f(NS6%oeR zanR;@`pIx`7K~nkSH`IHM~C8Qam8pTO*yHzGz<^dn+hBD}|l z@``>yyqfJ9HmH9E;&(5idA6Tpig)-V+bBlE#S+&PrOs0eqpPhRQiIQr^U4poXgPhe zjAn%-q6vpr53I#WbVCghTM^ty7q*mjF(PAd)+4u0bif#Rvgg*xHH7HY#}A@n!JTk;%dp!dR$DUKHHNB8+tQ<4Ab8X= z0jFVx;qKhYiFqi&;{{@T>I=>Zo^Kx~2=WTR0u1j%-&m6DDU^L ztvhBC?_!#UvrFxm~vK+;H;kfY}M z98K!1Q--=Qibx-+oxGeZ(t%UyGhHeAVUlAXwosp=nG)>`aMtUI(n0zjJVlG^QKRIO zSN~gJy-^v%IkTmm z{uDX4{y5e%ouQ??7#u0N%EI`Y(+8Omq0gnPai9`os$d!DeF_=6Uj3be`hoMB@O?^0I%F)LA;Y_SO`XzQ}12o@^is6TmOE06%)+|?3C;D?UFdc35 zY@yXgd}#)1>*=uSCF}4m9?0? zrHRREz<7);_rE}+)wQGGiTr#n8bxaKQ^_jM+)|a<&6ts_)Cn>=^N~8riS;C@8Jpp0 z!>Gvzwv%497@sj)K9;EOz|FA!j8#mJRCA_{4*pi>q>4>_$su6cqIKTgm{*K~pQMa} z>6FGIz?3NiWXh};wZ|}rlv&TvxzuAg&#z0GX~>QVGhAnTNm?_tnYM`I>{XIFuUY0) zvXp>DWO_+9L)TG*Do?@}<)%#6v+%@Z3^iTTXB~vyu4%$vymwGlcf>S^3%6hdH2oqj zy7cW#j6fWhTo3mWii~3m15cWM0H(6iC_SZ!IDoMcW*fu5hg%W&kEc-?|E5Vk-@!1f23ai~pVSPBb zDRemw-ZzoE0!m5~=sx(Cg>eoxb(iB#DH=X%adi5oCh_Izvx_wH8xmXO>W71%?}MfAb$pwS_uj`SsauO%{n8pk31RZ)3Sw%+M445ssx!^W0d z(Wn~iv%Q+|PRSJC0yu#e1zyw`lD7=5C~D%sL&w(O_A?$utSYL|pm0FXEo#2($#F>E z&qtKwi!<2{jB-?@zvn1zj}U#*-*XfM77~3Q+08{oX#~EPdw;SBrgC6c$*cn=n%0Re zMK4Hc3T7I)^X%rva8ix2cf{rCe5lFje`$=aESm}91{eS;!>4C*F{3MSw8_vnRyHXy zvr?tL2N~lviKlPBh%uVN;KgT}7-RUA>k-iI`y}riqhdk=S(apr=plWsDb6PQu=|x3 zXD*3!laY$^p!d-ghQ?FTT7l*sotAKL+n(+WWFf8+e{$$h4BI$ z$;sPFD>P-KL?a`D=|)2c`Aca=<0dNmLNy>L-O+6%Q)=hyw9>q0>_~LHulCSHLzV1N zeAMi-6MhuQG_amQrg=GErir(2KHghqYx5E1aGW;GB3+m)mRF|ML$)sFak5w*(-@MA<A6no>&>eY&)KOw#<4i}Hd z+g7uBwG>n|1LUJ=TCAMaD-kPqaAbYlgKp3270artIfhYOGP0jS@Y1qodwD-iS;IyR zt`QA+uasOSub92`@`IGbXwbEXMJq&`qP`=G#f3IR&fq6`9)VV|PO!1Qd?s-iwcJcWX&-@Yj7(+C?iElaBgC#}oHN$>r=s9#M! zw9zbwansor-Ap43aTR4(h$~;}Kyw@)k;5TL(_>6LW8jxyniu2D68}Wfu`!Ng$TQ8R z$J2;P+$mse7%>9xgngKjN)WBfTHh$H5?|rSNKbs#jPz8WV&p*1fKHi62234E2H%vX z``;u3<`!MQvC~z_>cXTc$sqN0Bn}Q6WtOy*DbN_eWCXF06Nk%m5?QB-%!v%a%4HFk z?3+rno0SbczDrUGOGMgerTb`?N=&2@=FUhZ7w%F4iI8Ak2yKXLsZW;{k-fy#SWcub z&5ifJEX|ilGpr{q&E&kO8Ma($h6Thca@1K@l~!nk5|Juu6H>^PZsg@5-Tbt)AVaXx zLNVp&6X0rZ%sVj^CCdml2n-L=LdrN?d@!sA2S%ae8HJ^)b{OI(L^znrj8%0k&j3y5 zXjV;N5mSyC`d zz_$UUh-n#SLrk=(#&tEa>M^!@irlrtPk8Fs7L1K=SlWbzUq?4%v`iW3SjLilVjWH& z@|>BWB__kxRAh?(80)dl-<}9`O2*Wj(#dqEjHnq{HEJ9UxZgD`a%}C@iigZbVtci2 z8t&kd`!%&-0aR56bs&Z{VKT0q zX&=3G3$_l4rQ{15Ex83hYO}LfGnn|;O z#f9|4&6YXQ{c#6>PW1kA0cmj|!+XmuGbPdG*t{<-WOxNW)0Pw62N%udMEBJmWl_5e z=#zn!V~3#~vD4SiUd<(PIQt4Wn}S}WF5yNGBdh8rPoD@^3Y4y|GM26#SUH&YtWH3* z9(WlYWRcNnt;Ga; zYFYD%utmd*kKUa>umgmU5r0Gy|2=e(IKGW0?gaT^wr<>4H?C#`M7Dvjs+#j)Y*in4 zZbW-5xUm4+Qt&r0UL3^Uq|2cS<7^exNWbLD9TsOiqa-6+f{dxl6jK!@8Bb5tp;W=cxdeh<%oi()adEvX zOR`H3NcI;>vKw5S{o=%S!Wwv;m)<8xP* z-{HL@Ox!WEOR`o(S??^#8e!tBv$7=CZyY#T<x8 zssg*cnO4O`kwIlzB?w(q1)R<@)TvhkEC{{R?sjZ|##C6mxLot@)=6|fE(WLMVfLRe zx<77$%2``DLx%Fp76+8%!y+P0sLxw~1q~kjm#}C!<-LlMxS2xA1qa2@8%ZzB; ztcvt$_jI$kxEnKFs#z8IC`~3lYE}hqPb`X;W>w&GU>P2nZdL`h0yE8`u7%T*(9BYM zwX8ixklkc@UnAo8gnxZWc{sI*^4`lwl!O12lviQ;4d&rYd9~2axD@f`&&=Cmgmrwc zY;lYNRoe?)ey%SUm zxm4GHub{@-L^s?^OnIzEzWl1xjVvrH*1_hsJ*Eig#xDbt`xn))aNYm3A2 zSWk6*ZKC>&Enp2TB;v{$Xr&)tg*6tEC~<^H-QS^2AeFpn6ZbF=#r++oV|YhRa$OXR zmeY={!WR>*X$ilGbJvcoJ`9-;PHwe;=w4YP(WAxOmC;~|Bb=@vC`jO1W~36W*@p2SjUykLt*3YLwDr%afF%-T=(65&>$ zGOLyTNcDtK@a;Hs2o8i9mOgRXw7RL&C!841{b|-5_JuxBee@*U9sg7Q*BoOqPjvng zne}9C8)dGWI`!CzQ*iqlPnqT#E#m#>Rr_eJGY#ftZGBm_k2_}cP~0z*iKxN#=JA&3 zs(p$sD55GIXD(EZ88zmFqo>0Xn5tvU_<^HwC!?`0;;!pti~88)zhLJTFfSLSESG6u-Vzd`#>kkyp=)gxB9dR zY$9* zxhQ1~QhrbxS&nTGBQ~&1eIy1AOo@o8_`diaKwkO*@P9XQNh&?=LQ0u1QiwhkX&=E9 zqCbr#Mxst3csg!vw#Pa1Y6hF@?fYlPI>yEqC2!AmIcI2m;eL-qCt;0(inBeFs5iu6 zOAa&3I=M6!+v+p2oulX9u)(+oC^OnRo=fuKY3)s_mfiNjxZHSpmJcvb^1;uEr4`j4 zhKe?4yDpk4^hEeYc6=fXHs@y~YE9gLL1PY=y#q~!E#l}}IK}iSOT#Wqx4z5T4z zS?N^y{jG0u)9(*8HB(M)+X!^iMB@IW4((4W=x?P&DpYf=8CXqgXn;|v^Ep4=B z+N!#fCmku548lBTGj$jxDJv z-={&J&Pwg88%0H`HZBc=O3E|4z>&j24SG+%bt`6ts2U;UE=nz&0m1Gm&1!ThW)HibF~{SiBmFseq;l&nT1>J&g_i?9Vr+1Rcdd|MO zk@GprrIF|Co47weZqm(+(k+Kzrqj*bw*U?(K1%1B%rjG&x0qUI?klyvZc3XIm9|7Q zd3M&EeS>J;%`&OxMX45B3(&+0KZvE#Od#Bj*|W^6Sx6CdFA%igQiO zf+&XHv(T@%VBcm5p>8&{Ezq?+ZE`M(a`GZLopVt-C%wFN*DumJ`GsFSMi)dm=bD(M zQOs-;b72%yZ+iH`R1b@qE0l3@l#bVi=~i5vO1G||rDfYK>utMLxEFq|YZwZ;Yg2El z4)wOXFP<|Mz+ z>n9M~27xvYA>-}{>|R%Ix5aPUxxlnTpxshn+9S~ZX#_eT(BUEkIwDZZqB>rQe|zBH z9&-@b6M;Qz>g`VW?es2+=!`(;?||uoK$n*h=!!tsgX-;W`0cg~5#13uv*931b-x_{ zLcDI+t={f|*d9Nvw|n9xdcFn3-U#g7wchT9-(Ek*8}5zncpLp;KMAab9&=P%M70ZB z;OCkK&vMm1;dA)))V|>}`1RFK!cF)M)K9}F@mo+o3mea9y+VgX%`@}nfkBr zA^bL1zX%_|ZwvLy@IL&uRK3G{@!Lw3hxg#OwWCmwWq zeM2j&tQW|xR~ept>h1GU%|7aP;k<^y*1oDXbY5c_Zxeh?@IApo7AfF-h6G&8kbvtL z62NiT+R)nii5e3+XXB56A*kY~YHT>Op_BD9b!ZrT1=`Z!bO#}VgBy0Ue(rQfjxcPF z@P2MH%#r3{1@iuv+XAELTfcBy)!Tn==wbcRZ5O(~27Vx(-{KjK=P*2f#&e@OWF0c~ zcH4)yll$jb{`dOvQa0Mq9sje-#EC1`TGS zw*vvQ7+OrQoFnit>0=Iu>jHu`1a}iWPVfrBHh@ViQbHQYc)vw#0%Z8VWSr1ILI^?) z_p!ET0eWH#dJd_#S7C5|-4lcGF*@Zy_t)XvhTmGhaSsZcqYs-;MsMtcXJ0&*vTH6Q zxSZfxg6jxw0BBW>XDArkBly$$QG&++9&4zve$!?>_(Yor0CxWq7#yg&Z4W%(AfoL| zBx*Ygpxu1@ZFe5QVu1Fy65K|xj^J*BjQ}sA3w|S^_GF#yA0~K=;3i(=SY*f5{7Xi-=O8>I!A5UHvpU^Ea2vrog1ZSGCwPY7 z1%g)zwh_Ee@HW6H4ZpK~(|HF<>--_X*8pAE16>{@c$9$c?Xro048F^=1kVv{0qD9v zm^8bj+t~yQ0Pb%XVg06iKk)7Tc-TqZ`EK30PIO;Ez!z+Wakbf7_Pqq`GMjy5KLSwJ z1<#Rqj;gmeHH@@=Q&xvRN8>pL&#`zW;W?El=Mk{8%GgN8A{n{n0sa9C1ooKE&*7I@(ywj4tM`O z=;jZ2Fs$v)LcJ-{xSfCRAV`RW#Mb^Eg8K;WCtz3KgvowT2XLAW?9mSA0PF$wu?JSP zJ;8_gbh;I7(Sv{dP~kBGmSNThmjO7OF3#fwPY`e!ci2dWjda*5=RJb=3BDzuAmMxu zP|iY~ANZFobw~pao9l2AJ97xgC>+v&LvG=a5FAb(hm*%4NjM}4X9EHIct0t0Bmc6u zo%;zMAmIFRUL<&lfJEewh@6)Rwi3KTz$xf#M3*@C5!?^3uN3+K|9*xp(Lk2qQ^_0! zEM-W5tjO2!uYh|P67VEL0=P=AmO{yjQ(Rd73MNJAW0X}3a6;}XtCIOj-A}>{(`HC}NolC&gMv=9ug#_mlEFvIt zRa`w3IjkawJx~gz*sQpis0#_mbrrd;A}>(nl!^>NT}r^UMO{X~wMB7lQCAR9a#vRY z=t9ZG6nTcali)4_@-xMGsyI&-=c(d6Rh*}atA^raRnHJ`=}=rc6gl)pY3XMEeSv@s zTfIcUg+-AEsh0`Jh}0_tuM%t{AU9H<5s(|HF9^N_=qZJM#lK$@d_zFipvW2&S%V^1 zP~-}VTtSg5C~^fgn}DoAQMpm45-b83EQNCMP-Jmx2?6<>T1K#(;6egQW$Ge=iwP)t zD2g8HdIHKHii@=(GifG;l9?zn6GdjC$V}981kV#}CLnK7)Oz;B1iv(K;-XqvS zz*R(1@KxUtd{6KL!H)#>;G1eDz(Q&1EdHHMFo$3+!KnoE2u>q7o!|_DGYQTjm``vv z!8ruy5}XHcmK3^xe-{!gB3Mjt0l^Z2r3A|emJ?h^u!7(sf{O`O5^(ubT>kzkg|6n` z%L%R^xRT&1f;9wJ6I?@Z7r{D$y9w44+(WQ|;3$X$c9fB?OI@&}dph z2W$zoswE`mmSuQ;f(M#;%Y`63QBtb-wu!pZ@)9Bha1CzBHCRjRs~O@#+;R=U)dpO{ zkN_jk@7FNMI=B_u)Cz5Cg*LT9n_5-j8H{HLBzwfSMtp0;x9)+bC!W3Wplz*xi3c)j zA7~K=w}znF`anE`@K8B`jMe&H)TjaHXlntSo~<7wc!=OJfHtV44Jv7aN}ge1ZO{vC zP+Oaxc=pAE-e~h*cz%HgwYIqtoTtrA1h*29tF|FSZF9E)>k*pWFbsv=!#E1Z8cWX8?#^dI^!x?Cd?xCrEk>se^!tO`Vu;$JQEkx$ZF}LtP_^9$4;tB)>q1+u z3vIbBwEcvDJhm;ls0L)EZOKa4aWvbKi)uht+Lo+TgP9D?0%*rIuN~Js4Y=mD<4TtT zT=PU)p2kA8a>XUE9hbm%Tmm)VI;gcSE{5$E7_g8b0bCZ_aak0_tR0ud{a}DPxIIRu zJxH~E4?GVcHl>SkspVQ$~fKlv#v>kqr=MQ+G1a{y8-hmDO6||azJFwmkTy;Av zC0GW~5!pK;dq-sNi0mCvRY%N1d25S!t)*cwFJwUU2{0z^2cqnA-K_P=G;CxPlJuC4Cq%Ti3elZ31#1z;Q z)V$}g=oyaR5zrLS$WCZvCp5AXh@%s#Jdv_ZC)C*qb#_9Xols||wHU-sT)#ST>C!-y zP1*{z#(5`00ytl^Cc>%mAcwOPL!y{;;_B9k(?^4c8RGQO;3z3DBSY*M%IR3zIl%14M17P}b!c1D;3dcWhmk7a8|b47#Gjx}vRJ(blfugI#}(=Rm0Pi0_8@Ziw%O zcj$(9=!SO?Wxpl)iPrczMZ0mp=Ylp5aL#lm2kOqLA)p63swWERi9&j!0X@-)J<*9h!M=JDhk|>e;GQ7)TSy>1 zLGwLdLH3@n8bFz`r-0WOdY#}605MtObR%3H0Y!1aOEUgSBm4P>x%|=WaUseM$2yL|>e=Yl-;0{o8 z*& zJUiSSfg|11?65TgN4ckCF9Cr%_Y52MVBb30oo|N$0>`*#+o6ZRvFHQ!u+FgE?`#leV4Z2Z z-`gO~z&guzf3QKEfi>TD>s9z3LTB6VOclO^&^fj{ONDPEbgu2rR^ginooBnJs&E@Z z3v73u3SYst%tG4(AMiqKbNJTzwzqdU2!Tbm*DE{(fyK601~T)l3v6dl*b{*zwo@5~ z2rRXos<0aZ%WP*z*twyzwcK__gu&OCWEz}-Nfr=n!dAnDwgX$a-vjb6*3h4!>J_#R zhTwNb)y=Gn>;Qj)&gin{*2Q+PH~!%1h4NS0K`)T@aO)B~7=UQl@X6h@4UWuSTi!TZ zw7uW>;PwS!+H?m%?^Xls=n9E3jyM~1$unfW#Xt`yp+ z*TB$r0xoOXc6TOAr8-+=th=@Ww|eVc25qgQnMbw&c6oP5j6hh^*V@4Z{P|1x1O8lR2S?z~k(kZRtn2Nd4u6ggKf<3I?BH1ZnH0X;(B8Vy z4zTwSOb(q-!FU|%Q`?Z{COh~aL{AN$$Df<+;3WJxS@sccv4d0a=Wp0)YG&PP2mi#M ze}#88w6Jc&cynaHt=59ZZ?|Ez4KD&Y-9gK37+h-G?<4+BnsCE&5r3D2f@^L2Is98k ziVE>hZ9=NMIsVuQYi_NljW-PLwC&pve-B9_oQC)fq`NS9(6(0~{$5f^ScmwHwEu>| zGd8r3z`Boy;BY+R?+{ZobA}(qQjrJ zgOyI`yah6AhGd)V;0h-^8KD>K;5sKf9-$ZQ;8q9S(!zSl4(>tX<(LQ+4IQm5cJL_v zF2i4ED+&5FfZ@o|U@( zak_1>1xBEa zu0{4%%BZ_wNBsqO=9iH*^>SvRWT=gyltHz%l3ZPEl!`ioHcwL0(`HApB#IGH?1xmd zTI*7&L}}|_VhI!@pcwbWaz`tjT1K#(K+J7oS`&ks*tEocwHPdFN5fuhs~D>io0M3S zXaaf}Q{^k$ft;bh5T~NEzJ`e%owbggwVq%D0b8Z_K4jZt3;#9{P+MzsvqK$GZ?A-v z>g)f2`8=_lAB&DciHZH3N=dG*oSKQ4$rXj~V$1gxj59{>ox0T98OfzOW%Z^&uMOTb zAnbyzTWw~#7XV(@rM}4jRKglJc2ix^Chjj7`i9_Jg6{}^AfV+%jMzu$QfH#?wJCcJ zLvsmEC7=~slv?`1+UR8xyDwo$*txW>wP}NN zo-MjbyYoA`)I95R*6^G%H~;UJ=6!XkjoF*kEX#T9=dc80Yff31i;T<5 znJ&++Olz`Q4G>Y*|D!oMYe`Ow$j>+QbO@&V&v`RUrtMD;|E>jK!t%ng>t(>zIRLH=( zTsdbe2&sW}g>ueOaBB;!E0uGef?gR|S1D(K3fCdDMmgszIJE`V)yi3JHzIVcaxPZk8icM>&Lv95@_L2+cNxnY6gJ^S8NE?qCtj4%o0PL!$*A6} zurV*AdW&+dP;g}ntXq|{M!|_Kux?Y%)k;S7cIDiq!a0x`?oe2(LhPd}Y@TD26=Ji( zmVQ`|mF+HtB`m~Nx?*pwQ`q2#y4u>hTVYiTv8QfhH(h-O+LNU0PIw+dZ(^D_ z;W-Gsg~{QBXCd@9$i)fIKxjLri34Xv2*#Ku4m`~u7-O0^;VgvS!!&U~Of9S(m>kdp z*iEf~cwaf^I^o|C`T#S;3IB@Fhssp`yq8RCc;s<4kT-mZndAt;e1)0h2*G@f`QyNP z2Of<14G%n6IoCKLW%D1Dv(^DIfCnq*dM6x$P`%^a;Dq-h zG}CeJbznnkZq0I>jcDZRKz)aQvmH3Hgz$$@-{apL2Oce8MUL~DBaDBs<3P0|x>|AkxX1|NMqu4BK`LdxQL=q_F@gX_d>_H0Oenb zze)G*0}iypahCiaDrR+egBx7rI7^W&X@}tkuK;_o<1Ej|HlQsl9p^$|vu){$wp`*k zD}eaFaKoGNnwL7x9grsWM~AL*oO|4G0YaBK&IVW3?bV=5SJv&zL6@#f-v zxiWvRcbw;3%-`Lu8$e4a;XV!yeT8mEx*I`8Zb+7VljFSX!hR4~H#^Q&7s_dwbqk0G zITBB-#Oulo_B?dst&Z~s(q)I>Js@ra&BX;sDa`f->bTu;-gaf4-{CmhU0Cd~?l~~o zVNSQU?vfDPcj;dSUA(2W&Pl9RoCtS2@cYKP-P&3&A$a-H`3x%=3`Y*!!Lb^*wl+uz z&cAd=v&T04+`8A%h7hra&_W_+5^WbT#u2fQxG({3j8YrS;ppZ2KvBrp2Q}UAz~>yS zx3%?vgy3Opb5-sL+=C8W(J=z8t%oE8$78P6Hf5oQF=Spi5x7Sr1b<|D!@@O$j+)0*57E z9;~cfU0WjEQx2Trz>8q1k`UbB?62_eY5ng4-`Zu23Yw6SEGjAF?<(T=SS{O&@e zkr>uRyW1<6qCSYQx%H}qFiGrL__xjcqkZx+x1zO}jOvq3j%>}edwrvhx1X;P6xVbcsfEKIdJO}dEjFQ zzI`GOeB!{tPn3gC9eDYPa`2g>=4$2Oa|ix@vPOL2!0AtvgD)L;{)uw%l>_%b5f8q0 zV8jsd;2Q@%fTAXR>%fo^{txQ?&Ve^zcmhJ-JFrfPQSt`|eu1Jy{OG_rFq{Nzy$cUP z*)N&t!c9>2OJ=#Se}u0CJKKfBpzNH?ap5(Hof9n0E?fu0mk~PEh5w+eSMyvr5r!`! z?lc!Bl5jIZr@OF|;D`)VB^PEe9Fl>mJvL0fzX{UjFjPT5xUET z(J35?&^i~+mEmB7?snl}i5(iKMJ`O3*k{9{;KGh68o&k@#!S%w?sZ|N!j^7eZFFI) zg7qJ}2rdj(;Q)m0cj132y1)Z2>{p@-Jm|uRCFX#KTv)PXck*EuKAEx)@`wv-7DPyB zH7?AgVh(uBRdcio`M3)Umq?FKxG-~x3i+g~use7Oay$jPSEA-`0^KW-`=18gE0O!3 z0o^N^=g)%f6^__IYXRLWneoqq?v>2=&7gZFGyVn8y^M;7S6sM@%A9`Hh0myn z5!+lij*1xZnhWnyh!H=tUU$_^sN+VKcPjynl=^G|oe=bif`<^YP|+K%+Mrd#H(hw1 zifZ_lt2R4nSLKcOi712S;8p-YoFo%`3*6g&tgb zag+_b*n?j$6h4@(JUI8_I2+7X9z1+yhF;()sEBJ3x5QI-J7TDTO=Z0!hMHv_{C~wz zv)qFdFm~U-i#>P(i^*n%r=UPCLfl23g7UZ!p^H5@2Fnax>A^c#X6Pjzyn|(iUh2VS zD>HPJryh1>hF<0=Y_ zhPLxt1ltMTBiKRkJ^>xWv^&^NhCU$>PcWL`wb$3z42dxwm9O#CyAI?|Sin5ED~A&h zy2gXgvgqS$Jvc6lK7OsIK5)c2M1>{ zwcPB%%Q+l~l5g?g>MRT7tspa37RcK`X09xdw}Z@FSs?EKnYpq+-s!>pSr*8p1fBv>yFvn+K-8`<>8Cw7TMLtZ#)HSTFzIJKxLpgA ze$IpMwJ_=DJvd;CShm@N7q%?NFL*GXi!k=0r!IGeXkPN*k1fL377tF@B8)X);Rm>>eGP|5?4I#b?S415=zbq?jSL(_bvBJ3MUC z=w;Z0yFZrUy{!*C1tUe*a=389D^lD!aXzyvJda|xPD*nhdTJX69HE^aHg@1b2OY=5 z?vB`1KlZT2BX-qKJRBL&OSFe`1A2+}aCiVqbfxvVr?w;AdFbcv3kVhyaQ#gk_vDx* zXFgM&ovVQ0QvL<3?QXamLSK3~kpTBQEbktUC4?SAUwb&40B0bWF+ChmfCnDdWDlnl zuqGd1eFs+RhTTp>QQb}_m``vv!8rtMRi10=n<(XbFg#Br=^w!GJdvb-1jF-0lCJmF zSsuLdu!{R?z6ZBFtm3{p+Y4VqXtuA;@nr3uO4=@?o)lWz>~Fmp05^q zvUZ>5tMffsyHEEOOexQzlrwy_*ps#UOkZ8#$=ZFEuahRD93#)e29xY8LqFB2Ttz7W(R94|fn?75CLj54R8uw-)*85-&98 zYGrE4G?E!3^F$_w%mg8Ip=}{%p<|&|lIIC1ZLzN|{m+zkJW9L3SF8Rrr5%TNUgE3E zJdt6R`f9Z&GR!hxUG9ktv)or#cp}4G=qs3-D8sDq)m5Ho85j9#jVD^h#lE`QlZ~pC zzPiQ}E#nejt@T99xYSqIdZJ~l^3`=Tjln4CtGhjIl=RhlPa7qDb&scwlD^vDX``gC z?)9`$(pMWj(I?mV>ON2O$*X;JzbE?SHNJYl6Mb^6uO9S7pS;#r4|$?b!rbz(Ckxp1 zzIwzHeewoh!3aj(;znOR=7~Oeldm49(G1$5ub%KkpS;CaPkN$H-s-ET^eni|SDW-K zxZPJz>sfGzub%NlpS;so&w8Ry-sP+3Jm{0dt#!V7{y#Hn?NQp@zS{hsDXlF^TkoqE z{xhYuLC@Xes~0`dmpAz8B~P|h?)B9cPt2_webwNJx%EC@!O&QX9QXTbt0x;Q5BTa8 z4{p*hU;64*Pju~ve6`IJUHf5Qz2=Fo{fMt#_e9rz)K_nKqH90qtFJuS7JuAVUwg7G z{)Df-@xq^>yeED2od?L2F=8I6a#aE~MB9t}w>I`3m zvX^~zrY}O-R`5$-X!;fKOJ8UjTa>VB(nhik{L&YiehvK67n*(@{L&Yiegpi{7n*(( z{L&Yiehd847n*(>{F0VU82i94eWB@hz%PBF>36{|eWB_1z%S`!7FavLFMZ+c?}K0Z z!r4Cnzx0KsKLo$@g{F6cU;1Jr`3U^dmrb>g!7qK;aQ_7S#Fx?k6#T@O(fPA027Ly>r{+WTg*%z^YR-kV2MeLs)s9Svz`{xAec3(K( z+(6yo3+FpEPbyWbr0HrwpdQwAwJ=bRXu3K-P>*W5 zS`?_qG+iwY)Z?12E(p{Uny!`v>PbykO9KVl@TsVGS)iWQbhSKCunUu}E)3LjzKHlM z0` z5$rDy)a$-jWUdI*8@^a%t_;+hJ}feDiU`zOz9@og0`;~pis03O+U|=Ycuk<*@kJ3_ z8>n}EQ3S6I)O$X5^0BoPs2x81>I3WgK)vtFF8&RH`oI@c&5eQj&=*t9O@Z3!i>c=3 zKz-zkspghIee8=8d266P(bRNXpgz^qbbFva)6{fFpgz~sbZ4Nx(A0ESpuY4)zFZfm zuY8d&?+(H@VU z5Pr2IP*(@Suig*THG%M}4+6C|5PtPxpso#sU+oOkb%F4!j{{$w02rSJ*sK#^n!X!)7lvY^|+?BGYjeo zO>1Wr)RUUl<`>jcn%2%Ps7;#I&MBy;HLaanP|s*uJFlRg)wH&tpq|sTwy>a{*R*zi zL2cHwwy2<9(6qL=pk54whh0!mF9pKGmK4;MKzP{Ff@%oF%C)SZUJk@yvAm$R24b+d zu%KQE#9*p*rPZY!v70@;PQy`a7gWEbL&g8D9yU5Gmi z>ia-;A?_-uA2ijiE2tke)!kiC^#xfa*B8{xg6IeL6x6JOP~C=tnq3eMcW*(>DF}z# zSWt5d!r|^Ks8b8V;qEV}c?IEc4;0jC1>tZH7S!nl;cyQX)ENcga1R&MnFZl+j}+8d z1>tay7S#NLaJa_`>ghkLf578iuWJy%c{6okV)Urpp`b1*2-Uq@P!|`3>b4ft%7RecD+P5)L8$K4g1WRIRJX05 zRuzQmUMr}}3PN?S7u4#4P~95^b$LOk?#+U_q99cFRzY1^5UP8-p#DG3-ZEOc>$(=K zyYjkT9p7l{wv(7*itQwZ`!O>!Gcz+YGcz-D&po%go$fJu zq{sX5)tGhaRDHMV%stm!Ywff5xExt`CMV-_WZl`EOw3W?&gEoMjtX}^CzEqjxC=R% zlB2?1%*oUo74A|_rse3!F6U%=j*jd~PG;oj$gbvOW{!URT25x=$hzw}nVlo+ZscT6 zj;yS3U?JQN>HVB6$uXKf$jQKwgUb3@kT=*?OfvNlI= z*3yu5IeN2JhOE!go3%D%Lym>mHim4>=}EDMY|3Gd0y@2hY|e3(Tzf;d-bIfQv8?qzEjJAs*J9ErvyBe}9N0-*kkli`D|L%tD$$mJZ> zY?L8aa#XX?hFr~2&BhpVEk`vQYsmE+)oh$0H*!?7@rK;YF@{bsPA&+uYvl)gw(Y%^zNRvUQKg*D2 z1`GVN4QXM}>CZ8wr9lmwYe*}D8aB_6)&@0fz9DT4YS;op+8Wfbg@&{@$fiYxbTG)K z#fEe=$fhNRbTY`MrG|7i$fjk6bTP=L<%V=M$fgyBbTi1Nm4^f1V#)rRym z$fh-h^fJh%wTARI$fk9M^fAb$^@j8{$fga3^fSn&jfV6$$fiw(3^2&1&4vs#$fhlZ z3^K^3t%eLX$fj+E3^B;2?S>3B$fg~J3^VA`b{aC=piA3j$OwZjZMPvK4Z5^FhKx3- zTzd@}V^F#F88X(Oa_u){oI&L}V90ob%5~6?2?mwxkRcNdD%W8{CK*(&BZf>is9Z-4 znPO16ju|r5Aj6IuGR+{vP8c%XAj3`?GQ%LlP8l-OAj3`@GRq*t&KNS=Aj8fYGRGjp z&KWY-Aj8fZGS48xE*LW3Aj2*ivcMq2E*Y}Wpi8@K$RdLpcEymz1~u%eAxjKu*fm3z z8q~1shAcCvVK)p}ZcxK+8nVKmhTSq`r9ln54Q(>0VRxWS1~u$16v<$<;vN*qz^$67 z7u&|MKUP2IFNjQ??n5 zm(5MtZZKZ9FlC3qc-hjFU7BmHOxdlu*4mUknrm%L*{iwM)|7pkYwb+guesLVlmnV; z9ZWf>xz^E?Lz-)yOgXH%*4dOJnrmH5IjXtV)s*7~qhvQzP8f`m-Ay@ZFiQ3?<&?oF z+0&HM2BTyzQ_g6v^)}_K=2{<9&S|doHRZhKT0c`RXs-1)<)Y@=08=h$t_?KhvgX<# zQ?6*P4L0Sf=GqWbu4%3fHRZbI+AvdYXs!)6<)-G^2vcrpu8lP1w&vO>Q|@T4jW*@3 z=Gquj?rE-#HRZnM+Bj1lXs(Sn<)P-<1XCVqu1z%MvF6$&Q=Vw9O*W;;WCdf2Da}k) zFs7Q)+@!8eGo^(|U7K!7OOuVu8K$%{*|?l(N^6si%UPzhF`0eNHl?k}TE-kx+L^3n z%r&LG$#^->lny2pZoVlUO)A_1Q#zScxP_*4HmPunOzC1$;TD_H)uh5LF{PVHg^OYn3U3O}ekurVKIZzSfvB)TH}bYsxT_ z?rWVX!%e!c^`?w4>Ap6YGSZ~`+GxsXlghQplrbiiYqKe1O)A$GQ^uQQ(^gX^m{hK9 zrc5-cT-!~VY%;6dVagPfS>;YsrkczucbPKXq+abdWrj(;+GEO0lX|t+l!Yd})IL)d zne!+8X8zvR$GIYbFB3*%Qm{g>zrtCDSNY|hsCKc&A6vU(= z-GG9aRHU0w5R-~@3kqWLj)U7!5R*6Y-hqOcjd>{7T_}jz7z5pdf|!jV(0wR~*{JHu z51=4sqYL!Vlw&4tyM_KiK}`0;9z#J)_QRe)K}`0;nk+eGGWs>MNq^PDlDj7TRZmOq znXFOtvgE!=2jAP02PPeSA4?u;*7ddIk!D>#OCD?1^|$1SX59cwnk@Fn23pe0VvlT) zCCx4N$Oc=|!eWnXh$Ss8_Q-}>(#m3wY?vjjE%wNUThhitj|>ycEop0UZp=ta+F6_% zGs=?o7U#x{wxol_zS0;=I$Er*j1$DuW?0hCq9V<-q`yT)nq|oV zi=Jz?B?B#bt~r(rvgoS=STf0?a;>#wvPIUdvt)`z)~&Z>szugquwe>NIR$0`wgO;qesB4ETSz}Sx4qLL;qOKjWWW7ay zb<~m#7X8&ROEy~cSH~^cX;H6EShCBaUY)dLw?(}=WyxNPx!-9^_F3%roUvrT#eUCO zOAcC8sdJVbvZzw$Ejesar7l=<)MD5Eq9w;HPOQ6R$#IJl>n>Yz(xNt9fvQ;4rmIjD zi`sMzT4G^&9NcgZEwQLgH=rdJwdp1l#A?jq)mu;ytMPvT-G+i#ji^#(?m#yz&YHUm z-LN=o?jCf*;;gy*Pz$T^F3x)ZwXhm*13iRVSdBM<9zi24&YF7+jj%Xt?g=!);;gwQ zTOL|;;mvG$WYL8;x8<>BLJoZsBlmaaDEH+Qq8 zo6Y&n-EHY%Q)znG($l8W^t7dyO{M8&%OIQXrnfDFZMvI2whXc9Zu;6X%%+0$vt_u= ztgXK-BWz}E18f;(Q$YsWGTNqs462pTeGTo-n8Ewl9n?7fZEwgN@#aLTr+f<8jw#>1q7UON1 zXVcwGuw}kYcQetJ1vcHyBwH5RbT^Z2S!C1QOtEFLP1iitmL)b_^E6wQ+H}p+ZCPg1 zHP5hRg-wl^Y0FBR8Zpb3RW>zZwk?}%s=ypuHrsSEb8XpT)5*-UWt&YEm~YE=n-OP$ zEjw&RoQ1aRvZ(@#Y}sv71s2<~$EFG_v1Ol4ceB)%{Weu#nJouws=#tv4%y7IR@idb zW|pXYguEutGcQw28Ia>=F& zY_#RFP1mx?mMb=0%Vt}y*;Iiowp_Q__1$XA4V$xgw%KyarV4Dg<+e?)vcr};HoeMD zTkhKQD!XjCXVa_fw&lJ}J=kMQbBA$ZFUE|+E4>e6#^IITZ%b>3KK1~{jKeE^5M##S zl|FF+Qu zT()I^Lq=S&WuQYwT*YW~$cSqgjSijfb&N)b&i95bLmfKbn;4f4o$oD-ONZRJjdAIa z8+U9O>5vOm_<7CF>|){ZQ8=qTDavecm- zv~^^eLp^Bc$a07IbbCiuILxOzII_}VKHbrgRSxUVog7*1P#HQqvc{n@ba7;@LuKgd z$U27^P&Y@`JIsK(JF>xH2GqlmjhZ<<9oeLr)60>~nmN54*`k@#$C0g?Iei`3rkT^v zk?jsOqQ4_M9BRY>M|L{Yh=Gpma;Oo59NFzK7aHuy9*4Qm5J&cD<_vXYzh=%bM-FJ_ z40q(9X3hvl4r%6$bmXvR&L~HYXy%M|G$PI_;GvAS$4%KIYBexu?&q7CTJ5--V zj@)smK8qc>>rj1`IC9US`Yd(izC-m{=EwtwIn#1S9y-jKRygw5q57RQts^a5Mxk|%ba2V0^^SCO$)*jCbaKh2jgEA2sXm(=>FP4h zY<8rZOINzZk?t;C=~hR2xOAo49O>!Om2P*WmrGZ=!;#)DUFl9o`nc4gU5@m1sYAOR z>E}|1_Bhhtr4H?NWS~n9?Q>+1%Y1sjBZFOfkOPhkap^%0Ix^IyD?Q}MFqf|Mup`4= z#-k&SjBpu`jyf{ZWjs3O$Y_`9bKH?JF4gCRBV%2v&q+tdySo18$OKo{{~Vd<>iVA} zlU-`gSx2V0)SPpUOm(R_=b;QP>v|WU3@&}=MJR(y-+9TA1ulK(WoU%Uy51FNgv+|# zRcM6Ey52QMmbg@(>re}q>T?5X;j*rG6KdhIH*pJU;nJVphFZAvr+1(hE+f-jsD;bO zbPpQg(x2XkM!1Yj513CY}3qX;mUT+oR+Ta(9CJ&%1)O$)Y_F@E_JAlE4y7ru(q!3aT&qdxw6+~1Z(fg zK9>=!gDVF#b2_?mP&22KD~B|5I=gbjrTTPn<)};b>FUZcm+I5al@l)GR(DrUx{O;r zTsh@3ZuNBKjOI%(SI%m_^mgT(=1U(}F1U<&x%0e^)MRz6@~Xiss8e zSFXB@R)bu*<}z9hcICRuXf?!@8!n^OP*-lbtQQY+<+jUu@o-n}xU3hCaOIv$r5WkU zeV0lz%9RH$m1eXnEj-rd#<u`gnA&b6n}`G3%Y{Ntxfd(3+0yE4F|yIJ7MK#%Tbp(}$t>dPWm27A<( z#jXtX$c-hg4D-m1rLGM3$c<&LjPU4gmb)_2qq|w*$|#R9YNacqJ;tb2u8i@>lGUz^ z^~jPnu8i}@lC`dk_oy%HT$$ieU)H-a(WAa>aAlH5ec9;BWRLo?$(1P{^<}dwQ$6a- z7FVWu)R(QUO!ufS+gzF9vD2{Km6;wp4Le+!<>~y_mD!%oe_fg5>HOD~xt`8{U76?U z{MVKFp3Z+=S>Ta5`(0V+kvRukS>%y92VGh0(dQg;Wr;_hbJ&%o9(~RcSC)BHq@%7Z z_ozt6Tv_2!k&e5v(xW1saAlQ8MLOxqYLAL^%9S-973s7qYdtE`8CTYMRHU=6toNu$ z=Umy~QIXEOveBa=U2tWSM@72m%4Uy>bO{RLQIRe~K|DsQD^L)R(dsG`#N&+jYfuo6 zx$|`>h{xRd1{B0&?tBvp;_;@mTTl>>H>KT%f_S_s?G6;gafVu4y*4@#MN@Q(I4NXg0O;aTR?rAo4@#MZ{Q&&$OXf}282%%b~w($eQ$!u>sI&wAZ3PdfS3tKpt>_NiARJn7<7uSR;()u+22 z?2F`o4BInQIPCp~>C*Emml`Bbj)p7i#qToXL$^;ZHEe|^Q+#UJN>8Tx)UZ{aO!KK>t38?S zQ^VGHGQ+2at@UK4PYqk=$t<55w%(K3J~eEECv$vi*hWw0`qZ#Zp3L*9VVgZ!;4|iJ z@noUTn77rFMLuKRHcyuLRIcrwEcK~eJ3LwDQ@M6}vfQU~?eb)WPvzR}$x5Hfwa1gy zK4acqPuBR%(Dr$<)@O#c-;?z|_3D5p8+_{3K~FaN)T=|D?DXlH4|}r9r)xgq$!?#n z`KTv*e7fdip6vDMnvZ+3&u0zqgeUubdZd${9PsIpPI+?Br$;*N$swN}>5M0beR`y` zo*eP%kNYgTr%K&{=J>4Z z-G%1(tn1x_=J<`*@!tE;93PA6qW%ZX@f$A#J%r}?jTeC)L34br2mKhD<8wXeC(s<9 z>l-xra!)g-nJ@P>bDI0|Kr^R>FAp_yTKe)xGpCg=k2P~z`|?CHr;RU70c(A2eQ6f3 z*4NIL<^gMc?R{wxa8-j2zO)RuszFCzS_NFypp!3c0`?a=`_eXGf1!&n?E>}}y86;B zU{AA~FWm$7G`suKBcN~U;Y-hezNx1#y#o5CUcU4WSoQ1eOP_#MzdpY74VdNk^`&3H zo@PH^`UiAS{e2k_&_NCGWniG|f4&S3s6&H%84^&32KzEJ(DgrGh6TF*=gaUw*Z+JO z5m1MQ`!X`14vp|-R6rdX>C5PVIyB0cF#&aGv@c@=>d+Wp#s$=&vA&ECs6*p?nGjHi z#``icpbky&Wl}&Ln&`{qfI2kEmni{tXtFQU0%mAae3>3FL!0W$jDQ*1G+$;0%+RL$ zGAm%ro8imsfH7~TFLMIMyji}?4Ol6f?aRD?j(d(T^8-5WxxOq2=(y+kvM^w!XudCt z0#=F^__8=)rD&lqO9EDk7WuL?p!Z(v%d&vpdxdTRU>a)$4qXE@tyD!HBx}Y7t zoCxTGcKUKMpbOgN%jtlcv)h+50X1ijFJ}X4&R$>62lPJse7O+N`|S7SVnFY6z?aJb zmFA!?R{|={Az!WrRGP!STo34Yj`(sTpyN5}%gumFbIh090s98WeYq2`Z*anwy8)Hv zB*u9_r8$Lh9#CmcW1I(6nll*P0oLZm9g-N`LE|l;a~RzL@4G*bFUBH+Q8JR9( zOoxn2moSn;GUBo?twS>63dVFuMqI_14#|jX7}Fscaov~pAsKPQmyRLh(M?}Eg^WkH zeCZrA9^Lk(Ysh$X2PzOU9^Hisgp5b`paLOtu=`MfklFhKs6a@*JjB=!8IK-e?1zj; zk1_T`^5qFee8_mz6v)7k9fW3q3<~Leng=pCr1xnN$dHiUr)3~RLwcW9fea6+G_3;} z5mIT|1Tr$D(zFd^bV$e3E|4)H9Z&l}#)fn}9Re8_((!Z*WPC`+( zO_x9>g;biZflLmmG~EK35>jcp2QoFJ()0*qT1cho8OZdIO4BQl86lOXcOWxEDovk2 zW`$ImzJbgRsWklpnG;fJ`Uf&Mq|yusWL`+685qd?kV-QskOd)?W^f=2Ln_UXKo*5` zJVOIn9MbU&3uH-1$1^;Tr6C>9h(MNyRGN{2tO%(zqXJnOQfWp9vMQv~j0t3QNTnGY z$eNH!GcJ&|npfikS*Lk5A&~W&R}%x-pm{YZkd2yGlLOhLc{L@F%^{U$Y9L!eD$TS& zwuY<GbRHXTV z>tiyhs@Ac1#%{2hPFD8vmrCIHG!ND>4(+^av`K2S{KO0kbY==AeTet zWg7yy5;8B_7|7L-dD*5wu7`9%n*+HK(gke^773p{&og*sJi9otU zRHT!Ebd9J;rvm97(IKA>q(?-Dd?t{d5gqc`Kzc<~q;rAvj;KiI1L+e{kuC(%H)585 zF_3-{v;0ee^p6<9E(bCoVg$PaRf!nEu0mBJdgW`-l8Ah{4lRkumm7f$i^!Lo(2|G| z>=v{nVg$P#$f$^XxdSbU7{TsBOCmM{Pq{5V3mHE|i54t4HlaSroB))FG6`5vxZXLs=S8hdPC_ETRr|4rO^n z9qJOwiikSYHI$VRb*Nh?t0L-9_fS?x)S(`stkE3m8OmDCpKDr9h&t3ilr0f;Xh0}?B4kuSW?(3LqeiSKfpr8r;^7vK4GLx7e?4{s z93LFYe$AmFp&Za08XC$$&7onT98w(eGQ&eTjQ3)js%M{SYFLgVBSJaywq%4doJ4doQ>^2ig-3FlxzB#nhQ2Nlp7IT+6$REq1?prXYrY%)fL;P9-67eBKXi+ zq2+jJi*x6Oa_j%kx$4fyd7<1^<0Qz;59JQtHB^1DdgzQ}3qra3UypUfI~Im=FGB8V zXBLHWAFrxEWdNQo4&}k?Pu1!@OG0@V!4cY-rJ+1}{e@n5x-68(uRra9H6fOV@&r$p zsBiGU_mIVht_YDD7hQoi>KjK4x^-6iSDf zeW%T#bczujp2=(pr8D049R9jl>N@J*BF`*WVVOW z4R83ruk8UG+Yw6l|9Wg6-mx>39xQ z_J-2u^%sug>Aq0I%`r+vTb#4Fm9{vs=dLWek_!RZ+cjM{7PzJpIbSM6n zL!k_e5!vj_;ZO$Qh5I;fCY~M%W$^1yr{lb%p$v`biH?ObET-!|9?I~TuKPqNBV$Ci zAagR5QFz-ZwW`WEJdD7xQ=yFhug8Yr^G=5{CPrl_$eamfEMD!T-q8&Yn{e!GDC7R? zu?={~xlqQ(aOZaBd?*v}s`_;o;^~D@Ccgf3KF+%s%A^=k(au~7W%BDU%*NBpp-g%G z=}eq=C6uW#YDsqHYADlQe_<+~UPH)x{pn%m9B3sN#(_=)onEBrmM7EguUsEJ&V|w>yk*tduGn+@UUX3iQoD#`~m@%_uB%5OP zSz1N1S&ygIk!;c9sZAu?V!Exik!)Av33n((vLmM3Y9Gn2m~N{>B)em}t&WlGiRrdF zMRG*(8F#2hax`Y`u}dV!V%8qJMsgz7GgKov8S5FUk(`Q|;q{2*bWA7SGm}5Ckz9(I>kWwHa?D(BU?f*!=6Zu7xf;`1 z4UXhmOlLJDlIt;@)zC<8#B}1rBDone>l+@)t(aBF5s}=EStS@5$(@)UYg8on6mzg_ zeku)W`Ll;T2M0e;S zX`bi~T_i0MJwr8;mWiIB8cC}}&rpq|b)sjeM$#tHGgKpKo9G#;k+e(bwq{4tKB3#1 z6G?|e&rpq|W1?rMM$#$KGgKq#l8`wIBI%ltISV7{mXJA%BI%ycZ7q(ZM?$x?B$A#9 z-PY1bdL?vQ%OdHWkVDHO>64H{D6g%Lt%{_7LbtU#k^u?p+-o8kn6S>h zHj+UJz5BXIh9u1T)<-flVb-@Hl3@wG`^HE{B)UTv$;d=^=pq@F=nh>ZqZ8esi)2iq zJ9LqZO>~DYlBo%mYeyv05^`u~B-0aeXjddN5^`vFBr_9oXip@w5^`v7B(oE8XkR3A z5^`vNBy$sT=s+a%5_0HZB=Zw;=ujjJ5_0HpBnuOA=tv}s68iL`kt|N=(~m{6Bw=26 zJd&je^STp}EK4{~}9 zksL}`eR>$l;e^$vN6?pqb?(Q|mjrcgGxH?MIoL2%O|~#IO|ju(r$7&tm{&5*Vgn_& zHp&2~C90ksrXI$qhuJ));!FqiFibs+z{76rM%X+y!q?x$H?;e|&iE8wY!MsqSp3NU z=Zl{>kj=D=jRb)#n`sprMbwe9nbxt9B2Z;BZDOMYmz>SCjg2x=wrr+dY*g?kXEW_% zqY6u$&2)&38uI&Wrekc>Au8ESrx>?my%V5wY&-=?$!5C5#?w%gY^G~$ya9re&2)>6 zXTXJQrh9BW3o2wYJ!0cIFag^##>N{#glwi)Y&;JhU|Yu6cmXuPwv4gyB3OWJ8Dry3 zAOW^zjEy&g1K5@^HeLb+vY7#~@iG{Y%?yl0-XERG;>shcon^_uL z&w=FG%(B>eBRHPTERU_{LGf&6MQpu*PEIznGPYhsBPW|#6BPUpvRKUY>ln2pw*krY>TZQqYskJY>%yfW^mdOTiAT@!}v9K z5~<~JcEuKwM73bvZld=C?TIauhH; zr(&m$Wwx`K)3MWtRkoANnb>)%(dh}|IK9-vG(4!Wcs6#PK}#x|ITt(6q9cW6%VXy` z?(updcHW476qYTIo#)Yx!m{PD^8&i(e&%xQyx8dURUgz34?n|eS7PU_n0KDdT#cQ# zp=g}VT#KEzqh_4VT#ubsP%_SDZp6;J(UHn#ZpO}gP$tf1ZpF^4s1j#0w`1r1XhLN( zcVg!Q{O#|?&Ie%;vYC6a^AY%hZ03IKyarp4%{+*mkHQsXGY@0uV=x8T%%j-(I6Of% z^Eh@sgYcitJc*spBKl`DO^Ne44%lXi^LY-~=85wK4%iln^FlUwk%O`LCW3*L5#^KEXy+dgr=!!39_B+hry7l4i>&iBw3fQ}{3 z_qi!==fwGE?!4P2asGun?{-a`pJItW=vdR)UTt&YyTGM$Gaj+u%7@*OKgLU9X0*y%=tOKw7{n*68>hEfOx^anvmEH#cjZYk` z^se&y35kQ1-unPeOdPEAu2$uplsH(`y&KTv#KEfWU4W(}4pw#V1T-~qu&R3pplOMN zRo#`VpPo2aqrExMjKskj?M*;469;Rw{{?7P;$V&TKLO27oC$gj^f`$$O|N!8H*u!x z)$Zpd&J4ZU{rtq4saLySkT|pSYWE8hXSQDLeo^9JrT2fr=Pgbgtn~h4pe2cemEP4l zOiL37E4}{^Xj$T5rT6axEl(V*^!{C-6^XO7fnI)P;w)=m2DvJ6mNzhiT%9;8^p3`B z5@%%tec0N>S=B%vwk~m2>$TF?C(atZR{Dm-S*zDd-WI=ET7o z@~;7HNgS*f|3RRwiG#J=-ww1baj=&ATY!o8aPv6PvV?upj+CTIA_(K*ATVDIj1(ghNvaZd9~{`L@jYHG_Y59FmbR+ znObr4P~u!tTVZ35hQzt7_QJ*vN{MqtZHA4^I&rY7``-Z_OB}4${s`!J;$XG*2S6th z2dlN;13H;FSgrl{K&KK1tF`|Q=yc*>wf5ftok<+5*8VG?vx$S%+J6ajE^)A0`_F;S zCr)dDf6iqtBu)>g)qTK=AS&Qpz)Kq50lb`09B%<$(eNhVRS+2GUIo0S;T6E^ATy3$ z0=%K&MZlXNHjbVLyai?ho(84LL z1Avb-+zd1oY!ei^WZhF=0~nRiCv=obK6 zY4~}-)_G?%j(!%fjfS5AY@2t+y!+@Rg&P1H> zLBP%$egLqGhVKXLns+AQg!ck=%R7?+-viiP!*>Jr$U9ST^qqh`HGBtPuRMd;+W>oO z_*R6|K6w}6)K$~GA(45v0DeOv^KKFJhD7Gw6g5joWZo^I6$FXQyJhg*%?!%Bl}7h9 zy!oR|4S&EZgY#}3wF+3iJmwNt0EXt>r%*D#eF0VjZ&;i6p4V0{@4cX{Ufz3ATfMyZGQ;V{ zy!RG_Q!}$E@4dCr!%p4z@XpP7?;UVLuzPv$o!D*!b}#R}3-fZ!%(lGu?ndt`P1y7r zmM`zUkFj${-g`e{rHo8sO%!$1B9fVl;zP$HcL|FK~ zy!Sl>SoprY_kG0IZ01bf`vF?tFnW3KhlsN|Ngb1?nEKcX{uZD0{%(<-K2{)&YB$_kM#?M>cae@BJ2)4%oZA_d7HxVej(Z zzoAD7dzbhAh>#0=m-qf15f}C@@BIe?F6>?2`%lDM*t@*ukS@u@Fu;!7fr!~mr_bH zy5PY}{S|0T!Gl}+51_FH4{k|m#khh8kMwUq;|m@<(r+b4@IGi?!#PRPdH) z&o#N=!7Zsu>Xd>9x1>DR)Pe`^^8=u11rOfmdqC3*9=y+YfMygtc%N?p%`ABEKHmVE zRq!@yr!~9aZPHF_PQim8`U+m1Tky7Mr!}wOVgH;j;Mn|vw@o{(1qE-rc3KMy9`?`q z6kc6a@OEmawYcD6{~YDCmK40*+G#BmB1aizG`<*_`iaO zonXESv?TN{0~MS?#U52_0FsNlZ~a}^+w1^?ZcssM>B`0s&g zKq8C&ds*meR`lP;LRa&m|9%#_S`_^cu+Y`A=zoxord84Z5FJhHqW@t!nl?rMBg~uI z7X6RX+O#YBAEUKtU-UmtYty0Ve*(2mWWYuLle7SxivFi)0Xi4`PtyW)Df*vb0jO)y z|2)l3x1#?Anw{=N|BEy`J&OL9Xm)xQ{V%ib)2rxzz3~D*xp&e3M&mhvK1KhVOsV@8 z{cka)?pO4`&6K)-(fL{E@yMe8JLbfrivGW`yfM1y|DK_KOws=XL;cvI{})Jn zHZ!j1|5e|eRP+&nl&()G`pxtP(-Vt+bDcp?D*A03*xi_1^xNru!lo4c_FC7c7JWpU zK6vl6qK{~!vgPSTAG@&i0Gd(s5m}US&n)_gCrTe?6@A1Lxbp{~B}E^3 zxYG5dMIRAJ>H4ywj|lW@pyfp$5$IomRup|ipkDy3Ec%E*KLc7-^buoz0<^m5BgXs) zXid>ajQK~5)wM-`I=FlfaGi!KJ6m7m5WEezK|__DZPZX@XPb%~p4S04Yj_QCOOZoR zC2CtWybQRl$T6uBwe1>S0NkOW%Gq`nIjGJ8?$YoK;O-(vnM&XGXsFV+y&9_YZC{Z? z_!!`R4UYmIC~{0Ig*>R?A;3c#s-*64(O-mbtirkuAvgk z6GeXsj&1`yso_?@Q$=5Gin0;#w1!GI&uF+F@NCgvffJN&p3`s*;Q6Az5=U17UeHiU z=*6P1Hdj#+dPzeip_hvRBs5UBaY74=L7r8otHq$e@pP>i6gi%*7lV}J=|(XqaXj5D z24z;AZWV(Ht4_CzL6sxyPBEx)gxxI$b&jxmMNAP^1;qQs;3@? zP`hIA3>+5Jt{6N^SN)_IJjcP;lm>4^c_W)?mIlu=`)i&CFEIOSkp^#Kd!S_+yqWER zR%!4O+XJoB;ANK5+oZu;*dAz`25+Tmwo8MzQ8nAA!P}{t9n#O&jTukhH269a9az6K_*PScO5yqwso^^y4ZhvfpoZ^2B9+VyN&_?tlr0-f zqz3YkH2AK{Zejh>0NdcGfjo>zl~jfksUbZg4Zh#hpoa8FB2`=&MWhDz=rs62Q-d1Z zV~A9lWh{{z=Ht@fhfNL2$c-oZXP^m0%F<0tgMU=JDVv!|X$U%nF4QEOnVg0N{#;Yi zu*jclY8s~exu&IIi9gr$G^}FEWHvJ+4QouKXQpADiS(>AY-A!mI}M-W?=~k5pJuss zZW_LU<=S~^_zaWH`Dyqplg$Nb_#BhXg=zRkB%6L_Q5rtq7~TN)!<%?eDc#~U)V+iy zY4}Q`Y9TC5!*{UozAO#j$-?{cG<=n1+7)T|UY2QBrs4Zord^eWA7Wj7bsBz{b@erA z_z~9C*QViXv=i&n@T0U7>(lUKv=bZB@Z(G~H>TkykY=K9k%phd9cf5p)9_Pt6I;^o z({vMC)9^EJ6X;u{;b(Cd2$I+|{2Y_c9clP^nu(oh_ywAYU1|75nu**ax_(QJ(q^a(Ug-tpN7cHRDJbA8X`0MHqga1?9{;dsF%_ZQB!%^%V~%# z?8`t`(h#xoi$GV?5Lwvgfv%+?qUL9TuBRd5;wOM^q#@#>a`-pX5Haw>K)2EmF;LY~ zZ>J$*pz`&1(hxE5z39i?O+&=M@HVJ24lmqGLj=8d0NqbR1U*%FeUOGoyWR@)Fb$D* zy$tjy4UtYg5A-+r#lcOC@=2N+HrNmE^T8g$uM*Xjcjs>LjmyDMTu!lDrP35UE&O zppK;wshBDubt;8O#aaS&E`=+#LFiHnS80RLwG^(_2BBLiM0%!lrF$tvdZu)xM=3;l zrgWueDMWgv)TCD_M0%#wq<1MqdZsj_PboxtrZl8)DMWgvl%roMM0%zu(7zNSJyR4I zPzsTrDGCfMg-Fj71qPME9lGp3xD@WxW%nVa5J{Oz3x}4%GdhhMRtnFnOPk9KFNN1} zkyQP3godhqIe~Qg{m=rULNz5-+|=TqbC^ z8E|4LyoVE1)SaZEN?ayur~>emQg|OHsKjNehAIG0D}`zwu@!*RHBY zE=A8!e7BUMXDPm0OVM+z0BtKpZ=}WFUW%S)t#3yudVzV~&QkOu^SoW9=uOP?c9)_z zQhh6N z^iJyX(Ngp->hiHt^ls|%@ly02>hg(F^ghb*$x`$kEq|rxyBMXY*p;I1!Ox>&SBn0T zMYyx2=zp;Ycdiuuh();brRc{j!d)mu|IFIk#ZvSyti4?-ML%Wj?Q$vl8EbD>O3}|* zd%IeSeuM4^lGRf5Th?i>m!jXJBZ7)uDf$B@6d^?|MSp}dN5!rb=}Oz}QuHTY?mMOE zuN+r*OA!*6e*iP?m7>;QoO0LqHB|2UK`BzxM3lRJsG)M#k2F;7`f({zyQe94{iGDB z2`Z{N(o`n=5n!`&q$ZWCY@m5L>Hzoyz!n;QAF!o{-vex=;dcRBmm@U|{o8<8$(onTbI+r80z1x=oyJ)CdCSA*s+V4%Z zOuA{PS|;5!{2XA9a?}+kdVuJ5Km0U_T9C z1MFXpdf=#PqzusTLx2M{{2<_sQ2TD2+V_&Hj&spa^M zv})7J@$_%q_?7p+?Lr z$FEW&=9lC5QX>|WQX`g>;}20ImX_lWQzMp@McncA!?$KR&aT3?R8 z!;1fga{OIdt&QdQd$d}c%JKJUwKkXIAJA%TDaSvg)!JH)|ApoKZRPl1rsDR|a@QEX7d;bNJaQ>)N>NkdgWysV+hh_95nL$(UY zS2a`t`I?3*AYU(YXKR)F-q27*;hP$&D158T?X{Nz-qvsl;2jNBY`$COw%95l-_vjb z;Qex}ihC*`KhSV4;KMR^&z=eRNW&R`k2RbQ_@vA&yr%*-RR~`OY^LE$fXyqhstmjd zu!V*%0=BHgsxt6AU@HyZ2-v#9vG)eRHX1$+*jB@*0NZKU2-v>D-Mnjn9W<;0cGR!} z*r~!T#Y=#lHB14!Xjla7T8Y=-Z-@cAX&3=^*DwU^p<(G1`q4W9rG)=)Jehg2}3pdnGq zEupJhNeay7hgFiI?&?;ORCjeNNlABgD@hsYsh=5DNh*y=D|~vQLZF%zHM)}2nV*iS zB#oHuhyHFQd5VeZxJvRg6V>sR zrIqA;oN~0RlDwbApXHV011$cms3ad`@n>Zv`4Edgt18KdS^QaDNj}2j&zef|8jC+` zE6GP${8?8?K0#qzUr9d6n$Lzx@@aaejg{mx^h}#7$>&(=*<49J&r;8pO7aDkdbU=Q zFQU$h#J7^@PU`kb@@3RpvzZ;0aI$nQ`p^=jG2l539|4}Pkbw^XFKBol@M49OybE|q!#jYND~WPiHvq3_ zs7j?*D~WPiR{^h866Lfm175H2dnvDWL&I}`H!J+2X8><$sBGKqN}}w_alktos`BUE zN}|lhLBM+&9ss;wNtD^x2l$|p^aWIT)?7=U@zJnV%kSj?~HVI|a@zy;Mjtb{6#F0AHZCDio?Ha1#ze7Vc{C8IKYU5?qG})!$O~BpNyt<=LDZw5MuL17WP>I4m4OND>znWJQ z|1SX^&`@P~2Q^d~-l1xKI8IPfaahB%fJZb`s&TZMR~vAj0z9VSNxi&5y(h zNn*0aV!kaM& ztjxn|;ibkxGkgs-x#m%|@K)ARA6E-+V=eVbweWV^IAdo99q;0 zy64ccR?t0%R<(leIkc`7bkCtpt)P1jZEJ=1QG?pm3h$>$X0 zLrl>+)e4`WCFxu%e3BZ}rB?V9ElJl};nTDv-D-s|(13KW6~0If>QO6vi3X%+t?*?U zkY2UIS13lkYlUwx59?Dae3N-t-&)~Y%)|QC3g2cP*1uNx4)d@9wZadXbq%Z)e#B&J zP_6J|Ue3X_!cTZPhtvxH#LGFfR`@xu;;>rb7rctYYlUC(DvqcXe$9(FvR3#FFW#tH z;kOj5(Y3-KI0I))t?(x`w-Jqun!1=D1sX@BX4H@#ukvE7 zsTDt7=bIYd z2XvI^y||XgYALQ|>e6H!ucalH22Rw{GJl|xwX{OEo~or)vh{Q=t&y!~YH6L~bGDW~ z#qfHrmOjn!dcKyvfnCoFwe%TuJ^jqZS_-qV5M|j^&AxdEp}15_pQjhTTuWb|7rs(U zU!)hlT1(%=S%ueX>6__=uh-I-=!I|8(wFIlZ`RVcaI(m)TKaZ+;oG(Jos7YEYUz6z zdhgcKSLuB3)zbH}*l@p=etA&$}^sJ}9=f&t%PyfJ+(Yv1hkuB&x_4MD_g6>;S|ATo+zk2$g zycYfI>7RHl2Gr9(^I8n7r+?wK7*tRH%6TAz>nTbqqd}t~^%Oov&FULkPtn^N0yM0i zqL89WFT?983Mm7CM$}WdoIXG!>nVyTy?{p5Qxs9uJdn}#6wap`(3pDKP5Yv;^%Pw$ z)zTSPPkU>JG`^mql%iTX6Y42ugs2&O6YD8vfBYF}Qawd)>yJQ_>nVC$zXzI9Pf-R^ zZQ-f)6!SZN12nCkqU55Q!PDz0T3x>cno&>D>QXJ>ne}v{Zq>}Hr)Y4gR?X~sie{FQ zggNzej_%COt*2;LsX;%lo}yj#RiOFx6zwWC)ECrKw5!xmUszAku2MsNQ9VVwN)7eJ z^>oGSv+(LET1jel-O_rBR+5@sx2&F`m853ZEw86&8>t4|ih7E+k!rxLtfy!jsRrDt zdWyEun}Jr>(_Q+`hc)$dw{FU7J)-Y?SYJ<%Ht^1e4fXVxzVl&YJw2{x z>usv1C-j{Uo9pRGJ#TMIJw2uGeArq~PwP7$w$)R#rX2jg+w19-2BZKGw0e580pkLK zR!?s=U|>Md>gnwUs6Pa)p5AM~(14)T)B6n=8xXX5`k(;;0C!>3(}xX+01&i#`ltaR z0D@LeA2%QdK+x*xlLjSv3iQxgz9=6 z2b+Y~<3v5}u4e?E1e=6+1fK$%gyp!?^|Y_BdwQmx4iMgdau&Q2c2CdM(?P=S>3J|r zc(pEoVZy6*5eySvtxI5&@M>MIr(=ZojbEv!V}Cz7+akbQ8ZHF9t)VK&-KnS3al$;nyBf{~ya$%z=xo6I8qNZI zP)}#!=ybq`8cqXzR8ME)=oG-mpfunlz$Y3`1Z-+d=i=xKfXy^i1-a&p>3kf07O;he z&j7a6P}SyIX^C$HY^`A(uuUU1zY5q^!wO)###AkMk^;7GOx5JeJYWY6|IgOW16q#a zO2bq0Y`jK$FbCF)rkdAXeY>lNY>;H43?^sWV3U(=5lu2CV-}ur&JxNw=bUrSD95Lq zg(4CH1tj*r_kwr99G?w7M>YDYx~FH}bXDD0)jtI`Qe-b&V@0-knz#bzVY2J3sUq7v z%@o<@Y3>R$a01&rEfm@2X{pFIPb*iLi4)l7X|2dM&quDn>6>Q&+bFWl(^ipfo_4Ol z>6>ibv{z*7rh_YRq9)rh9TnM)(Mj<*u(K;H#0hN2ba92nKz3tvRb=C(n=33qD_bnx z71?6x;R;L9$`(scMYdRaxxzBEvU8)iE35>v8>5dR+a`ToVHH~0AnB*b&W--Auo|sw zkPL8zwLrE)1}d@@GRPIyqje2%up&D*hA6UgW2h@^!U@ZO!(3rAa0zg@;$q+kSJ;Zy zg}{-D3xK0sVH;ZK0Y@v&1&(or?P#419P0`@fir;P6nQX=cZFSOoeK42g0oOhEN{zx zMsA|B=ZVrd$=QmcG){K5AWGvDXDud-vvX6O4V>KyrPXf3%Qn1inzNw@+v(0mB5Y?k z>qOYjbT)Rpl6ID}BvN;_vx%sWbDT{@yPxZ<7d>*Gvzci3^PMe6e&OYGmcK#7};H3tBpzY2+gk%dOyEyx> zcmsDj`v^Q2XXkb~`>3-!`RrYI;Z&&I&OR;oPAO}g?pWSN}{~`oUH~a z4Mot|ry-=VQp4G2Afu6(=j^i*?mgt}a}w_T)Y<1Dppm5P>r5ujSJg@!W> zR6DlNaE5^D#1_7tL7=*^g>Pp7s9tQL^>Fe{{n)n9yxIn_g}7S%eogEd9wqu35neX31tN2wOoHnyWxi)t5J=s&DQwT~_IAJ(Ee#1{GwYf&9z z3;l<+s7|qk{_`hL=h#C3c^=dyw$Oi`1$B)r(sfvVcZ)63b^ZwI9^0t~v3lr=v7M%? zBznenv1(DhVvAH7)}ngH7CI4YQGH?y{fCXCzOh}SYZ>~*b_3rdOnI@)0ql((pvd0X zfr>nh4T@!c;Aw2IB2QyOV(ImZfI}5|MjIB(FyPSJa7CWcMkw-(HZqp(&okO6#aY17 zv5W_v+{P&K6% ze8oP%1&Y0a3uDVEO5K5r6uSXGjxA>+b^$I{>2ChRm~P!y5zSsYv-BI9TrT!?w*?A+&ZaFGi*nLFUH zEN?jRMI2lrLHlEIaH)us<8g4Ah?5g>P)RK7lW|a4#L1U&P({SasW|w#h?CQCaJ5+0 zU&X;S62>p1;ChJ}RHxuZF{o=$aFZC+H7U4R4C-1G+#*h++7#R>mUSHpZWGJ8E(N!X zWnGVgJ46wvPr;p{2sEJJE>Q#;QgE*%Vl|@RSK>WtOu?^3{5PTCHzNL(eeOiTb8>q-Q}Ddp-YyipAh)+G1say+QShq7Cwf!xn%vz!6ucofwJ!y4NqnLo1@DM&q(24k$sHU( z!TS=Q7)Zefl7l&ju-%Fn;)5xG*kfTbgaU}Y#-O1T)KL*Ki~@+gI%peC0ff_EK_e)D zan3oDBPnRBLShsJ?KR_KGzBouSu~8H0LiE?g2qw+(e(^y90d?le*lfA0NE0pPceZ4 znA-Pa+)O0t%dF~7QrrWathgIEg`}VF1Wr|C1$dewJLjiUFdiLwD{zJ)JLhMT^l?^z zXDPA*JX^6GIESSFuLaIkWVLvnBCEyoDc}r+mB0mxEM*o_FcqyVS{5lT1%6BcFIZrC zvRIMj$r1`?qLt;zQVM1PS%@rCoC930$ns=`BFmGN6wJoCEKgP`vOHO>$ns>3A{&uw zDVT?IS)Qy@WO-7qI3Bp3g84Xs<;e!cF~E%!aIyl+lTC^vftxAdT!bOOEs88Two9KDYCfOPQg;Nvbflx$l_ur1)L((=03ld6hmxNXpMYK=CK$1>6B;olI&*_+iygK6ST&E-qUC2TI zkYoIuzTY_sV+rVVNkWpGyRJ!?NSL`>5~h-K*F6cn#Cm!pVJ5Mjo=I4gSWmAcyg*_- zy_4`_amMyZ!b`*%+cya>m7q_*B)m+5KK+yMa*-4RlJE+V6a$m6l1Pd{NmyAV#o#3T zxg?tmNx~~7*<@%EUM0yU!;WHaHsH-EUC84g4n4W~XI$}l=J|qHSW)eOu33{`V@Nwyuvy<@mkPFzGDhZ#F{NA}q z_@apKc}e)Pn11t<@Kte)FG#}I5VOYKR7v<2wyeP#k0g9oQZGMF!uQ4Xx;P0TUtUIE zS(1b`IX52DUJ`N|tpP4mWWUPtL~c1}imXsP1zf54C2&RANDA4 zt>S0Eb&5xT<%)-a>ywbvUJd~_C>{iEROI}TO-aZpG5dg<754(SD6%x#nuMG*!g6Pu zBFmlaN!S{#EMayivbSZY;wIp(B;>3TmOHx@S?=snWV!Q65`L3lvR9Gi&OSw!JNuKc zEv~?F=YS&1or8+YF#r!G5e8tS^Vg?IR8bU%!%0*S#oX3JCXtsu^JNlcqEwtpqM}4z zPAAa?q91;hL>G#FSe8bY$R2Ff)96x}Vr!()6*B&7rcoss|FzPnvcz+1r%@G&=hjIh zO)jaMMpt6^SIE^%qpMuR!T6E*n)TD@S{eEc(&#!F`VG^lsto-`Y4i&j`i;}*dKvmn z(&z>W$TUr(U&r=fkJ9K@ zq7t@AqX$$0Orr-?0ZgNZB!bpHjUEBAQ^wGDe_b@IgP$aHJPHwlg3oVlfY?d^i8VCbj4$6osmYI9m12wOhukFW-0QdF*}Vo zJA@~VIf^`K%vIz`W1ixE;QUnjCQlj*6nWBEsJI8CbW!Tg#0{!|HC9*%m%4M&r4Tw! z9kx1r1;>}9F-CFBj|fFlU>ct%rpB@~t|&cic^Vg_r>#h1jn%G9<5F}m#97ifDKng) zygH53GQ$e>nl#34-;aUTrZINb<{E3Ne%Y5&C7ECLr&L+ymjfwPk@@9d zN>_`NI+W5ilECiDODBU5&C;5l)GV##iOtdqx!RuYbF>BTco^@fmozidU``9 zs&<~GwcR=g17d4&|pvS*1iWC;t4)lHgAV|f{*r1&@fN% z(Y_8E?g?h_YoHOH5UplIccdp6#OwndQy=J9PcV|%2RhDE z2lauD_XKm9eV`LOby6SbL{BiBA4l6HPhE7Un8}{H>P|6JJi#OU0FF-e1hbl>p3^+R zBYYodx+i#qISM_)6HIOPpU(6Ik1+dBXL;&tAz1d| z>0<*A7nXf^g75ki=o3%yU7rN)^@Mo-anL?b%MJ9FALaIYfe3v z1K=^m{{SBMGKu^ZctY_#;7P@IfnR!=m)-`RQhW<|+RJqR2JkDz*MVi3%98gX(4}jEBMa!|DkQ0@W89 z2x^d}c;E_K$qj}2f*NIM%myRuTOqcRn`9~G6tkEK4CQyMmevaq3EoEQQ!) zd%2|$+sm!86atj(<<>$xMSYZ|5T$G{w-I7{xvdaSTkWzGLY1ej_E~xXdl`O|>mbCI zbH^;bP%Y<9LhNJfoSiB5_no;e*_qckkKe{uLwOqI8I)&Hoyn0q2kt@vJu_3$`K$B(Y5bPP z{{?Bx=j3{2rr`XwdH)Q4T;pFir_tCuGuHX4dH*baZR6iSygttL$xPsUmArorKmXtT zdmC$%&dK%7%=yk=nfK4*_89*rw8(RE{W4SP{PlVN0`8abZ<$@?6?6SF6FM^%cgV1R z-d~RLBqv^+lN*qk_*+lRS&PPjnW1kru14da%p~7xT#3JTaAq?11Hh2X6lK4np_#cr z-0QUgQL?ka}(}6j$+X5z|k3*xmkX7-a%$&W^R$n6jWwq=2odpLS=SlZj;IcROV#n zcBza*Wo~BfkjfZT=4IwCdG^x?eAfKT+>QQ&&%)qdilYlMbFVz>i5-j!GxIBSBpk)C zp8-RCQD*LQI^cQK6PiBG%>DnZ$zh}H#hH0PpRe*?4@p`Mb#X~%9@O?rQCpgshqQJv z-m@$-4}bSPi_pG2Gmm_?eF5IRA~TPE-HzJI%si&G1hrL}d0cBTYO6Ezgw`U|)@0^M zt(Bs-HZxCYEkJEuW`3`=0&3-%siqz8GSt>*=4q{6g4%}6JfpRXP}`W9XSH?#YMV0i zoYpebHfQE}t)-}K$;=B{Bh8D_T2^+K$Y;sDGV_Mk4&zSm&CEN}U!Ox|UuNEu?pY0$ z{h4`RdgD{59LUTE(sv%i6%J;m4pbrZm0zQFC^JxPxo_N!jXXZh43ZI~bNmF=!nQ#VC)HK-Ck@=hNMb9RX*lU3V1304aZ&?CkMzRZain3bu%ZACK&C$ZP2 zm10Gl)LPN6%tNn4Vq4Mh0@a`5NE=1JJC6mFNNy_{juD-MBkdIZ(L9z!BEhX_I5@=4 zoDPa-;iQg=zIKVESad2Hjuo*(r?cXjIH`-G?^J?k(VX8Ql5LL{nC&+=RNYP@BL z|4#oE`Sw3lh@Qrm>iJLmQa$jcaJB#Mm#PL8qgN4Q!&fo>O5?9K{#xU!8h<^4I6uwx zE@C|SYS1g?-;2h-V^-m5D}AJ0^&?e?R0H~ZeFrU~Z_Ip_`i`s%H_Ga{(7`7TDa6V<|RBz za6pjeoOg50=#oRzWyDM6_^g!u{G8knz%2cf z?1mODeNaXlIHRu04K8|^;J%m1``)Gm?=O*08;t+;6Z3d9T?wvLBA+}7|KrntSRUnu z6nPHuYjCY^$_DUul)VP(#yb2OBZ~eMu2DOm_jU3mI9kH*uY@Bbi#(fQ zsPJ&n(jjktgKsfPkD%5W=Z!A%+y?W4O$;r4^T@yra$|}-SHb3ByF<$~{68~qdg1<# z)uU6;@{h`lyg7zX8CUcZaII&0X3yFaz3ES1`|lMI{`aW6wnR&xWJU2GPP#VIX?7^M_u%fSi{>Y1FP)l) z>>Cr=+Fhg3(t+BOFWNRWy*Iw1@1kmZ~{~r}xvC8{hoXpDEelyE@U*ttr_> z8?$e2dM-vW%}vkjmll2Xu5Pq+=>LSeYi8ep>Ah1db(_&^?z$ja+W0@gPR{PzwM$}t z*$OQeG^JEyxcb0UynE^r7+{;j6?dH$Ej2Yc-D+lx)cE-MixX>HSwrh({b= z)_3i_OiG_~n9}EF9+x0J3O zUgq~r&w1v5?(mc!*mqDWfAnEWU%5|8Kl1RTXXic3pLBTAa|foS?k60cbY@CCtQL2$ zr{Z;pP6y-Jbr(-gREIv=VOe{v5Cu-o)_Ck3Py~q1@I&0r>=s$orhk9{4ZJ9A)1?Y4$-dYro{Y{ z4;>e^qG(AJt&8K~=0MyXX~#p+V^uO-E++3fu=n5`|3zyL9c{SRbgS*HjV@S64jmhv zO7AQ>qCGV?H6J(I7wnIobm&x*dfe#D{*lSK%O)@0JJsB8$ZtJ#f*~I@G&#F_aPr_@ zLwN@@Yq)itiQ44ey&7+gOKwf=-`$ze$$vU@yx~5wbM;(zde>z-{bCrZQP#9Z#&z0& zOKW#)I&GUXe!Qo$t)x>Q@>9z?^$$+ISuyfg96HA6S=(tf4dd}byxQ&>&`b$3}C$2H`r-I$1eap)wIcyt_(PBd$A ztKA%n2b$eZ^bdy~ZfGaO@dR4#%xr90Y7PG4^rg{*s1OagK8{CP;}C9i8l&Cl1(Gl* z2roJGFe7n1j2LS-lqEy)*2ZX~-K<6bgwoK6N5rvSI>dXT*Bm<8q#hH;TxGDgPc+({ z=GbVo7yYrNGJ8}UH%Ghuy>WMEs}aZ1Qx0t~Vyg`$dfTB>OwzFlb1m+S4-PhWKp;Y? zYwc^|xK-_R87c=S95iaIHB3@qzxC4;+VA}|1@|CEH!XW4MB}|vlXJ?xQ_wPW`g)tL zfbRONTSqOIn2fx{&mfbP zitX8SrC?_^UBP!}`kJYkOX36bv(Yaq$xk(~ zpL1Oo0P%1G1Bfny%hf2rPQAfWOhKFmSPI< zZ-Q!&r+>?em>j({OELKg7+`Yq5+|cd$Yck4rc%Y4}iP?;Cvx#f;>qxn!W$n}dT2V^<&<+>@?& zI?b(dwL3Nf4}`sbUzh@!%iMU-XvWD+6$XD7X#?Tfnl(`n%A z#l)(c;VQ6gj%(2$FhA;))kr~`s70Uml2App=nGyFs-_lw#wD?^iFK3H$Rq_e>!&HS zc|T3T&A2p(vfOLYkjpCZbmFh1)1+2oiR*!t&-sT=H@P{H&LIAe0J5czR8cH@r2Cg) z>5LCVZ;{Sanj`wnp+^`MCux5(prhY6qm;6PO6IT{)8&3#04CznM3dn#!lCRo&}yTr zWGem7@lK;2Jzo_amwRyUYBhS2sC?lNY71*)Bdz9egKNn(uD?+^%SZ*eL0YZ^2?kHn ztSGDP+ECozfdNNJL5M(%q!Boo4;)%=EM5thurq>*%TAi~Nr#)GjYy2ubOWnh^b12; zBVA}i8XRla8ixJ~*Vo|EkHO9Fj<-jnQ(TLVb#Z(}rfhFiw?%hJOBj(yp^eL&=rkDA z91#()m+<#K*mV33pbvN8nX_y)B8Ph{$9$_9LoK*HRldvj+KLRoM7IOhxrOw*{XEf z&5>$nTXc!7*DslRZOu+I0v6S!h$^P<>0I<;sj4=7VRW(t?sTeM1dP^4XRhW5 za_^Gm$VT)sCMZ}W%uUWm*CAnb!hvOB^bRj!dVh3_L>(vU&n@cx8kLr4R3s4fFA1X5 zAc3eitI?L_kI0Iinv)>XF`nn*f=u;Bt1()yB0d!%-+Fjmj`29UUH&;1-FoOqLtO#t z7@Sf0_XyTl;_tDMXd1R@G|cEtB%FpmvH4`$w)UKZ`}a@oo7#PzTC{FHHI;Y)CWg~h zwjNq?1V*H}so5*0c9)_%U{R93bRs$^|ExtXk$+woT`vC|#S$K}r?QIvuw?1Q(GE++ zpI55oxDIEm<*=$_gSWcrP9=`Ut(m!~mPsAKNbs~&>V=ATQzn(X=cQ5+UIgxFCY8M7 zsniL@`;<&7c?S-ofY+OXyngBOCT4~~TjJL*l_kE(mfFjfqSQWZOAUWs8GQl@O{sC_ z(xvt;H>;~ez$=?y6-cMmulrwEeS^08Tx<0Wp4DerGjCYBv>Sap$X3RdM$(+XHUU3R z{8@{BCjY!J`iA^-H2OaORL$v?ESP_@RQ!2mbek&}&d0i7Uf?QCCFf&}krsZ`yZM3hz`Oeo$XQoLPNjVm*$#68kgu0lvEeNP~r z{4B(4di&w|TV=UKW!7WQyc3PdrFb3)nYdJd3*3~;%S2x+Z!k<@Sa=z%zamW_OkH+*_BfLupmVjRQ^UR~ zw}(zV^hh&_oy;_qgSa`;8g7hWM+d86j@%z!h>4Bj6NgSSNE;o}M77<-%&Sm-S;Rnu z-@>ET6Y41rfh%aN3~N};HWbWN3vvRCZ zgnumLAjbc5t59OFDa4~AO?o38Y((oh(FSBfEJPXi^(YhtF_D10w2*@sf1k@y8`f2P zLm>w-UYp0!P3*Y7kb@YhGIM$9CU)GIi$M-zygpE>7>%(9*%)c*QhjnU3sI^$EU262 z=vGxX?P3<9>~yPgTYX%dvwjkobqnwi=h%QM;#6zh=7etc+lyI<@=U*jsSyRiy;^r$ zW2ef|{Y4B!_;0_XdkBm1wAJM?HXww%hEaydh@5~Y0B!fZtA^9vFKb&Lh(*eL5=*>rai0}*}_U>I&R zT6O$W2oDu85Milbe98tQjEy#SG<8j#SIk0`Mrs^nPP*GvJWQFfwSZ3fQC|gSD8vG_ zc(<){@|0p0q73+Bx|*(H9Hyxb53@+Iyyjq;8u=xHJY=2Q>0Ae=Tn+Qk76 zJ)+#aAQv<6jy$g6ZJn`kM0{0Yylz1*V!cHSKGH4(mbW1)tB^J=z(X9_k|a)Jl+j5A z^Hx#K0T!a%l4W7ZBUGY(v5wzS%tDm+Wm!;Lac#WahRdRCd44eqQLf9fs47NKr`;G- zC;@XN3sF8GrmG~=Y$$POTVuNd`BfnYF@Be4Nw+aNqKC>i6|)fKUqlce#Zeg?t|LO= zwixhtg^gOIb!we>pxS95R=|@2Do&lWYL(7Kj80#x++dY>lmq2Rs?w&h;?Rt6S_cr< zv72TFFZ#6$o)8MBjJN@_6tR+HbreS_m}s`U<1q4Q*CbVXXKEf1$(h;d`K!0i&Kx{2 zz5h~paCSRE@oWw7JQV>+ZP!tXr?Fq1>1$sA6YbfeMA{KQ>q7d9Sf8FtUjzPjhKGb$vh`ZG^|g zlUFR~<8?VJw*tqgOi7Ea>O|+n)UNrNSsdo_%MKb1<@!`Uu*=rw`L%d#a1irywA+^{36titymuI*{fm^QUq2P4@HaSM;+E5qs%bAbFf^5l$maR|+ zOc}l3ptfhgy>DvY%4ML?eeJIjK7#DKjB?N_U29GWNi zL?ivNW&fyQzZO-Zbz|FdZr7fv-3Rwh#TQS`;ug{@He1&lDk7P?=PrhKA`+&N@B>u2 zR)+(8iG8B!zSC;_l+nlqm@naXhBsM>&lrj4VWiX&IC!XZq&vtDt<2|)%yW=0ErWb1 z8Bv>XXOlX(!|-2?rlSMQcPv|jZ3{J|z;RBah}w>pSd=drlq+0qDV>e|yKqW68KI(= zWBAZY?p(G$NmY#|x){}#kT$etr>6EDup=A#_(n@y*Ex7`B8si1Q%n^6&Sgg@sS2>W z??5z${-R^#cP=|Fg*h-iKZiB`$(CV*z*WSrr}9#t^78U(TVUT@wkA;xzdXs|H`6(M zI&3}jM6~13PIU ze&8VP$+SF7n7I3;2k(buH{3sSAo@CrPdE3YIQK#wPB|zC^g%&M91(q5cPGX`ot=A@ zt(?bs^En)c&5PfuAk}@#R9_XJL_j^l}xJ{_IgvkJPoX0{glDzU3N8a z-?Eh`pK=LKOtL^QNo7P@jx}+(`P1VqX2*_-@(!CpGtd>))u7C$CjdRWfLpWf5SRoiL4WC0Si)3T#3#Jlj7PCcA;$~ zm-htJ2yi+ID;$(p`TwWodfj`!ttX`5uwE6zSkgFk$^hDtpE4GG&$g_8T8^b~yS)?J z3dfpg@)5Q6PDI|66+9OZu;NIQ$u}-v)@-1YBrEMVE?>@u`)HP?ieA5Qx$8C0w@Tj# zr6o4fPx(omb`9f1(g_t;z0<{Jm6tS(e(*UjsZ6X-`bosP-A^Lchy5gCeb!5=5bG0u z60ttwClTvIeiE^GOi(usTHiygkNZi)@-x&!tlNApVtv}S-Zw5^Rc&+#c2Uw>*1d7L z?EqygRM5~_;HPU=LQ^zIDlMqPjk1d+Tk>S2t^oR(q@)-D7RK zZTYHpU8S8N)3zgW3%+9#J6GQ(?d-8F0YHwq4^kbf0Rc6MadhsImP{X-sRYQZeeM zslj#3jus*>J<+9-6-z6w(9e}=*fL|-#uJC-Z3;0fMA*APvybv3g^x9Fn%SkgD78bBpu;9i9IrHvivI z`QL6W0R!{DRwgk2e~<~x>Ag^7b`7asYyW6id(sMjh^{h*a1pZl!K6f1|4@|3Igr<- ztXLb0^?gY%*ziMHDsH}1yg25JY53jX)mE)jg)*q^>J8hK4E*;kU!mIQZMKmiMYZHx zWr}L=ud@YlpYEjJwmG>^VaY?wmkkc!N|u@Cp7oH(#TTt*51BdodRtNtB_*}fW)-5H##WYJ z2|Kz;vAEPSjtyl~D-lnXo3b9R)wS6V3!9y^xNBFe?%*^ldMrGn1oPSzYjh&cn|}IMa)K80;VnEXG+=a^{xW^ovpMRSFA)L zbicu7=*AVRkc8c|s6~5-_`X#)t`KAP>)9}v{+COk8|@0`U~QA+ooChk{}j%6(lOt> zVmaNKO}1kq0cWid4L0EG-n?Q(jV!m4h3b&9oF^xQe}fCVTH7DP+7h4aZ7WuesR7rm zgWk4cb(2Y@vbs>F3ph!v^x(j~9U-U%oLbYn!i=_C{kHmPir>2lLO6EIS)0ukXl|ZgZpo7e8sQx1cJwA*fqJG5cw> z=q%ebZdtJ!e9EY=r5LeJMDSHufsK>ssWJf_2W?Mspw7I6W_KbwRhrph%4elaYkM7Q zhs1HYWyP{u1BaxO@dqWQHuioljWh1YqitKhWyMOQp)Fr81#vvN8vR$&Hy(G3=o@2_ zk9)^hL5X6j)&?u35;n4urQj{H6U_R;tr9Mq2z#rwR#|LKA_qvRz}513dZLx7l-_7X zDy0v1ReY&_oVWHG;z zatU0oji922F;x1g7_gAaTlZ#W+g5tdidA~c zRZLPyGhO4SPAi|*P{r{-#ai!Qp}ocTS*`c4SgGSw+ib4Dq{{5o){gtF&L7*BbpMLg z#*A z^7VE*==?^{nqL-n;1v#S$Gymy-fdjNsEpbfy&Nr0rWn@EABEgwXRd|@Oc|L_49t}picc9dbGw(RuIaF>s%)2 zysNYqVhcmFx<@<|VK74|Yl((KpiMRoO#hf1X9 zXpBOlQN>7}NmTEeD9%&8L}R|l6F80eB2P#(m?ycyW5+RN@>M_8pnkNmLa;w22gP4yCL*hljc>NwlvB{1URB@9Nx7~FJCtx{SBF`HYv&?zu++aV!& z)CQ-4(`jW4byf_$KwcJA9ROSERx=YS(Jm)|W{-^_dpCtG9xGY-H^bHPZw9L6-#yqo zw;ScAb>r@vH3P`F8~;jpW}wSmD{f*@&@Hkbjq@g>1UgLbh61XmhL@ zEGAJep^U8!FQFpqT(!`s?Q`_XMxffIYy_%Fs(VekMprVS9EroV9Mrin79)f|*uH?S zJ&!DX*PZYQaPVx-kFd+9L66OHU=eT602^wV8b%P(N>seAn1wpt;x0@FP~gd@mEhj` zNUMUgPKgq6T-hLaEL8HQj1tKL*C(i?ER?*an1xDi3M(-v*t@ZB33+BF*?4{do$%LT z*H%}?(P??aID^>b1Y4Xcm$HgZY~B|QV3UqrczdJW$o9lL#)evTeVqKw`D7yhD>j2P z@`jW&V#8^pd*ascutlCMpc8se#%L>#7-tZBII;Q}1$1KX4r5auf#Gzo=!tRIzoid* zuFRzp_egg*$rgu_#ki719oX73sB3enL_Ioys$|h7v*p0BAkLvp5^`r_(Dtu{PSZ*)zWY*~PZI?m77;Ne7H%e3A; zm49;(`BV91qJJUNxD)B<8DYt?0seG8nZRER149~~e|oIyhnLdDR9D9Ys|NNL7qd{o z-)8hnl<0JKl+6^sBA2a-S`h;kJPqesbiY3)gMc~NUb(SExDNxII#dpNix>$1lmL8! zfHicw@ob7G>b2(R(9TXWBA&7U50yMJ(|9}_Ecfk;b0!;`btA2hnI?Lukb^qDpXt~F z198`^hKYK;HGzvbdJ@0Akb@dN9nfGguy{{*;>~d#9WB9sb^)E}muEV$l}FSjUCmoi z54d%n^k8vf(iEUzAo`;+)$AA$KuMdvMa>_H={pPP1bbSn=>Hi$i(V2>BjiG5KR zoAS~9neJKD&C?akHN`B{@PbSamMFNHlg_{ZCaGaOxiO-8n7AKdir&!)KbpyarQrpy7p|c*P zrNg64Pb!Qusd=}7D7?ad+yXq*adxHwdpI~nlOFOFy^O)ZX!%hg2X*{3Gvo^lJh+h7 zP%h(K{pi5>pqaLQP{=_I_hvK*jOaNbd2}-N>$Qq*sbSkPI zewIrmGG7DIuE|jx`kXA5Sl+;{_BCN_ z%Hyz!*P)bN4#->et)lDl$wYpc-=Tywc9K0WPLWv5sx(f|BNFtnE^g`-GR}X6%QzWU zQnR)#!(?1Z&DxTlp0yL29TP7M>sE9cJ(*L+(2Z8(+pUhi;*qO*O<&Be7SM@3l)@JB z(IMYaLX*R>TC?6!Mg7wv2BJTZstbvLi~ZivW#E-ZTyKvh*EWlJsAOp{ixvknqcQx~itK5{EX>IT1xm_W zu%IYVvRNtFR?I>r?IIc05=LJsERI)AkHF|ZSouR(XjzbNFOh8GoR*o3fmz6RZ_URcOM z4S!Rhp$CV@@-^r-b!{OBHKZ0uUMW@ZWJJCO-Jq^3!-!{3zX>-Aa^dwnmtXg0 zmU~P-d_PXu=ECb4F17t3i&oEXkIjeg!wNSSUe9fhC}LpYJT4!;7niYe;q~zI$RY;9 zKRzG62hMaZydHbB=i9BrGr7kF-6MIK4_9l1`dDyziq_#7JT|H{7No{9H zI<_nTxGk%8mj$?T&M?OObdy z$1DdKi$Vj#9*KTZ=_~&1ht-|rApU>&v!Bm_M|{0*YN?&B3FsVE#6W!gA~YY*Q9HCA z0xq?91#gK}v+#dm0iED~;}?#UhkIk6OY{ndH&xnp*c#y)DKGEOonrZu^akXQ%$x zA9|cYKYamoT&_67us%$%sxTRD`0?7I4m*E;5qwmAPbP-QV)XD3>Is>rdHC@XJlUQ^ zT)wtAR%*V>J#ClCi9^MQR&p|o&)&%l|6mb(RC{k;h8-UEIdU=#9%q_rU|(MxD>Wa= z%dm%v56Rh=0n_EeW;QymH+mnoFdLOV+F#q5hO6q%puy=2^%2E__Xd)h-Mt_e)m;|s zNdgO37z?wn^&F*7VgIsW-lqvGZto}zB7xn$MU@0XTcP}i@6Mqs^6@<4;8ae(Z~IOLLzN` zBV^|91FDxkVqEf3jpKW{R6_qawGU`zqbq%-Jh`lPdb&EOo;pn`$;AB^e=9(cacs#m zm$?}0#QewNcrcer*oS;`oh;VLXP<-7aZplF%Y}vJH5oV2zX#U7hZdh=N2&# zzMc=?6MZvZT04;E6)_OLkq^)JU2?70KIBu27zjU@56?Gc(vFgPzye76QJmEGE`K-)W8z&?FVcr`nIn=No~bew z)=aZdS1PQTVo8TJ9a)cARFVp7rdg;Y71m6#Agt*Pd&n>S>@v>7cW{#vBl}gV08d(& zjml2<%O!w@mwVEcrWKC2T6k>`ujlk6Gi7^GoH~!*Okve}n8<2a^YGaAl;-h8aZ>X| zndYK%<6&Y67}jj;NzKp5(d=PjX&TmS?JFmF z?kuHD0hJi{tViwe@u`KFsP7AziN;4l!wajz8we9Io~TeG z)t44xqN;z-QI#O!%URxW4>O|RQVjR@ji$Z@c&O-{%=D)7WN@M{A9{?L!cH?&n4u?G zO5V@EZZVA1__Bra&!-$t^A~xU>?K-%z6d@leQ<%Ipw1WNE{2g> zznqg*iHK9o-Wt?ql}rfMblY2%cFv}27spD~M+fJ_3LOuDisLkC=So-az<5W$+`plS zfr?JZI9CnlBS(Y6z*8`u zD<$)g43_+?p4eASvrtFsSW}7xZ(BUxAUr~Niu$R(*p8&y-@Sj4yj1(&nf}4GTLu?b zc?$H~kyq>g)gpPR|93_D9WKI+1^R9NwMYJoMewjR8ywv~u zBK-~*yS+L3@gAeAf4y3}XOXQY$rgTs=bMfVn2 zl-7apae+nFemtyY%jn04B|(dRR%B6H2cFF>u*lkv^|`g^hleFWi|#A3D6Ip}-xXM7 z?Uxq)*I`M}qMsL8l-7aov=mrm?JtQkDs0&q30hRxveOd9E!)~JE&54O9x@WN=>A2O zkI#uM-3`WtSHjUyL6qPzUilbeld*H z`<2X^CyR(H0>x^vj@4@KSPUc8esux0M8w-A#cH{=qjLL&#V}Is*A`GqM7%{%thSV> z{o-O6srKs&s3l@F<(6*xooud~uybrr7`(NJfog7XYr6~rK4fQ?j)I8iptqV`md_V4 z5dJGcc#R-$kqCHu!Ti~7hbK)Y^yO{~Cq>4kX1j$WNO+}9)%E(I7ojiD zBNFy1ccsmf#3-17tXRm|JR%{l&O$0l+!oA0mM!F59+8mOWFeI#ZrWrZOBQlIk4VVp zWFeI#UNgx+_6#;mSzeY$B;;%sQc2?N#|&h}Lhj8Y5^^pJsU-2hWCpTqA@}7G2|1sI zRFZhbG6Pw%ko)t9gglsqRFZI9GLSv3q%0@%h=kmeg;bKbvYdgeSV(@+$2`!Hv}R2t z!kcS8UVayZYN#Y5jzc(2Hz5l?)X-qr`?aDX|BhmNW6 z{w{|`yc+}dK@JxIvUuo~3h(c8XvBMU01t9FZIs1BmsEJ-884eB(unu603K-A&dB1S zKPo)&LX*WKjd<4w@Ib@Wi7XyEqrwxfGFd#*i1)VvJkYQ$p2b5?RCq7Rp%L%p0X)dz zU2^MVSsQxnp2F92sl+_wd@NrUXQZ;I6^r`sxm2QlJAkTWqkRFnvPBhp1J)W%CF*wq zsEUdg_p`Q^Eb2FNsYLy509DCGGyZ7G=f>kfILxY|&dnndv+fVIRuZRoya_=O@DX+m z*^@^ksVBNdQLko$69kVm8ic6peic%D6+NHXL0a%B#UaL@M# z(L^rVkdncdc4Ge1>l|NKLL=T)DLg~ND#tH(cJi7XJ^q+WCFZhJtyoz+bQD0f1IPop zRHFVqgsO&+m-;PQe^V;9O-Q`d$r_Mk;=awVJ3+>I2hUtXYK-b?N)04}O4!su;;0x% z(x~{ZRm^{^tZ(O1iTVS-5P)iAv3jw`N%X_q=G#_r@|)oAT8N1{#C^OV5!aQNojq{?45s&;;BKP)ibgBTJuR5SN|<90V7ap0gY{M3Jg#^VP68`Ay^h zeIX|5`L>I#Xgvu+@*T2$SrqjxGN{tOsp^*tF;UfTv#LBKd=Mj(EA>GDsM5cw>H`Zg zQI)tAnB>Ys!mDxilxV`BzncbK=0B+H%!S#gt|#3JElBbo2vOM}msZFR)x_hYe3?Zx zweJ@(P{}>%wkQw~1hU6kOnw-W?E9vi7Xy5OVi~e zW}1d?_7R)Eh`lAPThNJpzVrLi^4M>($38U;xa#wVvHnT?Uo5~w9luH2;N##tRH}S9 z-+?EYNX2{Q+73Y{z6f}v>GB4H&4Zay%`fJn&+VM%a8b`WZWIi2;S6S~{czEQfBH_g zcm~nfnNW%T%XIrmWN}_7jH+KZxG$GV)L-SG_G7pUqv~^4KhLESmEYmktE!{Cob=#a zYqrg(&sM5ir201V;}_tehElpspgjm2e9g!XFSNi60y~mHU@o6b^lRMkl9HAiABv<# zfE{K8c(|KJeIh|0<6JtAh!-S$TXpx|k#v7CB`7&TCaidHF-1nh_knfa-jVeEseCel z_ofQLNn^F`1M3dQPdceVrIt@7@Y7PjP8u;RJM}O#)j{-geXkm=UAO1SViqdcIRi(6thst?tl`9 zg5lYE&bCg}M^$5d+l3!k;t2Vzg_x-5Kb;pBM8b}#y_%F_;HMmT#frMbC662~D%+JB zjoFm6*#-;ek?rb?pKe0Gs_Gw9vL}y7>>1aUJxP44-G)L);72**&amD)xhaQ6z_+(?oc6Kty(DJ$O*u5e{flp0B8U5@o^dMO z1gyRlCK2sFedCOjeEOX>t7NF;z&O$f_mY5dphYJKW%O}^xf~ktt_k9eVcgGV zw$oJR-5Dkk?VEwjcA98hS+J_k>%CzT!G0M4t5z}nhpJT%F{w6Zs!l&=l4^4a4Q(!j zr;nSzIfq8`{xwi?HGK2vTt7z~?URY(?O_tp-s@-9Na1#_9d(mtQqk{psj7HyKAE5& z^7S#xMj9Wnvge|bZyG1xQpU^N`lHH9#ZMQ*NM#SWAu$&bXU+4}4kc>!DX?EJhLLLj zkgL`q!fCJ(gTyv}_<##qLTI5_U$1d ze3=>0$Y4hp9RPaef?QPgnr!>Hya29*wBq{g;_Aaw17^0ab6}ZkH>m~rG##noESK|kc0RqW_zNl zc!dG4JTsu^df>RF3+Xk*EYu!$qX%gqJRv=pdxyv3MK9 zk=Vvb@6DwW_bD!hDh_J6DNh4AFl$=hPs-zin5=L! zIp4Vu6ZMD}!-7Z%*5s*Tof}o(UWkdRe&FWClq!uR580#`SoucP4|7!+CaStGSCwXx z8{R2Z%~A7N(Fy0Z+VJgVph2y`3%IW6kBGGVva39v{|7cFpJUaDZ_yy38)fMSWMN zTW7Pa?6+7rNoLm?o;JhC8rojWLOsvSHXo%&qrintDZyaCEei9CN?u*eLM3lVEAdbe z4@fD&;6^3MFDUuzViqcSMOsNBuE6j$T^sXbaltnmu6BmDW8+|FZMYGa$MsI+=7rg) z?5Vyz0W@?EFITw2iwCB$KW~1q=;n)AsOULDMV9{6?;e%dF(oG-&GtLiFx@X}zgdP{XPM4JC}GsoFLA z`3eGSce;R1^aJVIb@K89ieBO2BJU? z=+bmd^x;xBj3|}=DC8i%c#GM?SAU??@-^s|^Q}S-YWUBbdZmUkcB{i0y3G;1j>?)9 z9~$&5)Ev|xJ~Wu+z=sA?Z#}S!UPE`ph8u;C!Dts6IC^eRh4pU zcD&l|>aXQ|DyL*M2bFvwr)CrfRwUt?A+=Z4%%=-EsNstR8hYVlSqc$sNqWm z8hY@SXubwLvVOLZgBrw9L$7tQ94a_6ny*1OtFFEWCgZZ(H0|?^`M{PV7fI?6f=vH9Jx`nz$;U6x_HF6SchF z)lCoy*LUnAcx2#x#`YL4n2xn;cw|HS-uNoD(m1(DUMk+>R+2@y@{pk9Yi%EIVTqyC zZgBp7h=tltaQ=RP1C zhkCx0t4HBr;PTo>Vh7`}{UgZ(rB^M)L`{F;w~q`G-jubgb6Ip$1^+P7)m)H^%0##_ zjD#Z8bNAt-<9d~OyGk-izzJ^2SR7!{J+IbZz(Ea-|qIdd@4RdWp{N2C2{-3 zmo!sUqW(h=6|(roObC_jjfMM~Tq;p-3Zg<5ar#WrvL&?5)#2fMGI2ZEqBYX^-b%*Y z&R{pe6(3zq3c*kbdwteiO~raQgSx$LQLoLV67{87R4t1Sq-IcgmDQAixS*ccYN$kg zRTfoK<%bs&IR`3UQt*ky{I1(8_J{~JWDITWu-O;)OcF6eCFoyg4b{{r<#BL;Y3yhs z_m~sdwtnx=DjuE4QFahY-M#9KMCfKK$|{JMmsl}CYj#bRmTU}--qpG@RS{bCW)XkcC=0f|rc^A}2;(BeCy zCRc)i;GgsxiHDG$vasSgha5Ld@w`8Eb14S{#v2}dtaDDun+rS>Is+H2qH`NjFBo9 zf^}*&eV5_1JR$+l5c3A>Gm*rT4sMuC2xH^y+RX2JbEyRVP^$h2s$_8_-#MlUYOShw zCd3NZW`Z;#9!xbmRa(^+yfHVvBzVvSk3yL#u0dHyLni8Ffr8d#ybzZyQ52{?At*ip zY+)6Vpgn;SB@t()vw4R$W$4p#Xau|cDP~%D#F_n~+Z8WmB{-~C?iLA@f(1^G-ZKbARYs$@ssBunGW9ldVONZ)2 zsFS~ypw$^yAUjd4gX&J~yz&Q++tvoK*?em0{2YcxWLe zsuIt(gp4l3S1(kh3s4+Q3!&%&6i3s7O!8=2fT5xbusBy>S~ypg$^yBn=mIRx6_}{1 zI9HYOLb=if_?^O1uIK{%VPUhVlw_EQp_)!Z|6_0ZsB8(q!G^}h+xiFL#3gB;NWecj_r)XPZBNg>dUYp`*y{(#ZVQtL z_c7l-BZWYtb+4#pd!w;U|Db&*WjbReu-s;0XO>gSxIQ}Ah~HAs~?0sHjhZilYK}liKVDr1glcqHqIu9$Si*m zR=gsWWgxV8N;AWNUC}f=n->GW_(k~l7BLY1Lw>f5sQ!hufIWU?bgO0xs`^a@4;8ae z#ZtEd2%umAn9c(O1o%g%k19S@#6SgK$mGExU~4)Ak1Ql%2yvjsm`93XApEUCc+DVJ zoRsEA6ZwyJf5UIn35k&3@!PZ^$tPn8#+x_zom{~AnDh2hR6>5%`S(5*C(rFZ6e(Po z;WxIa%!VFq{nY|I)bKkOWeVZoYORe@`SdZpCVNx?o%rGj=d?UxMc&ZS>`uh|N7G*( zCK2%lznF~_u4&jMDHU~?&L3vwEcQy$WP*ylk`x)vt2cmHU}fiz^N0lfnLmJ7NxWX> zLAJJI*}T1OEM1*PB;-*(q?N>2YhyR6oE!0g`PAc*AcbJ7UF^omME~Tg;2yEAYVr8I zVF!UY2M!%$f@W(i0Rx1W$6-9eg$o7v!RjsN5ec{1H^55brk6KzAymr%xBgYu4#ty< zSqNYC8%hcVJ6LuJ$IN)-&C2+xLJq1BFIs0Y@SaV+hJK~t(n1bu5bscDH1s3(n6E*f z4cb%4K@DO9Bcq`YSJ(12=(9o7g&fpyz#sa&lI}(O$=9F*4$m&+poYr}H1r_Wo3BAT z;g=P1P{VA2h6*m^8g!4?SIEIU%opULgma(XREt`| zIHi7?F1N0Tf%qvW%R`9X;?Ey~s5{%H0y@FZb8#+HJc)Umap=jLy9BoGX5z)Zlx)8m z*F>BwO~;FUdDyyxJ-L8RyQ{f&_hAUi!`5BvDFt+559DI^;$H?!gsSIt=c;LLh<9+8m!KBSdI&3VpKwKiBm zI7s~<=$3pkVbAxSH6e{|;<y;dvgWUJhb^TP-Zx z$~Rk6%tGi5es@Wv&2Kyq=gryB+-;1sV)av3^E(PTsN#M8ob6*^K+4ykTje_oIjBK= zn!}W+v$6-ua!S9TP*{JJGzg;*C`(L=}ZDY(YRxQj%b?XDg=%eA%q`kpvEn@sb)g8k; zW+8p^BKWBC9e$WZnVrJJ(TFFQ@#T@8PQ?s&xLT`?x2s*fP@Y&UGqpd%y+&7vEN_4Z z7)_qv6R3CQMcWA`s=O`GdL&b{Emb1*+Bl+F+hYEVx9Jf?JT0uuN%K&Vcv?8bBM)Q; z=(?ASce8>#)Fa-_3h^M==(m`9Z3Mm#N~MmkvNQ&5aPOf-@KN8=O!;K+5CIMA>}+ec z;!br0-$POJ$sLQ}qt379=oEN3WA`}IN>4ZCVC>Rgo`;GH zdf^OL4O?wUpFa5XBKWBGi#Zt-c(obF_jQ=7k5C&{d_~ ze>eiP;@nhUuGjK4;2w{4X>jo+d5TCW7T>OsB&v9~b7=%AsyR>ICgUkL{Q~1Lc|-!9 zQ;KUoVCl<3%!^1;)vncYGyHnELF^C5z^x4q&g$rIYP{D`81+N(7X-o~z z=lziZRXD#-OD06ZM*g4y87+y{>9y>(YT0~=Rbjq7mrBqZ{Fd!x`*>2jV#fhV=K9R7?{T2rq zEs0j+&3wG?8jrz!Q4LOf-kOk(NXR37NK2G=E38y!1ecc;=52l>R$`h;(2x0z*imtm z#G6kQCE0SE$e|JO8UB2l$YFVt#cL1hj&?~7jd=S4c#y;Me*wHv?Q_RDG~!(n!W(TM zG?c~bj%xcZ%ApZ&R{#%kI1LoQGv79z%ApZ&ZwL?HHvW^V$L{G zs)&K$;)9171cb>wcr*gHO|EK9JW@_+pMmhNaf48X0Z%I1n&S%ysgHe#ufV3L1QuU` z^{M#AnLW>G;Rt$rM~h{|vVUU{12u>PWf=q< zU<<(uFY1#;41~YKmA!!12zb=iHc3H*^?F>pFrQ55N!JBZ(zt{W1~#+%)AGp#z90t} zv-=N&l3hISuS$C;pG@GfATXuniC!-=*4YtLdzOLVVrtJY$hSikQH`g%7R+swzi{E_ z00$L_tFu`SJeY0$9!F(W8vKm~bfQ1ZO%iE&d>T54jc+RGh9chGm9mOX>?6b2q{E#E zV6#dL_VNNcv5yF0Yk54%=#MR`)ZuSyt8dAr688gcR*-pu#Y15^GuON=mrB%khfy)t z)IxII9R~HSxm2Rw5<;ac&IS16pc$M^%hT@09SiVK!&g(akix;tZ8vaKX&Jg|e_D%p zb|%0<9eYxF^f2)3M~()x6s(mO6JZS+1Gh>1 zwr+E1a`1-&I?=^Pto$6p`hQ5(qWLsV@~s**JRY+E4|SZBvLS_opr4-y_9<-9@%F#c zaZUl9__aWPHS!3hWcw?wCYbM0d_9*++(Usrpk(3Vx_aeJZdzPY2cQ$1?_5e4-UDtKMXOX$I|CNH5E-&XPx`Y^hC3H`WH z=_PE!ZB8#?Gj5W430rVCS0><2oNpNJnOK@;o#YmVM+2pV{3C1+bKf9=vZ@fxQQ^|YgMzQF>B&@>*#n5 zriib_j7~6K1M$JJ+SvGLw~W`dt$QVi1J!MqI`NG$w8>+m4X3SO?mAb`%}?!X?w_7V zw>;jY9;s8u5A2?tpMt~55rFEC!ELgnr`Fp|gn+U2C%Wr!bAUVB?5+>Eu2ydh<8t6g z2b&?HG|0=RvW9T8$&N5gU{}Ta-qi^_zBYlnvsn?uiF&O$T5pfFaAeZXEgrqDPM5%T zyZbH3wGo_;e0(0MEH4NNDZb`Dj4HA*(iCk7M^?R@z%!4>Tlj)O+#Tw{Q_dOU@Yr@k zygExvBr9mHxsnw${|qsaETi-?#6)KqJt;#>BunT-8Db(?LZ{3SyFAsvO#w*STR$uy z76Mu)zv?mL+>C_M8Ey?$o5QiHP_%@MsA&d)B5-Zs#eS7g<3!ywfSsagWv-*wnHEfFbKvFP~a7 z1iid#f$LU)|h4uXy>5UCn#6;iWAK3(r;r*iSL+$CACacWQFh2|P6u0<^w6JALV;Q?o|L)vz%kt*-5v+`oTnFB-@RHu1>z z)Leb~ipKuQi=pI9iDZ-*(!as36V*t3B)c0&?e5hFrm*)PEQKT!_Z)Xbcc`9dKAl-! ziPBke&v9$U4;+}91ret=Me6X(l{)p?wjhXMas}%@j@r;!y63pH5H~sH-io$w1MEY( zGx26ue>7dK^y@Wz4bxVuO|I4urL_ISCiAE-uFqJ0wsnJqt7o=zFpc+3+qD=E$jbBi zg2Ja$(WR{tgQey04yv0pG#bBhHq_iYgzF$_MI>Ql#Eqo@8oz+{MU<@mT=x;QK%I>% zA*7y7?Zv^?Z0cqlNwk@^2;~Z10JF))eqtjYZw(=Lax{(KtPc`;c=*D4rvp@Z8@aP@}(}{j4jyP4Q5-79KQ+EYD48R znpjY-4i^-U8`=7i>QKz(p6KWK#9rJn$(8KGhi|<$pA;s_mF~j{xm36j@VSGs_(C0J zPtK)MR>U!rLC;h%mfws`;4qjqJH>&4`CoI17|h@5`bkPs)xdwdUYH^y?gsI9715#l zz2P>&4bne4vt%W8hMI$2tf;;2Yeq3VF0RR^_~nIfKj9q&OWo!xL+X*PyeS}uiMT;pj)6rrDT!0L%sqriYBxL0(X9ySdyT~q2hkQteO3^4 zV5~bNFXlOG04!g@pgQa ziDVfbMuwP3GM17dCXyv=%X^~&^U04-^V`QbW$cwIX(QFq@#?Umw%yE}PitCfwQLo=7)UiAs*N?e`eW~9j zG!gMd(taHh1Wh%G_c`Z>*-(N5z%^!!ax z7{f5|rQJ=qI2hWoLFhHOo(ZlacoSrFjO3sB?bVU>%plJLuna+`TZI@0=M8KRd97Vj zc@MgVzd zVJ90UBzJvEMF|gp|I8B^S2&8POzX_g9^5sLC(uqX0RTnOsY>Q$1u{n)nKcO-4v}m$ z8rCZ-F`a1zPsFgQ0}|^DL7{KT=Reu-AL9WjDLzH4!MIk9YmqRhWgDK(Fs*3mR#z7$)6@z3_6_uc{*FKVvNDUx2|8GH(XbVAj_EWS! z6x1xjZu<{T?u|CN!tGA)o0>T|k7FfXQ{Fx~JwG@zYxu7V@q6fozj|Tv6LP_~ZgX@eB5-dB$DWe-(2X0{cBU`gKe@Mqu+fWcB<#kGsFE)3 zIhL_OnuNz}Vg+H8jy3x6QlN|>WH~m; zPa*1IP%~lcqTWR~%H|(>6@{k9rFe@xI+mhs!jUyQu?f&5PvCXu3^rP|0i>X3}`L>t~82rltNOsbfsrfwP7hyH_GV=n=;wuX+?X+UUWEW`)WLpV_|UFUcS=}Yl9SIR(08Min4mVlNG2ip$XsCeA%XZp0`XncjfOae zA1v}gJ{JZ_O8Lt++k3#Mi}cGIS7X0mdiT^U_JL0^(8t2dWW7lPuMJ}-IA3!(>s(3k z>%1Pypbu9t3*`GCzo$rlKdyTf$fK6=QJaGN zZ^DL6f&3=OU*gWT@y=Q$`Env!D;r|FHa3JK0QMGbh-U{_K3EKcc0GjVWV;jNlq_bD4BVHpNe$q6X&WLq{UZ^Lh4VIrnLc1m(fVLzxEZpSQ{*o{h{WGR! z4R(|z=s}_zP-AknA%LcajQ0l!YUFr_3k6XP%|(5%W5enXxLQvUX$cO~TK7kghdRg@ zE|}POrJxxzUmp}4R)XL4bEk$XwL?0LV{{&7LZU6KEbAFiA&D{0H4Xc9rIWE&x6aR+ zO0V?Cm2z+I$j~+N%UBkz+!L2en<^xq>s(MvMw#{X^pmQY$OVHU-GNmAG$< zuJp4*Z z&ym};;pjTQcWNS{iE$aei#Pf?QZK?(Hq=N+3^F)s)@%*68FL<~V!2|cj|`pfpv{nlk{k_RdxpGkiV*hmVh?=&h8AA1$EsOUhqQWkJg0-gp^Kj&Gu5;O&+Y zPNo-glx1*0WiyRYL2#fLqX!Rc6m#?Z#}LnT&$K9Tai9(MZtOBISy#X@(-c;cH~%Xb4B#`q>Ft)N}OPEH3;Uoc6^6 z<75+8QloZl?`0yg#OHiW1eXPqC|IW+1oPFPplGqvk7R_DxaY_lfkRey298bugAxDPRS8+M_- z+RVZIDl*PU#XVuANj4v}+2m17t@FVX*6MgAP5CWyZ(>)()`TQS&kTbnK)*X-En<+c zkU-On!l+ZZzdK=7=b$RuXUVkgP@9=~1$v`acoY=^AkntgUE3g~jDx=R9tRUDaG&iZ zA$D{e82yp+^2`z+tK^YZS;wxgE1;HfGQoz#GqM$&d&sBu;8aDBTG4uQkQJ3DD)MD{ zUL&9CAFTyk0pNiz6b?s*#%_hNg?K1;VJSCN)@g!fK91rr@Q@OfT5f&H0Y(#`; zX2%H*f2)N{K;5x;0((TbpJHF2408=^ZIN$DE*iG*E!vH_Xokz69i4|ZDsB6lJhX(% zpe@ToOL9tnY?9@bhp|m@-QddEl%*{=G*9dMu&f4})lOU~?XTj&4(pRxLb*iBdjga` zMR}(i^^GFp;dHcHPeBJ)O!z=-Pied(Kf*#ShO`M`f=VB5FNv=@2(qRf<8mcvmA(?> zjt$aaBxuLGzHE%F4K?sGqO!`1vcMp9W}d--KCt~sgr&@ z&9D2+I%5TCxTWS5mAYGoPSzP8fJ5cglqQkz2G=c<4Dm{ueCLk^#93i{ByQlo&`!kU zysm6$W$ad3B?e2A@Dxy*z^P+=1kb&CNVTDD)KbRkER6;L83#D&{-w;aQB0nU@(o6DH!pLMxLK4b2UK}J;aF8HK=)q@ugM?l< z5J5s8K0*~F^y4e8mXI_8RTI*+r@8oYaSI`&>vpu{cz@@i~j}ZR+o8gRTKXMIaNx{>tI4`13JNcY;7nYo2OL;zr-+B4q zSN@q0np~uL_H+i7DiCGk135bFez3|7&*JcymJ)g4A~o90b_1b=kIT{Lyl|Lj97w0~ zKNhLdD_M=AwDO*|UQ(@qF|6s(X1rHK7%t3uY&0Wmx80dDtWdyfmJ5H#@VXTV%iTYy zbasY2WR^XLL~UHyy*MN0mRi~%JQ}Z$fcUeQL%S86WO8Tf;k}W89)T%~P${5xTQ$?lhSb#e3YgRGQpY=km)q z!093{$}aWt(r{yRYj+4S;ONF8I_?`4%5Uk%y=@oz$>5i9Z~R$>4E-f+NfaS$sUQGT zz)->UcJb(oCTI z1qO`3<-Wie9Ne(Lm=V~GF;Y7uC+hq&k~TRzd-cG~?Ci{y1MpAQBjBND#Z|*o`!Ai} zgMhY88J(G%pE-b_h?`SYMljLM&Lfk!k!g7gq@C~Lq(=_!ou59i_iFUZ#Xy7%KnMtj zU>76prZ8tfyR&EdlKC<&9>@5tdTp*OpQxKD54Ggf#$K#nVt0ZTkfVtTuA0rz}6W4L$7EB<Hz`j~8wY>vVS{}6wS@95V3b_nfvE`kjRv`PNT;vL5^R4QE?3uZ; zJ&?_}su!|P%$4nhY`#@}kbOd~Y#(ILbc4RgZ?cyP@i!MT06`pq%ObGA#nWj41|Yn} z1xE#g+J!B_g|(5>G_j21hq=Uxe3Lyb*@OMxkR&(EVX?R^DI`gRwSVPictO;=ts8S` zWf_tZa#-z@@nm(Vhk#VU35Fay*`&lxQUS?5S=gDI2{vSLlhl`FJAQ#1sLdFm`z%5U z-Vjl5z%hWop+(~(s~d?_2@0W>U2#3!yp+%)ZeHUAeg4@f{FMTMm+W6dE7Kv zX%}DONYj<_FT1if%AE#$U)vj0)bQA8UWgBN@9Z{kK*F=kQHQpVwd**zmm{pGC%RT+ z^jdiosXd!$XzGouMx8m2mH21fN;JTt4R~I7ip6nWH5op5lD@`uww)wZdt5hhVz57pDx1{P+u(Xlg_c(dJ*R14vE{R1d+XZ0gYgG9+8?(Ge7j3(ihvMJ9XNf&95q)RnO z(ghnN>9P%ybnymBx`cxyUC2R_F6SUg7j=-NOFKx?1@6rTwhYxZY4KQ@sSQ=Y6-5;9 zkx61%5ufJqTf+huG~Rk?g4;?YU0Cm3?8HR)HW+`^sRH*{e2` z86&zMSgZ~&UmYya)tYP{D)03n2)n#B#gHrkmDD9uv$IpX@c>ewaoF3%M$oJhrQB9G zH|S+C+IMFN3*)ysf=(LXaVVT15ZgzRP?pC22Z=@

kb=HwKQz2@W;!BVlU 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 jg%N)BNs^24RmYY2Ci>AB`MCoL_bD41j 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_uart.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_uart.crf new file mode 100644 index 0000000000000000000000000000000000000000..d959b6dd46adb5b45fe2c6b85176aed6bfad009a GIT binary patch literal 203026 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�#l6a+D$h~ zsWc2zV+ZFCpc}t|vxXYGS0X>?5yvC1dK5U?=)s6)Lf)mIIy=W|eml~0Lr^0flPGoL z@4vz2(Zu5vF%_Ku6-rfyDA(!!&9n4FI8PJ|D<5q_zqfB(W#Yb9VF1$M;M+H@)Pa1y ziIF6&9h{xI{NU97U00*pPcjkWqt)lDm{s=S`qU)|dK9Yrq*XU()qOHi_hYN>lN*J) zGd*?q(5_H-N?2Wzlg}m4ccYb7<7Y0d6 z`O7xjd%&oR^vfGpW4~Z}_tY%*flo2e$HL2Gy-5SF4Pz%bUvoI?TuJfkydKKqi&4Je zP&mNoj2_JoT6!pt2%{v;`!Y%7>!xCSDH*5i7vt$Ai9nQz!u zr-Yx5%`R+kZi#6Shr~+%h&*k_%`lH%?is<;QEpY6ruWBvBUsnuGhi?u!G1$N17?X4 zJOh`{u(?#)h8@CuhF&tXBk!bS z;d>ze>>~MIoOCVF-wSzhT_&rb4_7b? z;?B15&RQk;aw1wQ8)CaQHiRPp_7-i3X9rk5SPX-9J%r|FKam%LF}>=$3nC3;8^P|R zvsbAjULzfT(lndSh;@Wss3)flmY+jHyCxriwj?zy+~n5&k}wqgGp1$@c9bRPL82Q_ zV{)}2fTo6w_Xh}S;ClsiXi80PK4f}Pald)H~&d-`kuk^>2a&Pa* z&^7YQSQf3^6PHVyDkPulTu@6!nf3Mble#-V#YniRe>17#Q(jgU!(h*5rTEf-Y$@Jc z-lFu1{S+%(ihE02lwJ|L64XkmSLqcyUxqrAY(0z5pG%T%ZdYXrc8CSr$`mY;QLy6q zt^_LmBtGCAHU0+bkxvCd~LcEvGJjW2vk=wQ5=sLf5 zY9gYEaT&ggH~KkJFTzwd)JRASGB|41Yz?&;a~`Q;xnie}44vU<8) z?`5pQi#aNI*3++iS#J2|oxGHnF%|6?-ebNz+%X(7%C~?A=1Yi56myiL?ZpkKg6Ek1 zP9igb7RFN#1y-Vo-|El0=JcvQEBc{a+7KSzvokBA94sJuLO6;bcP&)8X(DLjq)kp|F)kgXgF(Jpp_l(9gKixd*RlOdt%spsvP zjDo-&6mh%JNYK|J<%+Cnh9bVhT2uIxd*$G+HbM)IRF8myv_Qe9@WD{3XqjqiY zWg@b~=X^{Amj$R+uUvfNwBi`nx;oCYwly_7ePGWl!n%(M#&c|7h8VOu;b$ai+5Z*? z*^@XA`KBTu#WH1B2EEM71xWN@6^Y++5g8;2<)TQp6c>yQ?K4x5lV$UG%)1)(SVPr~ zMeh`F|1wJ*Hv0${i}Ju?TZ>GhhiZ}I4Is_r8Ba~0bv?~QxA3y*5U#}sgEvXs<-QYE z)u%3IjP82mRmWZKJ7I$fW~H0m!-SXbLKwd*og=ge+wvnJ5QfcA>u7%)$LCGR{cF zJz=FuHXpRvUbqh`7Ls9Vpqi0gd|7L41*^?zdK(YDrI+aRTkgTD422NNoApY0_fc61yV{gLzX z%n~1~$vK5?r$fx$;R7H?l(Ry=`6_qC{@@08mBcJLYvC$!w zK9yfwcPe=&cT&W%eB{C8)=KhJr*&V`M82^eBvzD8@pgoiB(ayubQxkSo)0+c>Qd8ZrojUwXV zbhKMfK?he%_&{t=X}lvp!a^;Evcc8HSjW`vdW9Hz#w&Ip22|Q{XD32bK37TUzs8$XZ?Qa7q6nJlYTtSulvk8V+Cor zrREitx?6@$))^mwL*>KAu54&!>{ePO z21}Fh6i}MLsbhQu&%Js`wV`d)QpV~mlwQG_ER^1Zl~^df7oWNhrT5{;Z797T2mV6o zn-FpfrEiAc5K7-7KP1P}OY&91$Ye`G63RGU93)h5kRV9t!DoAegkCrhK|&usLKP(R z<14O~kTe2S6VkP(x%hH%3m-k^U^?!%TSLKtEYRNPXa-J`NqfILssqHUaM;nFS)vBB zJ-j2prMHWZ5dQp|;f!cMat&ok!PBicFQQI6`J8qamYiZsc|M2VdHLX1{+SS(T%>vS zbOx0w5M|>7IXdlru*wb3;_#T35_#bwHQLQ~1EGYE%hBh&aF}NtNT>2Y7OB!JS&gE! z@}9O{Qmue7tm)8ZyjMgRF3fstG$U-c-I+72P{3=J3xCM)x)lk_-9M;wc7{7-mOY0= zZCu#BI3wnkTG}8y8n2Il{dI=bt5{`^WxhSb>=}=Y>LS(9|KU2SSs5{^hqckQZXZVl z`t;L%YQ`8DAMQ3=!#ks6+@dAOKUqP{H+f@#u>v z29w81U%&kDW`JSyW}NpaP|<^1_?Hwi^i}W#TM@$MUieG}486DwR#;Goyu7m-f1f9Z8qCW( zD{qM#XS6My?pUkV8pjhosj7o}X-L0vGMx2Q6=7Uy@V?$a9vY5%GM8ZNpXy zI~4Fl5vAmn?8otF)_NZDU0L0|d$tN^%uQ%oJCdj7=Bj2+ne_z*;H8BH28_VvzQ7n9 z+_1oy5!j6}QadCk>ijd3HaR(@V4}IZLki` z;)Xk_3jRG<)g^AQwkCI7#>AauRS`C@q7BWfyYJtyalQAPw6;4txqnV2$2Ro#o|9I! zr!I#+oCr!TrN8H-BNMX}H(xACpw}7G6oDW0P6!&kGkwjJ`Z|LS;vLBXqz9)CcKwy} z3eXKn@;c$q99fn77|y)&eKqsq&+%@?_sGffKc8{Y0E3Q;J4C<*RqIPovfHkXb`&!2 z$l)!aH@k(nPjBHfR(L)@jw_M@OFTZv@epnbxeQsc<(;BdAp4|T4(`f+)AiTu|M+Jl0g)PB_ zwUN^_v5ez~xx|WmlRYijgZ4QKn5ON5iTD^sJoVyv+%#Ef7hmE?)0Ofs zyRtUQod$eg+Z$BW@Yrcyh!1w}>^5*f!n4d#hqjNk>o~ZVBdn+=x>jTKT6q+yJ)3A~ z>W!>MojH${_-EZpG{B+_cwTsl#c^IW89sQDzQ%R7ovI!@X>EOac50XM4c2fXJdp>6 zA3SN*wyCQTCQ)Ax)zjAo7G|~4u``%>v)zzX3*oXsd?eE&VP)__zY_pZNzwWLt4xE` zR6HDFOUJ;~n{EBD7$(FTL$p6GV5v70%P&Ik0KzLLHrPmb1VG|iPrZs$c-iy{($5Q| zmy!O|Kza%3=Lgbz@KJzGf%FQ}HwV(oNEZ(RT02Wfe{z7o2PY_=6iBZi{j5NG8R=&S z(o0A$xu|%emv?WEf|I3Z^&?D!M9CrU?G18_CgGN{DbFBD7io~BOEpN+1sf#kvJH}S z@din{go7kq$U%}W=O9TJb&#Y>J4n(6?#%|a4AnJh@mQIu4OPGuMHKImNn%+MpXUZX zNh~Si^L-!9=+yOW4R!U*yVPws9XX^L8msmBjFeea;2|RWVpekP@I*8vy}mnwmYHDn zB}fg0oCD%EUad05c=fS4!gc{hP7w&^;G<1gPYOmJW5tVefNVtAu&dZ?uge=sa51-3 zmBBVVdr?Tb?5QB_xlX{9ePNtdfgn!%%3ze)t2UGwBf1}0tPU?< z9W2n*nrt5`@AV-FySz2UkSqa})Fo51vs1hA08*fF*xSWM(5w=r+*UU?=w&h5cV`F- zFLYMDc*t2 z$tfO$6<;>+&^G7hbPJy44VD4kip|L>9*upUn-`=W&L-lE>ypGX(&u^(vZl7Ts}6^c zcUmhjod`+1Fl5~jBhskS6}LP2I(2)y2?zce&O^5_V>o0`Rgcu3<&G3gU!)qX9y0d^@D_JUn2e1yQbq-SHaC<(r%c`MqU@mn;MasqfOSBIj-3!v2L50Rk6{#QBqpq7%k9Iw8re@+!PLjq|x?FAJ8PRrK)f)a?Z~7 znc3X~2QR_IiX&z=<2E{;($|`uxfCH;3gHrm-Jmw0c)~&*9auLcP@fk-wZ4nag+WzP z@-dRMtpiujPZ?Y944{T>r4Wv^+I#2&d<_-zy4`9>N)m5BOzws$^JblVT2>}hyQi5N z*{E^0&rZ)z36zfp9V)xUpoN;Xh7kFmtYUk*+J*RedqTH`lQjrjMh9Z{_D@5kKsTec zQt}KV`7kS4-Mcp<{AVZ3nozqa*nhCCo{5e9yVZl0+L9AAUI*JYJj2^LxUW6A|I(@G zldcdHVGhS$U*k41GE%jfeFyZ8J>T&6T0FOe3^wlTSX9_Kpi9|ZN&(6gRD}Vg)%rki zgW$53jTwxa;<7Q7@F>m3RKbrl8&eG*t!&H?2m@x82Fs0`VvWwQZ;6IqCH>lJN-^kQ z-0lYt1S1CM3==0qN}rY!%e_*iX}JNWG?u$wN@IDdiW@m zFdo?Ui9}V5mBRlgukax?b%TdjRpI`xtb}7qfODJ?REF2+n_sz$NN-#`rD-J1p-txO zmp+uSxY&U>bki7{i;-|%7?I*a*x`s925{$=ZW2_!ghQopBhW|iL(hC*$yYPF5{{Zi z{^n~}vpgt!=W4>~P87yNQC?4&tnM|7qRUM;#mb4Cg=Z4qp7d4&x zo;D@f1UDdRMnw%SUN$c!sJ^LeuO=@gIHIVFq;6J~Z&_D861UiMyX85FRvf>SAfc%l zby>2YPxV)RBp*=$;VCyqKb+u`ix`NFNSVIocau5>$c~U`AvJE6M#8Vitl7kv%zE;i zWLN1Nsct+Nz;*}Yg#gBNaPvSCK1JB)^-xigL$Q7-Uk-$xCj}mTBDS9)YTt1VG2Bg z^2*2%<#=?tB#zp$CK00JLz$Xo+a9s9DE%I+qGX)rRh#Jmt`7{IG;#Wo$I#mRS|WL9 zF&yk0cH2MZi^H)@y}WC)(UT^eSTBm?shB$S0_pOut%uf6hOg8loPs%N5Y$1QQX1ph z4w^Qt9{yrS9y|H?zfGz?3i?Y2kXMY(T&J-JQ%>ae!v-1YdO^bU8LtgYb&ynF&PSBP z5M!o^bdCy4hPjBoFoNeI`r&GeTtt6d2bPN%fYX_B5&PljSTo(SRa}DN)90i4a8o)Ci204`An0zfslim$k(qAuHI-0HxOI( zn!xq%0~=;jxPg!on!v%)_NgXu1EJ|Qk#D~~Sl4a}HxR-{6F4}qHu;U!d zIdOvTKD2ri496oXAtb>yF80iulbDBd62(U31CtGhOf_iq=<2#LC}mX5xDnM=Lye!` z-#6_Y$;sXG)5QhullVU{VI^0oqN_s&)ef$rdqtoBB?(p=`tLjmP6>k7o$^w<1M)j|fBQ5eOLLn0q8+&mISlIj445=E3m54+!WxwFETDVX{f6w(r z#q`h$))KWbJw1#B57Zu}8@slEuP)~dap9bSvNiKZ`dZw8q-|P%0PByVn@8#4Ee-Yt zPgQZR+1Rx(B{Eljj5#n)96K&ggz&8Aj^=!?adlGLsVPknvDi8yzCq>UnDk&ivO3}QQJT`{hfWoFWi>iYOG(mc(c=Bzo6tjyEW~!FyZ{z7 zk>2dr1nXYBb?@S?hLyGuuGfD+s^fOs zyw6nhH7M~h18!0L6-ZuJ+*TKc({p)eTqT!#&P+7mNY)%(v)@1*FE$JZFyu0n*s?pT z+ipW9PMtQLng=h0)I)w&x1e?cmIY3R`)w-a;0Y%j#RkDl7Q4aE>Q)$YSY7?}sVBp? zJr+4+;%f(Cjqh-7c^(DUkQlL|tP#2fJLgiDHj)Qq z5@7W?RkA_y!eXrERzs6YS(tRY(SxYB56sI=pvrNJUK6MaeBmZgec`a$1gc;5f{JuA z`s4WVCUOnH{h&>t_Jd)s3Dm%>bAGz6{c)dUBGyFRsCxrqci1GZ9N(v@d==PB-W0Ac z)>50o^~0X>rf~hSuRMh_A61$Pt+s?#H2LGwqzY@Ge#&N-2I)%5b@XQ-M=k6X4 z5#o7)Hh4`*pXt1E70a=Sp)s4&TAZ5sBYM$gvchXhNsvfdR8wZ+)QANZ(?%jUCM8m5 zOua}+KO!fSMDJo&22!onB}A{2*wV9Az}tOsZZGP>^-JaT6!H4KQcW}85Us<~Ap9Wv zrYWEp&0F`(>1=V!nUA}E#vCS1KO+4NO#!;_UQOaEQE{qQO}>nz^f_lhF`4ZaReloA zVo3y`sHY-Nd8u zI6sX*%XXff6KWkN)Q9mQ^z6PzoIRdwBN3&0Zb@dXycYW&kDM?GJ`wwZo^(+i;-Vnc z!cHF*G$*&9yf?}#N83pGYCUqxX&zY#ogaRh!G{bP4wu636EiH^Wz4WM@|zY5;a_&!ZFK!#E2mGLL~BuLY&p(zMXcBglC%{# z`ZgBWzwA~(Cy2{NC77+2zFSKhYD_D(CKG9NBG`cOW0@u+qh?VV88wT_$f#LVMn=t| zGBRowm61`isEmx7MP+2vEGi?TW>J(;jbxie4N431S=3;hRnr5ZsP~^?4}d8djg4Ky za1>TaJZy`@tTCnWIPYMX?8MGi$^m^zQfbr_8P%x`l2WORYdDGy83gUi2)RY5!SDz% z0(LQO#Gp}!V2Q|lwy3spUeLxz;1x0LTeIiIp2JvTsEYKHk zYS!{In0`eEgc&4MuC%Dh_>4IB9vF|Fj+zq}iEZ_$M$hw_$3W!L0vc9Kji|@;DY0!v z6QZ86buqn2XKhm{6YjO06IY1^%-D;Vn*z-F=ro_ZxAf)>Hi;7|nsXgT!lH_3JD-zN)2-aOvMIAKMF^BcR)RS#3 zHb@dtj;*D+hzcyN{uFg$s#+Rf`1iQ`2 zayZ^#CwsxN1t4uS1gxaG)J=Y7&`5Qo>jsU~HbjoKlanD8H(U}_%R2YQQY_Yns;6of z@=J5D!why6?Xxo2-Qjg7Vc9Wn>>JJ`l@G6DlNK?hUgWPjVfx9#CjRvpoO1|yUE&Ii z!;OM+xUOafZKKS@L>(boObMqkGPPtFHeu>fLnh!b7FK#qZu7DkcrLPB>c@`A2HVhN5~^t%y*;!m?@GJ$FC1m_Ddr=RAFmGLss>)o5tXRh}6zd?b#2t{b2 zR!3Lp=!NNMUQwo_=ThDjvHA7xyWuoa9s685@gQ8%uA}Ebx``9F8jJe@M^)9+dHwjQ zasW|`YB9E|${-eFpu~vw>C?BXCQh4h#H4!o8>SPaj@6D6oPZ9~a&BAp2EJ;oUb^Dp z%Qq$CG?Ja<2VOjjy2+);VZBfyfb`XNbx(v_eO+ArXHP-05YMc%*GMkD%Nm`g{%@Tx`#?|pMj>8gpHiN+# zse2}TK+46*Xb$Ka+Hp?>@l-DxJ z6qOfYp`)5vg_%h8y0r6>ENKJ^t4p#(h3Q;40x$EbGFEh9DT6u-GZ>WCBFPk$7GcvS zUuM!{4Br0H!s+)3HDu87+G*+v`>5c!1Y8qfjF>tr9FI-87lKD?0%(^)#-*kXaWbVc zHx3FjGCs3`>65M?o0mkxB8fBXN}{n8hI_Bf3>+82qf+4enfXdAT;DgcCLd9bv6!2q z0)sFY(HEmH7ts&HE*H@sU%=2Ek$rzD2EqONe+EV z%-8vda-6A^*OL`EM=~$IFOE;jevo1M^Gzs?=I1-6s1&3Yo6T;e$su-QLtM7`NG`{R zVM#KBpvVfBTZmjm)IsQ$hi?Qh7PjfLG^{G7>{32Lps^&YU zk5^2`!38&NY3)16@@jG{}K9B{sW zGN_}LjT>}GHB{$?MWj8ZvU=&^pC59aeK_om}Rv-$q2n1UnL&hlVs&?da-C^krVPWYsYHR>KW5uUhOB8;u9& zDrA^O+-6Y0cP0I!k=Q3{`kk+dgZ#^J*-wV!Ar6UQW;4ANb+Ja^b64VIEQ4e*kbtF& z$KwvpvDn?w6tZG0zGyzO@A&=4%Ec_Hel*4Q9Y3JyVsT~QSXgKBi^Z*XV_`LE3W;LR zZ4%j+#hT9(b%JRVPN;_jQ2YT#RMp^0@BT2lVH#en8Ca}g{(VKV85Dk`chSXK#A_Cc^4kG9gCF_)zOm23Vm0pP!HN<=u zT^f$>G~FCEgF-h>n8$rBu>NMaxb*L^!{NL-0#{e|896q6iJ0lgC;?2+NH8V&5aun> zXXAAu9GhU)CYir_GW^=AMo+4*pCU^sH==QomB65fA2q37kkc{dBYUDjCRxASRcnmd zFTz3~7eqFQ1M>2lg;%D{EK|Onmps$HqUFeL$)KCyoCbex!+`Le_vIt5FIQTJW}UYh53&?D*uA?Xx3h3wNOawusKm+Hlxh*u{AA z!Sud=Fd!ZGr!0jaogVoSg?yK5(=#SVz6NxC8uJz;Ddj`}&NvRZt8PYXiR0aECy1S| zZnU3_$g5n?n{c}yn-9icx;vKxk^y<3_@+y?4G{ zJGL_46Sk6j4Y})Y+Qj20V+A^P*tjRuM~?mlUs#)$?+G&-<^B#KD)LRPMO}k&V2$yQ zcqNfmh^rhkV*Hru(IaTU!s03q8ts{q`*Ko1q)w!_2tSg$)gTh4PDG0f2MVgt85lrX z&}^SV@ciuIqYkacdYTcCQs_f#t7^uL!mi1Z`i5hXcKFzewB0n$r&0aVX9j0c17Z6y zGG-QqJ^q`E8p{5`9)2j~s#yoD8_7SDo%%DqD1!;eTtI8 zuyB{ihV1H83b8TZyijv3T5&y5d)VrKG~F60Mqce6%u4zbwUna7@eWSFX$u2>V`*{Dvp@!sn1DPcq-)XV2B-> zUJDEHiIEOCupY~=g+X*3=O2vc6B1$u6N&r>v@!C0VnsETW@JCM^UB^#D%)Wg$D3dr z6Q)c*VX7AQ$7Ty3o)o@5`;C&z3{tyU<;8~$8a0Zl3wE<+zG|GK0$W)#N*TLTXF@M$ z24*zw@Ks@!Ta@II_fE#-{)xYC3X>U*sRQ~`Ns^IxNS6OZ73(5!zFl6c^!Qtr9iW+v zGOC(onQ4?D8FhywuSMOBUsT?#8msfBn;2a=(ipc+F6!Blv3+YrNtW2eH6@vYqQb;< zH6+Op)m}NMR))ec**c)lfcp#|G8AqJ#^A=11Ocb`)Op5nG%bK1B)mJS02#EwxX=_T zv*Qhg^?vbY!{Co=qu{<#{P9a9U0}dxg%PEmI=P^HNq= z%`(~h>g?GvC9*s(Wku1wgzQVaJ?#W3F+yTT3?EeuTgo4^-=jvN%W-x|<}>N&3LFlR z6Wv$#Kc#rKPR;N4rxF4|Ygh$*1T!TKkD7BtUUWHbfyzl;ky#caF-akPafqW~9foS8 zQaUZ@cJ78gCZXeHD^7n~rhiIqCY~J! z0Urcoag7j_*vxxwGQCEznYH!D646DYM;>}uc3u533e);j5j5l^P*T20!FUC+xv`{* z&d5)l=mSyel<(auNuJcK_&K<@R)cnD4K3d`7I4TyacZL3fg!_!kx?1H-IW&QeaK9k5{t{mT`AA(JRebiB8(TW zWSfUGE>WIFb-`4kiKxZ!$;lf|O5Sj|yrG*dLL#F#tlgCsCFUkgK%*i5z>B$f9Ois2 z<9o=S#mI^zY@Fe0CP8fofGrP(fN}^71H0n9C9By1CrqAwakhsk_E} z@l?5~-pQ*r=^&$orZVe3%G9afkplzL%oZUl`rww&KW4vSgyKD(DNoE)CfZld z%?{hh1eLjYojHtYs!O7kGhQF(7@gcx%l7r#S%ML8==pgOVT>6IZJxWI3-tk`(q(@bo$l!TtChuKjfh0^vN=s6_SX?A6`AE4m;5e zHAHMha3f*h9R>$d!w1qx95zVHuc6K~Zd`TsA?&Kh^2=rKj!qv>n$C+aG8%h5a_d9~ zjD{zBZk?P%h)!L85ETpVgw0!q-6pZxlF_ayRAt(h9_0eTqn7d54Ko~P=T1t@LkS)) z5aUxfI45|%eVic3D*zKvj6b3&yq=^m9Mh^ciA#?n$QH$&lpaRdtdQ0kBcg;M)Qpd) zx#AnNFJ&{)1^sCh6mU|Sk>Lg%dE^OlQVgWNe<50nwJlg8q&`XgbdvqA67kF~WryS? zsT*^(4kM9EO|e|VmASX@IdyAAveEK|Ts4mc_a@qHwAiTKk_qbjk1R49)wouZ>Jfdj;m8uVAZ=KMv^qBZBEQAeD)P&sPseX*`+#N|xgFu|hg?K{Di<35L`^HyM~BvWynyj7if ztNV6_rl;dha#y6qEH*n^cwcN=&9uy*^;>9^G9z7~!s?tG z-w#{7^3o3kOEUsfsvInDr+gn$h`tr+i{(;?0sSD=8|5m6pu%%)w#Pa0aOZct6KX*A zTgTYg_kCL;j<2n;SIg^a-^vK86ZgGK29W#z_~i|eAM z`<84=l)eJS+6*m5@qOhameTb7;BlXqzQ2_+f2GPFV11LDem{u2nR3vNy8S9Qz8o82 z^U_z~va-DRzQykwmEW)UeWUpP#qS%%4=8@$D1JY@ulX!cNBGLJw*A|LrlV-ii>Kwp z*5I~pL$*=cNI$x+Bss<*{KboFlnJt5Nn#AIq6=Ok>Z?mrWZb+l*yd1C(h^MvI47vM ziMj)dHVm-*%o^Uai7gwrlfZS2;hJfy>Q9__q`n_*X-Udt?JGGIgNw6T?AeX^WtHq} zym-7ymQI_lHDQSdu z|IBIz@l84@kuVZuw1Yc!Fbf!4QZrmz z&HNA{bo)0Y4T<724D9jbbD*%3tUrUN8<(o92#Oqj7DY%57?6m_O8vLAFUNuAd$!z!c%5c~9!Y(`6s z8dP}#?uVW{UF+0Sl5eQ#nmbTI*zI;s*yr~Os_KuJ2IJpt7>t^J5f>fdd^Wy79G4vS zOxsc%TNrf0^y6`{2t1ooN#g@3ae7fIDVK%m89xp~NUspKl17?wF)~>e5Cj$0KG@L( z-%x$D^4}6`YDoefuDm{x+e`3$zTW;(Og&(vK`EfJb}9S%aed8hdD^hqQ+`72;d-dXv5alxDsVI;qK>(=>*au|ei zb5y`1Fc;AmzJ6v!KznY|^^Thcgw(q9#o7iH^{R_oGv%CTaeThXW*=nt6&DlqhoiAqY$%v7n{-DA8a@$^}C zF-B7u_T-o*#+Y$6byXvsPrcQ^S`aUS$O zy28+SDq1gx(c?~Qr8qlVcLuT$R|#?~X`Sw0D$8b(h#hzm&aO18LDHkqd|qCfE?>uJ z8wmr=^cRNuVZGYKjBdniNt&9{N0wHWuaJllJMn6}I?<(c?Pi|uy-OvU1q;cYnf#yI zr2@=cEd>-w1clNfjIbf;)0#$3gN^)0^d3QZX)b;XEay3r6q{!*F| zBD^fOc;e+%1A@{rUmMAk@?$%rG_Uz~BsvK7)}fe^b@q0WJ&KQ-JvX6NEz^v}2_eI4 zu(KNM)9`|-y5Wc)AK@T{n&pQv+$=YpvRl^fJ-!_h-nEM#(*RyT76!LQX+wwvDK61P%_?i zt7BU*Ha?1MJwz!T-Hg#fQea<3DV|b~ZMxi$X#`v*!y0b1X7w>d5S_n05$Kf6noNq_ z=}s9@GpK6RSn5XK<%^KP08t+*R=B>WKSr{SMDmNn7<_Y6%`GH8HSg@QW_UXsVT7Y2WHDdAw}~Em{3Pp_AP-%13l@#UQu2jOmfV83Kg}y^ zhP5!Zu(l624x_^2=yFRjy10%irO}7%!OFJC~P45}P6Tr8NnujiFDm&ildR}id0dr_Bg zMU;_M^^>MgfImMwIk5or*5Utv^UD zO-V&_fyeAe6H4P3o-lR7anrD6JeSsDg1w@w`2?fT1mwpk;K0YnOGC}6=iKS zaVJQ6i0YSZ&AM^08CkVt$97QG$g|DJ6?|B?oT*#@K&L{&VKZ2(fF8_+M?0F6yG;G`rsm_FO6 zyGNVAJ10{DQDkY=I2CLx);EpxpF-duom=rW_3Xr}$#e!7{EghJdx4#gW{$3=#~AO~ z+!>zNZD#QO#}?&(X{Y!KT)t`a2-c6+FCSmq5AKIX(N0B!k;*as`;=s=V5TEVGBG;N z^z&@LNKLpeppR^`*ZtDU)CEL&dOa|Ws7QPHr4fCtE%|kDq0ngW=^Sy}UMF#E~+0i+TylJj<{{Fl(elJZ3D+k9WI)Br!g?2>#uZX zNk*27jHy#cQ!Pm{&Q8>iRKbUE3Ix5Ft6hq5alOk+vdjBO_7_UB8(f_I;zWmM4LtXB zOx^I2@O2zi4h7!`jWMzYcM=UPhv%Eoi(cu6JAr8fbS9fRm9o{>_#2quMBx^;K^{$ev5hl($ zGfQIq$AXhp4m(M6@^aWEikL`*)@-yK=MZNoG@HEw!rIQVS776DCVSta+TYJ+H|V(b zr8~=B0c%U9_M+?+){;cf=jZ4@mU93k#0-~~Sh6GxQ=@yE-)iMUg>eT9qoQ0?XAI z>J%PbiwU7m+AozY)0hfb@zlIqgZ^LFbDn=UdQet)^ z0&0ND$>V7q?^Ub-B<%t&8ood zO_}(pSrs^Dv?yMhRe^i+GCVTftO{7!GR>l{g>A*q%u;4h)*d6sZZf^E5%GIsBT7km z*xrls-pxmpga4G2S7G`MMzBnIb-b*T;uvX4D+hh%7RLdXS6l_0 z5i+gI6jy=$Pv+nxcG8IBCmaRN&s#-DPMCZGR%Hf(>h)q9J-S7E;mxFLP@A^mw8Z%~ zTz}N(=^Ty;R@(^nWO=lEO+NZ~DHqx0w$i_GSxOs##DY@?xm4GH>w=+oh&It3$M)%R zIz{C`bDfUcgiVrZ=?%%EmTINt!R#BM1qR8Ir{UH^Qy+z3ZE-jb^Qo?{O;n$;1+1cl zM3$)ot@OiUZ7d{F;s}vC=ti4BDtRO=4lEyrgKkX6@Gz(3Ts8O*PdlaxSBqNH5`Gcq zt{YQ*7&0G}9RC8*y|PB4M~xj`i6aOB;bDvGV>WNvCt@ml6(xd%0wNkiyH_nXE%2gI zSefw^dScI_?IH7IoZMmTd8yOdDxyyLc~mEjLD5-m+J01vJJlvm{%d4;Vl(zDDcDe0 zy5ZVX#SD*>WH9EpbcV=^#Td_zqvkPF&t1zT<}P_BX6jgy$v9S|YZ6mh zs;+S*+04gJXJZ57lkrX{$&&Xya*IiQ6dWvST-h{Jbp4VYlrengj<2itXBFq_wl2!Y;x#O z?3^?#eZsV9^;4&hpAwJ#Y1S$13+)(k^h8{;@H76`9AgruuWzqP^nx^w>!40i zMNzgs=rJ>;r1O-+iPeZ|X@snUUYUGA!Ntp0vJU#!rjT3*rAvB_qfBh^-LQ8nP7B6q z31?Kt*4qtxw-i*gxPh~?;xDry^<{X_p}v`ZgZZ+xOzFcgX(Oe%b9xyhdu@GcFYllU zo#r;#%Fs0t{Pio+J3aAi{UDiG6Lj5Sx?6F$R<`fNwLQAm^r3{&XL44j_g1DcSS1~i zmuC!bvrXM%oX#V@w09MegS4Wql2r6k5sFK@QTx6qA_$`JV%2bt%ufAzYH<$q z6E@72RDx(-)_qOlDy=6I^)@apvoPL}TB8HII|=SWX7NcnCR+6UrZnCEw&)wPRq)#U zq()?uic*Wd9ZM@SvuSG2mhs_~{Fsf2gS8=9#*W@7FSBugmCPamNcQ!m+0CLQdOY!f z-N}Npyt!F${%DsyG8`TH%;P1yRDfCBOI|1`;+fJSvi`6}B9`37A@-N0`I3cd zzGix%I_E`A&*v^wvw(O;j--^UN-H$NL!@q)GIJNMSteaYe^y$Mp~7gQfMx^bH(7sX zR!~tgjbJCI8Fji}#z4s%uNm-^qDhjS&0P?}otq^lHOWYZfHjTrINn`*>)lkuDP?Px z!KMsu`fI`u4mPn^lSF+i$ZFKLdpAGogyW7odHhjS^tczb)}jQr z+xYRgJ+^xMcYT2=O`rhn6Ly*)}?bzF!a^$3AaSU54 z6XPB=@kF>TwlfjCO+RkR_^I`OEyv0GrLh&5l;Ua{dZ(*tG%cFdJ9^2XWF+#EvwH7l z7{T`@;c0QgDwFWERKjme!ZYK92UD4p63^^ih==#-%q`N!nY|N_k{3BGU?_e>1LR8^W$`)dr8Ifd-D?PUz;Qs#7X*_sD*JWuqM){En;`zs6q5ZT1WmX>X|Y_RQC;ZN{$P2(`ob(;oT zb!f2N-gwSZ0OtZYz3`lfXNC=MF~LnigIz%4=DXvW(qOklxaG}A+X{h@MYTGl!ETK| zt)E0}8wA=sjEuV@uzP)j-4?%XPX(qO0_`pWrac1fpFyAl0v(ni&=G+;7S-`e{M!Tn z_BaKBJrUTmrorxn-%jtKh|UOf{tlQf2y}TFfvyO2eF}kY2y{EJ!S0UVKQbr(KB1X6nDf zhwL1>Y z-*#$1cq@L}tNp^8@!LTS3~$75N40-=J%0C4zY4F#@1E+{;nn!Z#Q*tcnN;Ht3lz#`2C3*94^Igs4Bz7`0b&p!i(_RQ&oq2kG<58 z@B;kyQbWV}jfYreYFOxOcR?OAJ%9@ct|Yjd;4y-i2|goO?E|a_=!GxQE5y?SPftAP z^oGV(R#`8QU9U1cdpFqUqnf?d@50j?hgiK;UFd9K8E+AMP4GRzd=@F-e1-&E$B=;Q z84|$n@JeHA>!)gT=*-0*0Yg#6&(xT3Mq?-I=jzZf_zJY8!E6U1f`b}&v-WX*f*fJk z9N~T4W*8&Q!wTg6FSiB0qHq1eZPj4^xv_`!OSfI<{u=l}cz%ng7SCaL{*31)b?`mN z)W>Zf-htn8x1)T@3U?3rlzrVjAu!`Vbf+q-GCD;rwkwr>K1Nq)tiA{if{x2CPG>{O2 zP{V_)?Kyy+_y#?PHrOlhaemzsAK_zk$^q`L!&4i7YyHMOFl>%KY(5FSu{WOHcrInv zTt;v?!F2@J6Wj>Usv6HQFt$hWr}bk5j{`j3SY!RB&3)h#Z5{&H{ZC+Upz5|g@O*=a zwlk2Z?M#4nbMUv_xdaOU+TTWSJHb5!_Y$lDcoALj8ws^1>umoB!Q%u^19UhX&mZxe z$v+noEF@SA&{5bY8Fk0y1eXx30O-IXJFetka)c#U8)!RrKX0i4`eXZ@!0dnm2*hXh{(bYTy4Sx4{~0o&VUJpmbfm*)tcC)fng zl`q`&0Rp~tSH9*-aFgG3eH5W?`+2w?F z)t~kbh8`ez5TG+(A?(^<_W;=+3F0`&Jva;y5VyoPU2HU_S-yr(h1jg#;H7d_izJdDHs_TmnuJ2w1_;Wdt1A zwNj{X6akAc#)Hc^+BrC!CkUP-pakHskq#T_uvN~x1n(1kOYj}R_Ws{HzX#igO>q{RFEC*vI=yp=5w-ovi|9*xp(Lg5L)5r=1T*Qz7nSZb0Ujg?s zB;YBA1aMAXDTR{prg*OW6~>##eT5GT3l<=gdcubpnk9uwoN(kKFo&P42%N(>0rMC- zmmrze8QLs`CKG&7=tAaLNN{BiSj9L2S2J`C0fmFNrO-TCA(0v+bR%=zL?H6Z8ipvu zIL{JrwsF2ASPZG+*NvkII+frw0`e(! z2ElBA57|mZwx!6n6q$x1Z&V!liX&gmBjDVk$ST!*g7XP3ARxC?oGTPrrXtHcKnkT; ztT=V3B?M%nifmMo7bs35iVQ(rO2C;!T}D90smM6h6$F&i)l~qxP;xOvo}tK56*;OR zKT{m1isMvqoGOk}#c`@QM<@LmhBBZ@poy-Ywx zq+TU>jbJkYxsm#efZRxZLGUF&Pbu^({{5QZ8v?QhMb@Cm8Wg#LB3Dr43W{7okt?WK z1Y`}0s*E~~-~xalQs@HyC5uxF3CQQvB7(&PO9&`~sbvJ5G86?3ML|Q|KtO3jacWj% zCe5T!G808+qR31XnTg`8qBan0Bp`25g1XmMWLvSs@bp+QF z+(&Rf!D@mB2*~jiIi4cNQ)G5BMAbU}eVAY)!3zX05^N%Pm*71D&LWCpuKJGPdx9MV zKM*v4Z>kvp^QEOT`F9qfYYDi^!G0*bS3{@PH+Xml>}E2tRlFY z;2MIv3GN}dm*75v`w3PPJWa43U_At*gVZzp`z*m0g4YS&Ab68tE5Ta?pA&pR@Fl@l z1YZNh;&b!k8tmN~tE_{XPevr3mV4sqga_hC%Px2zXtad>(h?e9ODIt-As@Fa!}C)- z(8F8K2jPiIQpLATl#`a15Fvnba7)g?T0URNkO=9k7`obkYZww>r1yOr2U`cVLYrEl zO|8(TR%lbJDm+8*422wz_|}MTjri6*@btv97ap{&^)K;2=4~Q|9`r_=|HAVN zJgBwJP2fCjZYH>mfLyf=8ETt*4Y&`XS&hR{*!_&79IXL`wKf7MFKW#M>gVo!#z)Uz z@XKd{e%j*ew1ND6P+NSWwrEsabV1u*c<`y(?u`eHY|D9}E$4-{oEO@DLO>qdmRwW= zveLF>rT6e_wj~$UfULAFS*Zpy7@7&tj&oi+&UqSe&TGe+E(JK}iL^Y8g=$rbQ(!wz zf$ca2YQT9=>sXu&+nr~?e1-&YT5QK@QPi+@oEGQf%SIatlQxtf<*uwk-a0bcSQD% z$leiEb;PLXD9FW3!8y1i=io$r`$ywY>!6ODenpY%$mw?vl(Gjt(jK6oJ$m55$JzrQ zYY%*^JwUU2{2b4|cqnA-K_P<*-y9BuJuC4Cq%Ti3elZ00#1PmM)VwFuCV8MS?Fo&k z6B^kGjqHR*b^>v9LX}e}+jK&mols{d)Y%DjcDfcHu@mR7PMo?l5Y>{FL9Jg>A?hT6 z<3(#C94hPhIXf{Vib*HVZk;%MGWoQ9ka(t!q z)i;QEli)3aZ2+C|H9DgoJL79~uER4L&lo(1;W-=+6^70q0EqY@A+6|sNW^vnNc^2C zTWCN5qq6`?8Jz`C%IGYBgQPRZ$Na`2)o&%udBfdN0yCc3kYUqv{x}%1~3~)RLLw64L z?i|0}Il#Je{B~am&;vcy6Zv`~Ur*%giC*l9UhE0})swgiJbm$i=HDTO^aRoOd=)u+ zzGeW0#-0MUF!VaX8vtUh?3oxQd*O4)gHKXmVPc&?>ut2&Mk{Qz!bXiYYP9>|VPkDJ zHf6Tp(6`A*ZH{mOwH#q(XnGljX&HuS8JepN7fhoq6_kz3NP}e;ftJfCSe8++EW6zR zj*>EtlG_?R>tJ_K_z(OJa)*Y~@jKWZ7EZ-)r8_*Fg5N6lx8Y>`R=Xp^|HkhScT{)` zeuug>;nDaV=GKNs;di)uX!vLR{?;8E{t>^2xZ}d#<9CF6Sa=wIN4kFq$KZFA`^T^j zzcuck!dm>+x_=HwHU7lAQ;0X70JKPz;3i-y$%{y}%B?M&LMifemx5Z%uX=+u_Fu9Pci%!|e!6ahKZR2MGL+yUY&XLtv_V zi5+f3V48cW9d1Qny1T*--$395_cA-&g20LH6?XUv0)KO_#5xQDC%ISI;Y$dd?5?uI z7ZCWndy|dD3E%pMd#4?)L*Sq8YCF6Sfq%K{Y%DGK*1z3HZ5X0`>p$)jHZ0JAg>SRL z#xg-*&9L2#HWms3Yo_gPvcn|^&4NkH4i_PGitTQ(u^iCcI@NZ!*$2BH+To%2cbe_K zjepy15JX^|Zo8k_;lB|&!*)Nj!+#<)+jhUTL6(7artN-bgD?Z@EZhCw25AP?*|xjG z25|<~9NTSB;kyXUwcQyid>f&2YA^4UK`&yTC~aS9fmmbX!Dv_ z*2oUDDeYS{XaH)w)DFO3g9Fh0wblwdI1qmhifnyXGxO~PoGi3muaTi`1f1El`R**1 zN{zP2UUyw14k*{l3ff>tOOM$6cX>HT>_B3&5yJ{?DhsgGumWZ=1QVmmpYbY}*}))` zKRB#HN3XO4Fvy^qW3It|4(QA60Fq2FEaYonVFwV-gG0a^nps!c0j$5lsPL!wbCn%n zEg<+^*aLr7*#Rd0U<^KNGwW(Q7>hsS!gly`jU610Kfe!K;Lo*o@JIal6GnP7>pD9a zk3WA2ci_+Uc5np#9Es7~%(}r2>hb63@FV=W(GHHmpNZi+jqR~_A;{5a z2OAvBaDnx*9lY*@Tx5R54rs&(z5zH0m{&QJF`EU}YZCe?LYq0kL4S$EwJG9DUGHhqPE1_VPk8ZO9(gwoB7$|l? zvG0lTj)pq5h+r{+SlqmGL2eFUos*ebpJAuAu7__vXO3R{!w9qNb%dpQhMU;qDLK~Ie5$DpH7 zVq!w4Hj!&Cr%EA~az!b<*!X<~{A#zmEbf28nRWM4SO*W zV!6&STK`0sO8sA~*4kE0MZVZf{SxDvvP-MPBu#7dt-92m+obc%(K|IgzpYEnGeBo; z&nb)Z|88vVtxIjn0aSE!5a$d6`RzNjT z&Re$3yK|KDwk?y(T!r;!2vkr_6c(Ms{~$C^Iq%uwzYscCVGUa5=kt{FfgPTVxcSQY z$PQ0H=zQgTOra~VE>O-_c6cm83zYMX4P892E>u{$hBh8p3l-L{p^pdFMGA}9;SmTe zQdq>sR2Eo^6;`sLr3cm$h2?B0gMqbFVNDy_U|=m%SlEU-7+4o82MW^$gqAC;bBE6% zbcu3KRpB!TU8o0YRt$ydEaVQpT%>aEJTLcw<} zux?Y%Dh02#z`9*IS1b9dcPQs>6`lf_;ZB9QD#TK{!umPZSs^wntm=minAz@Dn8HG= zrYrW=Jqm05P*+=9_bSY4A(qu`EU2r`fV)p&)jvE5dG1%3>_RNBE2_k+6_)=+v3)?n z2LOs~J8O-?Oc-LZ-NvKfz+|7(*w1=UIqMKB>-xz;ezI~e>-EVhJ(t!ep@Ov_V-@}h zp@$SCl<*G-tph=;@Nk4420<&4$sbYhGzgv7eDznvKML|z;b?>&19>YE<{npYJ_u{j zz$ZZHNV^pc+=>Q%@4=@HGB$`_g@-_3d`dZ+1&^s)TmfWt|22rU|BZA{E9VUb15RMA zSI(PC1l(sZOcc~?$lA);rl4m-*2XYV;ja;T9>YY1`y;dggF``igNTj6p@apzpq%Xr zh8~F67$yqZTwuMVoKID_4?>%i^O+I>xluWg;`c_}%gXsug}o4Z1>LKls<4kT-mZk>m)$e1(zZ2*G@f@#DaH2Of;^fcpuWSuSq^+zLbybz@A2;x2Tm=ab6KFiMxIk0$ky;x?P#6mIO`-8$m_BIU?l*% z>~zO@)Db3dhT}k|T7h1e?Kn?J1r7GG_92mC<1{+q8Hk(j zIIlWjC1Bo;^P2wZ7dXxqM;QMC$AM}`#($yXys1CSd z?bca~9cO{N>x>}riA=n0NMqu7BK`MI_=KWR_F@gXcZuU%i1IJR-=ur@1_xT|I1B$D zDrR-}f*UMzoQsexX@}tkuL66q<1Eg{Hli)d9cKx!*|u~;TP|^&r9k|@aKl^hnwL7x zoscH>Lx-+#ocrDIJcKTDoYk((+bcnruFTt)gDzbe$X9?ST^Yz%f*xJ@q*s9!wKly9 zwCLjFwy>^toJY{273j86DD)c8qAOqcTF|14FI=#$1M#7DvXSdSP_B&M8yx3(7vpz# z>qgKLN_dbThwegmAl*$MBR3>VzS(hJc40pVtXmxC6&K2BnRP3O2RRaFtiwRN|I;IB&; zGw9+it$UorYQ=$YuLDPK%-gN4`y>RnUizP5CWGO~f&VvV74!5ofWeh?IejD1nlS_e+%V7;xaha?1-Vwg%f~#R6=k-rb8Uu`de6!;X8QxJ9kEdAJ>0h zMFKrx>)$Q-ujfbo`<7?Ff#ROfsfk4lXTv8Q_`E}a#jGhI=S$!)<;#Pam9uM0qrC4;{S z|2FA=NO=R=(dfXjE`&E7J?iLaFV8dTIEwO|xW-i~&>;=uJTL>h@m3P!)01<;3&OYFb<{r~Ec(`aj`}Aw z0N;AwQU8KO;9DO!>faCueCtC;{U@A*g0?%*Rm0f`edNHiPvn7*9k}<2Jn)GFA3sqJ zK6T*eC(6NRjyhE<2cJ7|`I9-~3kQCGq8xnb!1+&k4G`rd(cN{o^_9JmIG67hor|G;n}unjJp1ZBNsh6_(YSudIC z!u}Dy4(u!!K7+Dya*7MbL9Co$YIfm07`}|qX)as{WxhJyg&$$~BI3?)VIm1PA~f5D zodkPgpengAgJD+;R3#T~h1eGZRmp{KAr_x7@49d>gozugI4-;l!^aRh$5qR1Q7q=U z@HZ62;#?O_haym%=fe0Bu0gu_u7bU8HA3gR@Ie$6;{sP*Zi|Ysz=by=OyrntU6^LD zzXGa~3%|thHiRy66--mNAhgI;uz6pO&|+8JVTYF?w8VwoCcG4(r7ny&;c|qQxo};C zWgV)L3oD(hcP)3-y;@zo#8psJDGgrg!m&{%krgg1Ju-=0=E9^Ws^Ll(evTp`z{UzS zm2%+~E<7F~7eZBX;r1x&VOP2EeU$aERW2MLML4|Lg%_mA3fH)Bg%qRnwJr=qqEuYx z!b&95%=IpuB4xGg1{anhSuMNKg}Dd@R7^82d?c}~i)qG%qojz5x47_@6fyBu7cP^c zOy1_gZ&C!t+g-I;E0cG)YO9SU-oU!kRiD`52!!r(VWbRyi_qOJj85S&gzj!qir~WgG8~A| zS{E*uq6<9a!Vgn)fpsp7SYi%%*o7raRwo~E;g%`uAdkARWt={$`lw z^hOZc4)sQm`x#mba3X4Z*;Usn8Pl)0a2Ay@{i+L(Q5n;(xo{g5F=Dd|-%$}GwzzO0 zg&6U3>vdP%j5=;&dAAYJNU66M&{ackDtH(n3l+WLs?}OGeA9&)PgKLLu3AIY5NeML ztDa~8+gt^GmKwm@E__k3zyr0%RnTFn3%m;g)+*h5AYdg{o%cb&3acE@ctF4k3!Tt- zK)_nL+YSQO%H2mGV1jtkt|vTm`kU8{$57;ns>}dl>Ou*buR94T45hKrB z56b~!w({WQD87-|-K@B_x`8+fq?XJ9ee zEcFx=$O{m+%u`Sv=Oc8n2j5^Bq02ou2+Ih)#DjydjL=Ix*lcBluJF_&j*QUDJcXsU ze<1Hl5AMSrj3#*P`1LhIVvI-St336N1Gy6xFb^Kf;dq3u@!+;B`uMdTe3wNZ zzs^%1IAXxL-c#RbJ^Ka^PR%mPZuH>UETilu5AMxkYPs2ikF%IsZt>vg91cRsw|ek) zmI?AUkeMqJ0iKxVE?kavR2T$v#6^56k26Xe|<+@Qr8caH~O=> z`j7`pwoI<;K;EuQt`CE}U2!IP1mx|CE%s3mwJRj>7>L>x5_lX$?FtDz0it$=1fB#@ zyFvmqzPUmIPlKpkA%XQEYFC)_Game{g-Ji_!RcC<^m86OuZ2lJ@4@|AnDhn@KG-6b zZS>%XEz|J}9*pNAjJ@co%UvOwmpr&+i!ipygI~4?V~rR%t_Wi;T8ZVVi)|84fvU9NodEgqb>VYGvY>%o&7E;QiE7&xvN?B2w{(W|dpF>qYXl`(K! zaOIKKHVhm$?0P$>t}D5Gu~*&$j9WwS5WzYEa(>x*C%f(vCp`*TZ+q$~H~bAk?|5(? z7jxaa9z4j!T=$*_%fIIB9^A;m+xN0Q@Dw!PZsl<3gX^0(_hBDjH@LIJPJR>-KJ?UP z7hYLyt?eFG3&OHqcG)bY%H}C(O>M1@JggpsWj|GAb8NfpN?TPn_Od?qu$mB-?W4+S z?6RX&*=pM z=9H1_I!yWStpK77zJFys^z#$A7Ju%=|IF`TVBv3@`<%`q&MXC^u@;1)63nGcvvQ|^ z#Gp4e-ql3t0bQ!N6u!VTO#<>c*#_A(*uf-RT0CBt%AnpQSrnp6k=`^px2cf0Hgc&^ z@2h0!-@4Rnq;`6wZ?WEXnHPGBSnij}11Ca3M86V!1<3OYSoPg-H-x_Qu=xRQeh?!( z?0|sx55x!$+aTa{1aql}y%6y9!`$y-Lj>mj{jKl7vfZ%z8R&-YvkB%9%q2L7fb^8- zyZR4|)? z$XAzpB3~@_)fFD(i$T^BU%?C{PtfU_2!+;!dW1;$#j8-pQeR#5 zW6BteGM4#j)sHFTV3cvOudeuC~%G1gc2dfFK4tNT1{jP=$1o;Jq%YPF}0vA%l1)5cg|t?@*UUgfI?J<+4D_SITX z^yq7R^^hle^tHZP=ZPMDov$ADM307<=@CyR?i+mds3&^#jlP2Mk2=*&zIxmfJ^E%} zJwan3jIX|W(i1)UR$o2ki5`8Mub$SU@^)XX*Q4?dUp=Eo<(LpK>U>@+*CQnSWYkbw{ z!74V$deB!eO8(y|{2i3B)>p6mm@>AZjE8*n>W?X7E6P~stJi)^8E>GBhkdpA$CR-J zWjx}mEkC9VYGaT3>UB?S9*_Cz4Nq(ykNfH?Puvrp@YUCzxFWtz6i%J`06xYgyR=|b-FLY@k_os!x!Orldop`A{;mR>P%mR#F&9rKAVW9$vgC%%laH!+|1GRC%IKJjIY zy@mON7G@Y-F`xJ{#@@z!;>#F&2lI(9W9(hbCv^4;toJaV_%idokNL!xnePM4C%%la z4>6zkGRC%JKJjIYeT4bMmofG+<`ZAW*e94fd>L7vV(#!|WPOIY!y$v<;ma&{YM}1) zWtKZFP#RV*mQIW2*@1e%7o}@X zpkO(tMRRVT9`r@&Iww$TeNnpR1!|q9t8)YOu%@f?0`-WdtNDR?RMXY@fqG2S)dhii zT+`KpKs}-9>cT)hsp)EApq|onby1*TqdyJxE(+8$nywZH3if%@)sjFx?~AInG*BCS zQMHx@YNIcj`o)2IQB%|MK)s}?>5@Qg($s`CP}OlCI)>O)_Yvzr68-4~PDErI&T7n9ko zf%@1NW&XB6eWI!9_CS5Asp*bDeWt1D&Om*xsp+mjeW9u8?m&I%i%ND+puX}&CA&9J z-}<76-G`NSUyN+`W0l<(Birgg?eN8e;(hVCG83>npB2Z@q z!lj-J)Y*Y>siy)pClD_6bfD%2!ll*+>YPBh)H8va7YLVnHc;mV!lj-I)Omq$spkVV zKM)muL!izNM1|iNs0#v7;a>>Uff%7S)aF1f=OPjOL;`h5AYAJ8KwTOLmwF>mD+1wC zZwBhJK)BS_K&=dfOT87S%LCz3+X8h(AYAJ0KwTLKmwG2qR|O&oyc?)hf$*#M0(EsD z{ObKcT@whu`XEr(2EwmC4Agaj@T={Cx;_wo^--X141~fy4%AJ7P}nEnIe}2vr{Fn( z@TTqQhXSFs z@4$TmvCDrC?h}Yzeh0WuAZ~g;fcpe84>lCknn3LGGYaZKO=~j?YOSWVSq1fwrnOTF zYMrLFQw!>0O>3tW)FYbKPA{lOHLaadP>*R^n_WscG%(f_h5R z+MI%VTGQIxf?BU>?VN&oM$_87f_hfd+PMYwoTjz&3hH@HYx4_ggQm6f3u>dLwF?UB z1x;%U3hKo`c-Vyn^->@_Y+*rd3WSGUR8Wn9SQ{4=)XRYwjuscxD}fk}mK4;hff$aK z7SwBj7>dip-+KPhO8VFyztf1Zs zgs-hEsBMApwaW|Y?Lhe26$SN9Abjo0f_gU)zIIhXy%z{yTUAi+2g28`E~pOz;cM3v z)Q5rawQCD%dmw!6x`O&B5WaSOL4B;L?uLT;L{r_31@)<>x|<5>^FSn{n+xiTKqRAE z3hK*1R)cOWsILN94Z5wMz7AwH==Os8CXm&jI|}OCKvsk9EU51SSq-|YpuP`eHR$ew z+M%iLo`U*8Q{BA<)liUG^1gzaQ4m}6{RK6%AXK-ypk@_>!#z+?rxb+4ttqHe3&Pk4XiK{(vQ1$AaYINT!zbyh(*+@l3`c0oAYV+A#* zARO-Tf|^?p4);Vsol_7F_hdoMD+q^ss-Vs-2#0&Rpw24@hg)Az^9#b^o++sF3&P=^ zEvO3$!r`7Ps09V#aL*Uig$3bo8wzS+L8xwHL0wc3s(YcJ78Qi*UM#4^1);i^3TjC~ zsBTk1EiDMuH5Syef>7Pd1$A*jsP2`5T3!&Ud$pi0DG1fQR#2A~gz7dI)QW;o-Ijv7 ztRPhPdO@u$2-Uq&P?r~k>fS7f9NDD;O)J2WT`th{0vy?u0?jC34)SV&W)={2*9tVNfT+7(pxFgP-HigxEr4)0 z3pB3)!rdy+`~nDfyFd#HAl#h-Ei8a=cMG(rfNXlNK#L2=ruPf9q=0Ptpg>Ct$fggO za0N_RJz~NYurl#66Rv=jiH#PmEWn#JwP;lV-mIBLs|)aE%`I9}fH!Ml(b@vMSxbx7 z72wTUS+u@@hIng>HWbX_WQ#Tyc&!M}xLdTTfYplaEZSVaa;NqdZ7HC_?qJc@0xIl| z7Hun_!tP|z_5v#G&KB(`pu+BA(ar)~T33s972y86S+u(Vm)6~)Jq5V`9v1B_Ag}hc zXkP(&wUSbbv+23&^GeEjm#^ zHXUTqDHCCXEjn!?Y=}i?OoR=!=v)CgbeKiw3&^3vExJ%Z4jp09r2=R+(xS@+&}@`N zR|=rnXp62EK(jFxT`PcQV=cN~0L{i(bfbVAI^Lq21?12P7Tqc!hfcKUb^$qbl0|n4 z$f1)hx?4aFonq1b0%$hXq6Y=gY??(63!vF_iyoV}nqg6+1*bpLqNWxmT4q_)+=A1e zZBYvg44Y$7OA8E}Yf&o;44Y?BYYPmUZ&4cy3|nAPI}6dY(4zJhqG^#u9V|rCVv9Oj zh^8eLb+QmmOD*bbA)1z1)Wt$HEw`wvg=kt~Q8x?Gw9=yP7NTjDMLjG;(`t))T8O4K z7WJ|aO=~UcZ6TW0S=7fuG_AL&uZ3vZU{OB{(X`Q`{uZKXlSKn8MAK%A23m-wEfx*3 z5KUVx8f+n&wpld9LNsl+Xs893w!@-f7F^m+i-ucpX}c^MVZo*CwrG?Ea_zBbv;}hQ zwP=h5a_zHdtOauIw`iONaviW}yajR{v}l3_avid0q6KmtwrG+CaviZ~vITM-wP=ck z2s>ucR0|Py+@fg~BJ6}k(=9~UNsDG!h_F)@&9o3_%L+r(OHoA#JkYh%-16Kid4+Gk>|olW~qthKl4fQhvZ zHXSsv*3qUzCe}LHblAjNXPb_gSnFcbF$-C;t4+r(WXWzeov@H4yW4cqLYC}d(5PfB-Zq^zvDU|?b0*gM+H~H;T0fgEm{{v?(?t_&18llvVr`&Jmrbk< zvgwM6wZS%BHL*6trfVkFhT3%9#M&^MZkSjbZqrQ@Ya?vBWnyilO}9;~jk4*EiM7!- z-8Hc`#-@8F*2da&-^AKDn;w{08*kG?6KfM}dSqg4qD_xYtWC11(MAVjvQ15GbTFpa z)XWCgrrOlp2G^$9)WXID@^qV8+L%C|VN)v`6UZ}dYHg$XoMlrR8@-I#Hnp|U%a~(R zI~)0Ou1)Q25N@7L9c&P8zD*r%5N?4@ooo;cCO`~m)Ym-f5Y>;cSP2+4t(-xb?+aT9gnyc0I9v61sm+O*b&gFj`{IvWoDv`y=6IQTO*ZLm={p0#PCjk@uiO`B}g zjpuFJY@=?xz}&FWKfTD@utB6t%nchvy3E|LL8L1-?XW?lt4t6ZM7qWVu|cHkOb{DH zy1@joL8O~Z5F2lP++u>*c$xY(6U1&vm|S<5Aa+B<>Mj$+Zcwc5F+uDGpVfUPh~40^ zdSKI0n_qus{xLyp%ojdlg4mcZe9Q!~F<;o|&`BHFucoD7rdy%Z9(|=Fn{${;In}cWn5p9uD2L(WB_; z&^;RtzL!JyZ8-Se4m~hY*Tf*q2O>n5210qdysJjCq zO>(G*10qd!sHX!WO>wA~10qdzsJ8?M^10qd#sILPe&2Xrn10v0IsJ{cxHOrv^ z4m{UvhXy+ETyq>6ttb?dq;m|k-QMb~e@eatf%ApAk$hF#` zi4MrM#-T|LqHe82lO06eI)|n>h`RL-O?41;8yuSEfMFXQn&H56ZE|R)1JAYDp;-ChqvPHUG#iyb(v-3~2r;I#HQ zwA6vq+UwAA2VC3d&9C^JM7Rp2mb1aL+c&* ztD_EWaNw_wIkdw8uZ}yk(*dteIJCehmJT{;CR8IqYf50UUcY~g9VP496I5EO_!M}4%l>ssp5c5SD7Ua zZ&Sn@A23TCu<1Ip!~vUbFhQJ#Jb(5k6U1rwzpQRCL7WEeQsr(lHyo^9yu;jZuzK+> zbHl;v#d}N(r{NCYcb{qDG~8nKfN9}0++g*P8R1~{;v;5+gVl?VnGp_FFE+aLz<~>I z>e538F1(pbk4!`~cj>W-h!!q2x>$SO(xs*@)}FU=skv)bIl9!sHLDz5YU!F)jxM!! z&5CoE+PG%Lxl3(bv*O&P_O4mC;8F+ItXpuYqifbJxYXIjI`b|rb#bxIysJxHU92Ko{<&mrH|OxSQTC4R+yf`nWXI1ws0{G|WZS*3YHk zE~>WvE{$|SkO3}@azT)RE{%3UkU=hub~-?q;G(3tYIHNiHpP;ch0ow8({Pp5oGC7p{4#OG{k1=4mc1b>W()yR_T| zBWAd?!UZE{y0p>-BWAg@(FFx&yR^xLlbPevW*1Iou1i~8P+*=*+gxOv`7UjDk#QEd zw9^Fz7P_>{1qBwlwA%#*7Q3|9g}Yhe(modySnAS#7Zh0L(m@wh)^e8)xu~*MxOCV> zm9^5P(=J@gDwocVg8BUApFC)_03b*Im4&y49tdE-0|grCTn%%66A-yYMPIT)N}JtL${? zt_!cS%cXlRc(B{0W&(L(504pvC%u=)jKGuL=Ta*HAG@E&jKGsVz+*<>Ngw1fBk-gT zxztYJNgw9XBk-h;@R$+E21i}$B#;e`@#qoA2FH2y2xNm3JbDD4^huYx2|VdjJdOmO z^l2VP0@>gUk0Sv`d)B310*>~aOT7g=$a$Cg2zZbSF7*}23m0ALCy*B|xzt}EA}+f$ zKp-Nn@Msi>h^ssr1)T3S9*qLd_qt0%1f1^;9+v{n_a=`^f!Mgk<5D0tZo4!>AU5vs zxD<$uyF4xhV&k4mV+3O3K95TQzx#m4rGVdk=+XoMzx&9g83L8{V;*k;m35<_SpwBg zQ$ceCc+gDHTmc?57c@_x6Wv140s$Vh6tqx)2dxAx5^xl)1uYTaK^s9!1$fX_&@zE~ zx}Biq0`+uzK`R96=?;Qc3iO{l3R)#VhE9T33y`6+pfv(y=ptyXKn2uQ&^mz%sGFem z0u@kqK^siu^boYsL{3jZn@r^N613SwPH#b5Oyu+twADmTUqRah7|~DAb^%887qmlw z5d#G66kx<5! zBLy8ckuyrr5feG11sye!Ge*!c6FFlA9XF9PPS6PxIpYPLG?6nw&?yr+69t_%kuyoq z8522^1)VjKGeyuj6FE}_ofq&H(*#`*@D|erT@>&ZGXz}{@D?)#T{bZ^OVAY)L$d{4 zH8C_t&@}=2%oTK9fIjmC-4LM9d_gw_=(9l3Edly06m(mFK8pn15undvL3ah{vqaE6 z0s1TzbYGxmS|;d$K+UvV&?5o*tPu2A;2rsuf*L)z*Hwa=dT_6+1vT^FUe^d}?jZ}U z71Z8CG_4cV!9z5y7u3;1G;I*n*#mtx3hLq^&ukLZ)q^YDEU23YSGq+|cMq;~tDqhp zT-SW^c9_G<)5B=id9^Lgonh_q|^FW%B9^Lmqno%A#m*~xn_NawKZ*Gi7EhXIR zSdUsuQ~!F@Mwtnz4#M3k)dXskq(tnp}^1Yg#AG+u%)>pYqu!I$+OO_bov z29G95@MWV%lO_1F$)hO}eA(>LR0+Op@o1U^U$%NQU1FwTn@2MwW*WA8G*g=T*P~g| z)W06hmZtvoXpS`XuSavGsee71Cr$n9(R_)>+2_#$iOAXS(L#yHIpEPE37>P&qs04-qvaArI_A*|2_hZ$Xr%;^PI$CRf=DMlS}j4OQy#66 zAkt}%)=CiRj7RGvh;-JY^%6un=g|fUBAxeWqXdyIc(h4^NEewP5=6Sh1d+&Amzf|E z+3E@tMB?SZt4t7y+W8t2M51=S&IFODoo_HfBwh}@$pn#jIq((}MB?SZ+e{FNm%{IO zv`?anzRN6;sG{#NOC+l3`^*xF4&MWh4oP(Q9(r_2Ht20w9x)?i!#!4ynGq5dbEBkl z64|P$r1KKls+pt<64|P`q)R56T1dKVqN$~%D<+y+NxEvHskNkQCYstvx^AMWt)v?! zn%YUaX`-pUq+2GMI!L;0qN$^#J0_YsNxEyIsk5YeCYriPx^JSXtE2}enz~7PXrigR zq(>&2dPsU~qN%5(Mjvl$_mb4qM-|;$QZpY_bRS90eN@qXCAIMJwst>BEq%O<)?ZR< zA64`KNo{=e>jp|{>!V*cNK!i={kp-D+WY9&4UyErN55{Uq>es#HB3?`AG{hask0AW zjgZvEhr1prsjClnJxWqHAMSdzr0zb}d5n?N!w0#>O6uu@T;nA5@5>Nfa7HsE4e{ZO zW=b0BBfrg(G|WeSn=NU$kNh@A(g+_6n=5Ig4~ET?G|C6V=1UswgJBCKjq$;-g_6el zVAvu_<9sk|v83@n7`8;x1Ro4rDruq*hAopc$p^!hOPcJ1VJjp}@xic_lBW7#*eXfW zd@yXar0G5wwnown9}HV7X{HZ`t&=p%2gBA&n(c#O8zjx~!LW^z=K5gRCQ0*sd+axXVL9XqRmii#q4oS;=kZY%;cKLA4MU?U6yp(2ZydmI^%;w zS0$bG@n+IBCXL^a`$E%l(*{<71zRMxXAQ z$Z6`+Jrg<2e7bKUr@2oLOysoi>7j|7mOec)k<-ej$0l-G`_veq*Vo3UrU80=ZGCDM zpx4*Vr{)26muT-(ivYVzbnvNVfZZiJ`qVnW{6Z(6+60(i=Qzryc=(QxBhd2JlTied-mU>(|St-T}IPy?yEvpvv##Q{Mn{ntgrh z7r;UF^QnIT2i4!F0fFiN`7|g1hX(pIH~@zR`7|Uj{Xd_E2B!b#)3Ctw|9l!AfJ4K4 z8WDg)!+jbVfI}mE8Wn&;BYhejfJ38v8WVs+qkS41fJ0+^8W(^=V|^MQfJ5Vanh=0P z<9(VKfI|~}niPOT6MdQ-fJ2jfni`-&o9xrH02SI4pQZ<>(5Ct{BS3{V&8L|Ga^7^G zW(CN3GklsIAm`2WX-}wmBA=E9@ZO7kS{9&ITjJBY03Kt9{xYz!|OaX-5EOwAQCx0r;}cr`-WMKwY z1aLt+eL59@IlFv19e_EzeL53>IeUCM7r^`M_33;7@3YUR3jw^(exEJ{Ak6`vE(ajZ zL7%P!Ak874t_5&Bhkd#p!0{aM=|%w39QEl|fO&&sKHUy5Z*bhFI{`>@g2#CP(wyXR z9)L8bc$^0y&1oLp0q>E{FBS9X4jOK_e6*AKW9@7e$=^~G0 zg^0N1Q!9mtxXfc(AtJ8um{y30t30L^BI24)?Gz&7x=$Sx^3e^SIx6I&n?7|?$Vaz) z>Y|X3ZZicG^3ffpfI>dH%M?(k!R|2y6sq_8OaX;>dB9^|As;>Dv9FMi9`V>$h?mDa z;uZ2yV?YBGW)PYNG*H3&Gz(~ug7;}2&|n4c(;}cD3f`w>K*JPB(<-3h3Z!Wr&6(nvnsmP$12yfL1DyW^_QS6i72Bpw$Yb85__V6IbH`T5IBJ zd_e0=TulgQy@{)d0c|jGH7THtCaxw2v`K+9Qv%woK$@umZBgh7O$%tNLRV;dK-)}& z%?N0_iLjXg?JyBGE1;bw!e$4w%S70mfOeY*n;Xy`1tQH0Xs-g1<_EM-q26B*(0+w_ ze_=oeOsp*m=#WCKwm6`}3bopjfQ~45pQQmEQ|Koy3+T8)KXG|LClvaLD*`&DP@%01 z=(IwGwkn`A3KiPwfX*rSp)~=WSMWn?1G=E#ht>sjNue%VAJAomx@<#0R}|{9jR9R# za6y{_x~|}YHV1S=!3Avz=$1k?wl$#J3f0)QfbJ+%W7`9|r{H~d1ax1)`|J$pfodo) zL3Rc7NWuH;4(PFh_t_IrV~Eb;-hi5gh@pJ}H4hO(`vYnbB8CnG)G9=_Iv7yv5HWNp zpf(|5=x{*oLJ;XlK1aS5LJ;X#K%GJm>3Be$LlEgiKwUx*>106NLOA480d)`I zkWUBHBZNaf6Hw0(L^>N#uMk8!7f|mIL^>Z(pAc34g@F2osPZoc)GtH^yA)9W5E<+; zQzb+OyTVin;gzp4OG3oUHD*bOc)1?X&=B!*gIN+HgWY77gvemG0vZ`2UT!l>LS(Qz z%#sip>@Kq;M7-Q%f`rIm_n9CeGS~wqNQiiO$lM5#!5%R;LS(SV%#9H7(x_-!2qHCA zG(7~7nkkwQf=JC3%?v@L7K&ztAW}<3vqKQ6m7=*Jx<{=Q%?r^zYNKd=i0)BaMGHc7 zkJ>3(7@~XBUeTfu-J=eQmW1F?M@36RaHx}_Wg$4!S<&(k9O|NIMFXojLICWdAzx@ux*mZIw+ zT+nPqH%tu8QFPP9&|F2gObpFabUOrd<}11rf;kHm-3?KLEmU+bgdbX@=za)4v{=!D z5PoQhqK6^qvsBTe5cFB5=y3@8ELYSRA*-!W)HFg?TdAm7gsiqoQS%5{ZMC8n5u$00 zqLvY&X|1AG5u$0GqSg_jX}zMh5oS0xC~6mhLmL&fk1)frNm0iL9NMg?Qv?oeQPep? z3~g1^B|;2sQ`9v=^}bzEw+Pky4n^G~5NW5P9ubJNOHt1VMB1&WSA^<)kD}fYs`tH$ z`b3DeeTw=D2CPIXrQ8YF}gq>A1E<%KzQ#3vT zo6akm5P?k>6itl4ri+RuMToFViY7;hu*-_3M2N5}il#=0u&Yd(2$Z_Uq=`VO>r9#m zl)AyBiICN9GHD`YwOdS@2z|%fisnRc+;^B85n|{rb0b0w-D7SUt?^<(Bn1b5vS(i#&(O+#91VyIb2>r4za4{5!Lp%x)+jL^ky8PX;b zL#;yEY+|T&NLwT1vNj=YGcnXQr0ph#+J&?;LN03`(yj=(tV2kl@OAzq$E8`R0BhU5wzp z`-gNXV(-m+7l(BDZ*JCGUJeZDN`%BWD5R?qC%z;%IHYTTbFD}B zqbIpxA>I6&oAoQg!$Z0ip~M>z((Q;7WRM#f(p|oJzW!V35Bi&q3hAB+!qFk!*FhNM z#)S0Xf8U2!jzfBA!f{+kk90T&x$z-A{@?d~hri#1kQ!q%`4Upom|F)yZc<3i;{WyU z?&A9_h z-W*4NII`c*%?zn6e~!<|dgd5k(re0Qh14$Qyqo1_ht&T6?+f?w7tRT(1Ap#I{DlYj z3w6_KZb%(tPRU7bUPzt!lY8`EPVbb44|=D$`5|?Q!PEsIb&Z*+Np4|C-Tvn0<$Uv^ zkh;f6*o#Bz5p%*$a!W$$`8PM~J!Y1M)GNlgSr$_7nAw};mWR~mZ*HE=H?Ih(ZwwT# z45?qtC{A*#LhAoFH|rhlR);ho2AS7{G%yC4*M>AWMwPKHq#-e?jP)T6joB+co!b!7 zaQ;?&EZpDx_glVpmH%Fc_)oYoq!D}@pG1aBD|y&$3TY%?(swN9O>Q@bG>ZS1k7)gO zzJE(dqxt{-f$u-hH>~2HZEHwlVsLz0NK;~vdV5GyW7M@fLYfw1Z0!tbdW^buS4cBr z)U~@qni*p-?FngC3>UdKq}efC=9` zJRH)(7=H3dNQ+|l$)h1Hj!}Oc3u#G=`r~*=OJl5OI1$qF7^FTK(ux?QJ{8i+7^FTO z(yADwJ`>Vv{>AzCJV`Eez7em?*V}|Gw(>6wz35d zC!~Ebx+Hf)+8?7!axbI)>&Pl`O3vrnL{^zIaz58KvMT&jTQ ztf%?$=5yU5>luE!`CRwNdX^t9pUfCp&+)U(=Xyrg^ZaP}WX8yPfuAg&%otfO@`L4* z86)d${9O5D#>je!A1j~C7+Ej#Q_bi4N7gI+Q1iI~k@a?drup2!$a<9NckzSG=Y~bryZO21bHgL+J^Wbnxe<}|Ui7|3M%Mcq zn+)YgFe+wc@0@cJ_U&*;ed9R5ciGBzf%zQ7OXi~PO#l)=d2g9WXxawOz)<09*8 z4M%w(kB=-qJ}lD@sl?YOM1=&u)5NHdB336w1^(80=ip5egF=axjyvmCei+|tN-j>9&eTNXLbbJXT@%OmFnoa8;u(Z|Zgu3m%o7Ot+?vRFh360QxwVn=cAh@S=hj8et2}#<&#jM~ckm|F z`P_!cc_;5tozHEIoY#1na6Y#waz4qcdh@x>k@FdD@8@${BInCI%b3q?jhr8G3qGIQ z7CHZhzWesb;qw#X)h&d<%U z0{fue!`Jphy_^5~2O`1aQ+Qmo=W_=mk>WQw6p12!lf#k7@S7ZoLn;eTo z1;5GhNK|>fb3S(>5;fjxJD)oli8}AJozI<$L<4WM9p_F*;)w>)g9AtO)E}nu2R##zCqweN8Wqr|`Ck#W!&ZZ`)XW3#ah5i^aEb z3UB*Ze1}`o%&}N}mpjtTu~>W$=kj)n#lPY3-OjQ2cO1UkB^E#C-S?PdvG@s(YUWrh ze#(3AF~?%@Gn~TPBNjjBb?eNrSo{YsTW5~N;upMXojDeZU-Gtl%&}Pfig(>(j>Y2F zyy+fuEEd1vJ@=SnvG`A3y3QPn#cvVg17qa(FEMgx2$jSn&4ndZ*TrvEWVNN3$9g3*HJ|Zxu8;7Q7YwFjiw? z!5hHqt=h)Mf;W5b&uUyOc(ZrCG4J?T@MiD5SxtxqZ}zS?=A9S|-q^h>t4Xoojomx5 znj8z>*u5jGDY4*<-SvjqQ)9s!ySHUEEf%~@doxzkW5L_BH?o=$3*M&v&#Y#~g12e^ zBdb}l7;m;gpB;;-X2bhAv6yByyq_D3>1MWj4HD7z^I) z{a^X}Es6zi_WmPQi(|o?y=ylhx)}@Rso(Vzng}yq)_yS#6C4Z|D9ht8KC1?c85s zwLKQRo%>6ycEp0WbJtsp?Tp2-CTNiCipB9JXproV#pxz6Kzm|wrU?wt-dLQ~=U($6 zO0hVn558uo#o~MuOcNc51)ozE^0kApxTsIV=3^RSaY-MC&4(z(;<7#u`|ol`V!<1` z{~uOIW5FA?KV)?*7QA8meOAX~!5g;UWpyGJykYxqS)GgpZ`iK41UnTA-mqP7yLUPk zykYw`j z6D;o-d7R~4j&r{EFw1*J9%6Z)W1g=bVEMqv{VX3ExsTX%qHH}Z=tTO?v6U;RAGmPUS#WvfJt;;VnpvbB+)Vc8}TIn#7jB88Ig%s z2?@j*Vw;G%Ljz2Rf@#@^jVau2BGS&)< zA&K_{w{aMiiT4a_;jqMe7PfGB;ys5fGa~Wc26Hqr@m_*C8kKl2!yJuHymxT0=W}Bc z@14jpV-xQ+WSMb^_g+|`@rn07SfL4t_d2Z5#Ke0)tk9&y`v8_xOisLyHa5{LoRa7t zSa(~dLg~%YrX~6pXu)baRC87{67OS;O`5Wr38k4iEAc+Acf{qB?Go=3jZHK&=RoOh z%iP5KWMh**u$l+;dsg!k?^EVLfdz@jo2CAS|K1A|$$xL@@t|Xim&hXA-{M4OaDPh@ zS%Ujpn#eM{KRdT9k(CC?wWt1rE>C0wGU$p#K7kCnGLcUrgRV;CQ=CEV-0DO=-5@{D zR)fD_O(LH+Rxgn+7^|1a7md|RBV3G#kA{{($o=8@)vS z6Q@}=dWrmJ&a!+&O(K8DNtTUXB7ej=mW^H_|Ao6Kd_+wm|CJllZ0{2JZ`?FtdzZ+6 z=bj1MyF~t&=Q!BjCGscSB4K-%$e(hDgza4-f5y#ews(pAIX6Vu-X-#v+>mB_m&jjn z*CU_1lgM9l(}V3@B7ei(XtsBW{7-I1v%O2??>XhNy-VaDIODRtOXPoX!ex7x$p7Yi z%l0mjf8=z__AZrwg6D0T%0I*NHcRDSaJWqKR5qF;Wm=??kI>Pbtd^ktA45E<8At}>YqwJ-lh+$ z0jcEUZF;d9m`Xn0rU$D*sbt^Ojn&{(vTy3bYDg;CH+5n)G?na|I0dSPf6* zgufm~lgf#IJ&q=o?4>kGMx~Oy)L&SQP9?jg|6(;JmF$)@E5@dhJ(6z4j!Pwbq+hcd zpUQ>Cb4^I)BICIxrgE|IT$57CZb^4TC#RC#lJ;CvQpw)u`>dv>lD*G&SxrkNd!KK! znx0DbKHp?DBbDrZzRqf9DmNIXH7k`HjnkT)O7=rv=FiSaEA7NnAo(9s9eEKKDN0)q2D%o?rkJZXlvggtz;Hp&eF*r3=t5bQS2__2Gq>}xR_EKw8dEYpw zb*W^>qdo9?j$Lz9%m$8Ab3n|-RCXau1a0D|BmBiTbA%CEi(5E0^f4~%|2Pf^{&X8Z zb3$`(J3n82z$g2^RPtdkUtzVApQ<^nWmhU^nloBBehT2 z$Ipwe?q#{(NbN`t7^xk}!Bj5e8+NihWaJK(hmG9M@<=LI@(r80VR|%`t5`nsE&flN zn`id$2W`WSaV)T0&+<421Ix86PZ+s|#7>=p` zJg*@1bGK9fg$94FzFY4;p7Q7Jr2b1NneV3l%P5)erT!~OANN!L?YyMN&pk-}R~!7< z`pfjO4Z0`wF!kTVljaP})PFC}nKLj`|9#9524>NJKiXbRi~a}D_G(u2KZv$h^P>L- z+FmV+{)gaiS{D5e!{4+j`X7P6XrK4qW^Iio%Til6Wq+? zdbsF+5{95-(fpM&-3TJ%2;>(j01e*xB~d(r9aLI0xv9TeCD zivD*|U=J+%-$$|-RP=w0nt5>1{|WN`kfQ%n)XYPR{?AY|4=eh=LWMlM=>HlO@`$4U z8&t?6i~fJ2*)gi<{}zdVbkYAE691T@|7Qk%J~y`L|HZr}Q}j6>Y08f;`c2J=(-Vq* zGgD7bEc$Jl;I++3MZc{%IBas!Z)Ye!rRa0+>CIm|wdiy1(Y5omqR+>&b!Rob=yRUY z9G_A2IlE|D%q;qxU9?M_RrEQ#XqPy<==U{;%FQYI{mh|qbBlg|L-ct?pL35U`uw8L zx#v%;78HH1%C#e0SoApyX-BxI=yMkO9jnDfpR00B`6Wf4^O2_f(xT7#=$EXP6@AV} zdWLOz(dT^hGgd2#KIfyKuv%I4Iph2bt5rpxGtLiLtuFeUasG+N>YAcIjbr&P%e6-8 zT5VksL+}>M^+xJiZG({-5*v#cp4V7zGV&_R%|#4BUAAp8@)FCfMT|*Zwrw-=Jj?Ay z>I!a05rgUs%biA^X1S|~QKpNz-A3wSZjX_=nA=;#5I)LspOHsc?k{3YYhE5O@*vBD zM(PspP|;t=zp+N=VIwsUQG2V(5=EO-f%1ue7SWlR>d%7RzWSZ|#LZ^vXo zn=E)0)NGpt?*KL1Wx+c^&GuRF8mQSJ3*H54cFclzgPNVP;60#b=Pck7gMW-JS@1se z9=m42>*zgp%Yyf#_t-rPJ_u^|$bvUO&7N8C5x}xn7QBfjWbZ8aD(as;S@1P3d)NqO z!8aS5=z^{vlpenQvw+j59=-#h{>W-z7Vy-8Hfe*P^gte*1>e!NE*rrt_-!!9VHamF?WbOmR3Vk7<(6P0Cb?KiA|;74heqlBo=TuBn+S;mE{+^>iGtxr<&Cb{-6uIMVT@)3yU-LT7#ZYSdyuCp$)$@Q}0F_ep#ko zN7HtBrrwXH?TSo&08QJKnffrg?5i^M5p>yCXX>NqvaiY1o3ImWGxZki#JWs<40d9D zraq3Mb3>*+!9^#}Vr1%*{Av`JwVC=9+{ETgeHw0JOQt@GQ(t5=kG$IBRN$dnr>~lYNQR+p01K-cHb9XYuIZ)l= zP#MdgxSJ_XdhcR&FH@ZKbQ|`5rnm@umDPhxaS`?ktB0B5;!5w6_$X78nqZyU<4jF9 zZP><=nr_TM(~_ED%s{h};zo5p{)*-$#if@n`C60|mtMN$YgtlrOv%@(q__yvC12~3 z;v!6!d~Hf=1TXH;$ls6rAJ9|v8HL#v!u9K(=_Q-Qe3QQ zhV(8eF4iNV@v8Le>0tc$CdE#H?tgX^_Xv%$8xrjb6L(Q zsYb4X-otXPk-D2Y&&YSNoL^E+`38N~@d6`tV|8IkHRG#qXSvA8R~XfcOCh5=^tdo* z{FTB4v$;!4VG19=tP~dEO5u~31Kn5(p8|Y0mBOb1-_51)8Nhc-DSQ_Fpsl6w zIavH{rSN%l{=u;PR1D_#SZiXeoRzxO}V>z7JeJ zUJ5?|9G@tK-!}Lwh2P;(%Kf`i_+9q%+`lV@|Ady@nNs-AXvv)|g+D|~?p!JS5n6KR zOX0tv6L+B${yREx7fa!f(TTfM3V(u5+~rdEQ*`34l)_)}TnQJerSRA2+FmP#zvcN6 z?%$Qd-|TP2@7bAi|E?68zT2%*_(weM+okX?7*}^nAr~(H$dPfk6t?1s)9(77 zk=k9~FNLl7s&>~8jMVP>p^@5MKPrX#m^1CJAD2RX*qNRxX)HtjkY&?ys88e4)j+dy zs23Q1pJj6+zsItLk>6$6(#Y?yY*h|B@V(z++1ki&vTS3dJ_Ek3kzZ%ot{mzE*7R@D z-pGGo*}=%Kvg~N2oUKh3gdIn?I^>Yhq3BQ=+L8>wel`jo?Ne8XET`x^Ns%YNmsJ73k)D*cW8Fv|f( zeu(A3a@d1!(9wj$Q{N=9Q!OgAwz~(FeeY z1?A|2V8p_5^adEQs2qI=j96TbJ`6@IDMudxBbJt5*Ir=G@{X5Fh&(Q4OS&n{z z9{;X#^h*F`cRBhMfU>6?{Te{oTaJDMpzJG0e_)Q-x&7tnPYn^9nt_~250oQrTIjre zupIH&*LnL;Ibxfp^Y-C##5PUm?IY!=wa(T~?r1sUmPW*mrzKxMR*u-J{eac+a>Q2c zd#p~BBerVVzMU*bY}K@VJ5`Rj!SN0L`qSlz8ype0sI`MQQ;xWyp^e+wa>VTk-JU&H zj@XcWoYnbq#LWgh94?e`TD4BS7meJ=@{*CdBEDS4k=Z&SUolcAM+Cv+&I_&f8wX@|KZ{S>85M=jJVfmnp z(8$Lu2N|iSBnMY`c|ns{@B71Zyp=dbH9xcx z7tI`RCCc8UMxUbSc%_-+;7e2wpZdW^P8^u+>T286-==1ti+~--BpRdhQ9djO8j-6TH`s~O8gDXukNkH z-^BdtzDoQp%&+dR#NP&T4^-msFmnCe!AktyhFBYeSo?qv@z)=!#NUUBJ6wr>026nl z68{s=t#JuliGRe^6_>!3_+PlV;yK(({9{a~o~Xn>gLgYwiGKmhcB&Hp0W+khEAgMX z4&tU=C2qn0$Rn0#jeN-RTm=z$pXGTY@3Fj4K}gdAZQHF%tnJD%mbZ=6?aw=vSeuOl zEbkh*pXI$utj)$=miH^MJ`!2iSr3fd#qwb#?#owquzY0Xc9xGTaX-GQ>#W8qgRYEH>)N*jCrkwUiH_!nxtHD^AhE1Qsjc0mnc`044uGM)ue<@VC!m9MklaM zHK|}#NZV>s<@(#twW}tzhD85tiT+XM^4GVoCJpEbcBm##peNX|nmmb~V5e&G3|fJm ztI4x~N0(~y9N^Kln!E^RbgL#Wqm$LWn!Fv;B|WOiI{=8D)#Nqw`+8NAcY_PPtI2yY zInt+^ybd$ex0-waMOD9Q@&<6wznXj)wbX!W@=;J=U^RIQCDfp5@^K9Q!PVrGsGNpW zlTTyJ53MGD4>L5ZntTpJeRwtbE{5ocYVth{(UH~U`xv65s>wfNWR9*TKSW!0Of~rt zhUnO8@-G;oEUmQD&s)-InoskwBsWZ}& zDxSN~a;cFzBQ2{U5Of+^Zlud{g^>=+mDNOtr%q0*jMT|#wUIhGt*ItDQvV;8YmNNB zEY}&SQ`Y)wGJtPr!g7O=I%RD%Qm3p<)np*wpvU}XBOkEbVx%7aTdT<+zTqy*ZAR+h zzuibZ{C8B7!F+?BG}&q74VJsA$q>G(NwC|uV2 z14il!?_f32$BJuI95V6@%fm)$Y8tC%rkaf6tNU17$FHElo=x>ik}K&W4@rca`wdZU^?g_yrtO`qnN_j0$Y z=`#)KpZK5rv+lt2f|qLgJVO3XHGKggf47>x2$O%Wn!XJt|9&-ni3fp`dr(bZZb+N* zuc4RPJgla#qL=!pn!W?Q)W_BIo#>@D)>1R)(6pACIfrJo)XX_Fucc4#CGb*!bIfF)w8>qwj)Y5OF4(nS>zlA!iUoHJM>ahN`^arTA2Gr6YqSzW(OMisNIjENY3m)g- zTKcbeoI`5qPw^Co*3zHhDGsZpKgUxXUQ2(8hc}{@{t6FoWG($QfHkU?{toMLM%U6m z>XnW>kx|nR^DS0mq4fINaW(yLbw7AK)Q36bCe-lQUS~Pc$oH|FWTdXPC)d(u{9JY0 zZHkfa;_#eWD{^=iO)G6$t(aoEXL_wz1pa5#iW!<~Gi${XnrpLa#WM21>{_vgp4yyR zv5q`2w^nRGPi(fg@eO0=YQ+!pNa7_d zwc?wNO>_@-9h9!^*4K)>IPn{-HbChmI~!|7UYz)ktTsXY1FOwYUuCtWR^(-hdhyOy zDBZ%}Rx9#?MO_JQuN8TjqHf{us1VVIgTJ{9e>)BfNB+~1- zTJ{uXJ z_oLZxua>=m9>e`w_965b9@MfAV?p7=TJ|P-43BErTj()7u4NxXkD;-ieG)O=w4Qwm zG2X16eHt;|yqVf3tLzr(}mRnLBpDd^ty><^fN?o-eH3w24~diLLV7X9kkAMq^u z*Rwz2Sq!LWf5x*ISkL}~bs&T48MjnMaTpD*XY6D28owd+jOVrnvl?2@xRIh;FT?5? zH&Xhu8eY%X<@9DXqMmURr6;SA^^BV++6|4WXY72svKn2_x*A_Jrk?REm!8rYThDqK zhcvF9aVten>5Q*uydp%e=bKQ^c=gAhSWT>FJh%0GR+H)(&u#sd)#Q4{Z6G}@Jf)uT z`i@_*np)4e<)SBpr`0o_>iRjW>Gh1Ky7UzAjCwY~Ox4V+XFS2Br)p-^GoH-SNSIyE zW}BJ0IrWUEtMs6sThDm9>MN|~)ia*1(nEcIJ>%&rJ=7P}GoG%}Lw#XAAVNw2kAQqOoQNw2kATF-bYNw2kAR?m3aNKe2muV*}Mq$l83)H9wo(i3ni z>lsfQy~Ju&J=n{WbPpw+VnO*jKE(CXR4 zCY%BoX!Yz-6V3q)w0icq2~Vsr(CQh#O`)gL4%IV$hvJ8<4s$e-*|345$*c-ITF-cG zp?)66IGPC0<9I#mX4VIu;AkSe@_Uk_iO`NaRnPhmW=~Jov;Ks)QOx>V0b6SiNtT+hZ3Uh2J4&v^Z!?sZ+|xMBk8 zHr=&)re7S;y}9f4OusF#gyoHTrr&d0$nvI<3s~MVQa9vo*RyGS!(5hkjGV*rE=MU} zoyGE=kuzD|uV*v)>NJ)QjGW5yVLhA0S0}T4#39XcBFo1{PGH&Ckj>$%FR*NCq;AMH zYslvD)n`~XH}YwgEsWH?xt0d;4J=z3S!db00nD$mY-41FW!r{qF@Lj+WxIw7DU&C}CJUGwy6$n;{)Jj>oj>YAsIk-FyT+mPwyo4UH`XQZxf`Zr{Hp{A~51{kT^ z7z2&G%W_adwt;WZbQ*=7t_4jksowg8s`hbt}tj__sMAYBL?ski_*%9m}2bRKZD;#}YuU$z6%*}$>B zY!`3_aGWAv4C8&-Zb+xXJ(=Jw+!M?Dga1=uqPJ&@(>Tf7bHr(!>}{DijZ?g}P#Bd9 zQ@wTGZiCZmx8v7#ylk4cu^8Lw-kvMQc80fJjO|Qs6VK~vXL(Cvb!U5x%}UheHx;^wdL_G)qSS9*Jm1Z%6jy;l7F)!u5kb&a<-iydC;?JeRHt@HL)@rl-Z zTTOhT3U6-{pJ;=(cS{hq(c60@2;1asbqT^Yds{QSZO$d-aZ2(jddH|J_{R-#yoF-DdpZH-u_C; zy+^%$4h9-c%HBS&bzg6Pt#w~-U(mX*x4%a%2Cd27z7DH^FxJ~Yppga*$=<#pYn8w7 z_DvWEH0F8xN8Q}eTV!R}-TvBJ_%*kKPI`+{5j)x6cw67dCOzMJ3vcFn$m%2(ov!0R ze@ZMmUB`gxCKevfC{Vq`!owK>s-IYRIKw~<5(^J!2&iFVk=q#rYLr;yb_RgnODwz| zZoX-p*p}K?`+j1P@970ulf^X1GPBd1B$sGy}Cr zEWDYfpbry^G8VVUv`p*(Eoik$EIgcgkhM-MJRJ6-+9YP59p z>}d6(+9ekL4|`GV6AS-`y{Ha}h5y4|RL8`^|6wnxQ)1!&{2J6bvG9MM19eF({GVTf zx+WIwI&8nYB^K>EzW{Yl>{NqVJ$%K)PSZ6LJrlb`y{KM^MJo+^QN0rjpNPGvK8c0@ z!@*JC#IDtq4gC_kk-sCTyhL;WXJZE_ayE9LBCD}MiRcGbV}li0jSWd;)-M7MRb-7e zERoBAOK-y!S)+|mWQ{g5k?GGGZIt3H;OIoI2Uc!l6j`~ARh$MKm)L!{VA#@+S7b{+ zL6I%}#Ki8$0Jij#6xq^GPV50l+0su@WJ^Cau?Ha?0i34DMt`~@8~quILxD3BdkA9( z17|6+{hzHk5I9G10B~+%4`XaU;5@~?!1;=OfD06R0~aQiTa>y37b$iFE>0|WBX$8U zQS1y{s@Ms*OtB+yd1ARQsU2{IVq4%!#gBoj5_F~ z?og}?+^P5{*s@)TgDrEFusj(pGKo7!!stDTE0ZvKZ{n%mx-$)k@Z)J zt19N?>%?6y=Hz7Jt`KwbP2#SW$okvFT_a`uI^=GYn!%sQ-7EohU2?ZbKwXdAtrAez zCs$39Mh(c_CXsbRa<@xl-H6;zC9-~x+#TWwG$wbaI0EmJyGtB_CgiG1BUV##_e%EY z19JC?`EN$e$<+|^--29CG5;TudqB*8OL7m2`ENz;Au<20$vrIQzYV!Z#p-`V z?lH+HeN66g>8)r>uC^qW+L3!w@+R%cJtcXQ4&!xroP51q z$UQG#Z&z|!mgq+A1^IfrlY3FpeLcv%B4A z_qx<4`jLA>awGl8y(Qn^0CMk0ePSTFcclk&5MlEb3B(7JgV|$aGK3t=-Upzel6k%hI8~7y;Ax7SoS#l^ zJSOrs;0#4h&d(&7Qe+2swqgZv4$1sq2b`uF!S*|z-xI&Tb$x21GC#%TK##pu| zs}{Tjs$KY z$Gr$cfLj&Wa%>~F6jC-9+ZEYd>>#%cQZ^Sm71>qe@b_aFU|fN34w_*2diK@C`+Y^g?}05s6x@lSZj7YD=SBO0jj*s3fJ>dTDf? zlw#|r(fQKH(IAbqCfhKLE|g^kjne2MDbBu^Mp~0?oJLi&9+E~?wH}g2muo#Fjjqso zNE%%!Eo;rv=qjnwHcz8#MA5cLqiaRcewaqrONFFm8r>ijl2&PSljzshY4j7x&bLXU zTclL-Q5xMUrIL@+sG5{Y+NRNMo+GbzX>_~vYP3(IpGvPrhcvoF3b-B9=q}N(ozm!T z(XXA;sJgUhbV;LorA4D_8r6`_jBaUEQ{t@dY4nhUS3T0`VF|B#rco^kuX?4?BNATq zPNPR9yy}xik4Y-DZyG%=snC9DR9jM^{nO}Yk_sJ=Mo&m8bYL1iDXGvwY4nt&LIfIOk=MvHdLG_7wxUX-UyJG;oklN7 zT6#v7!^w=(l1;C#KQw#EMQzqt_%+JvoiukO*u_ z8oed?>8WY-j<1iuH7$+a6-R!08bMog>T^aKAzb+#Xl5EANMTofRvIB7VF!J78bL=t z0h*IWopd?!+%$qdz8|uAX*87k)1d3pXbh$=>%|3%T&Y}`%FJfHxJZ%p;$lTk7c5C- z*0Ww*s>t5=vNYm-+t|-uuDBSuLXlPEN<~(YtI~*F5mu3_73TrhD6+O(n?~%Wu!>x# z$SQKZ;!I#g8co9hR)!lCrvNu9P6lpDBkt#96}efFRpgd5Vuj4gaH}Hw+1nIZFK$mG z*23&(?@(kvd#57%*}Kwc4hFEc+^xvka*rbW*?ZH7TgF&h?o;d!+@D6Qu~}OlP-N%& zU>dQSW^H*$k+tPv#U8*TX~Y_vwdGO8uE0+eyFjZQOUt3v$}5S=_%uaXcqC@b@w8mE z+KIGWwc2NCIcv2_h0oJ+=gX_$HC4GQ4SOA=<>fNlzf8+xneAVts)JI;J_OrBE|`e66w=A79M3$iq&3S$wu^FV`kR*|IVuA7ycwY%lk57F$_Z z+%}7ybjq~L;z$-2x6k5obQ4!Dbjae^$K1*kbLSFonb9$e6LEw)Wig2(+&PO=afG{M zaVCy%*DMaApSxvoF8aB97MH{k?vcgki6h)Ii!T)Y+$)PO68+pei!T;OxK9>eB93t1 zEWT9qbH6OUO!RaAEUqH@c|aCd75zLgi?0y>cTg5zDf)SE7GEX$c}NytE$OeJS$vH+ z!o#xoI%%OBp2gRTq8^dOH%b9#vRFIk z#%J*zqMs*Z@tvZdCuZ?oqMs*a@qJR5nw-V=i&~zN#Wh4NPtD?*qL!y+aV=58)3f*y zQNlB_xVB8onOXdlsN7ju{H!S0*;)L8w71R4;+LfEH#du4hJTA4`Lg&`X(^tc#ji`! zYC#siDeY|wv-ln9>s^$^@S54TU7W@BIN1TUm&Nbldo2Q&DjMLjOull?7B5%iR=5?4 zCxI(7nGRn8S1EE1d36?Zm;VXi8pY$lwThnt*C`$YuFqm_<~s_kP&@+Mpm-R#F^jp; z?;voK;sM}h#r?o7SEky-L-mXygXIi4j}X32>xDTfxr8n`S;wM71T zmSnvC0L$O9B=D|ISpJqJIdAIp&xNmqt^$3XB_-~LIK6N(BWyoOe78Gzb{SbQ_1|XX zq#dkIpa^?oU;%HSa@l;TZlD+&SE9!+(7D(_`;0>UK;9E)s(JI827$0)5TIe8AYNUg zKsgqVo>6!&P{|W#v$-{=ai9zRj{xrnx=3~>XcFjR(IHI(T_zsg2Z5@{B7|mvs!H=q z^FWtN^Gl0BS4+hFVW4Y7W3&u(t!Ru^fvyvc(K^ueqA}V8x=-e*Q%@R7d4|I#Djt+rt71hx(P&H8HfF^t2iOu1*#>E=p!ZpkIiR85!tl`T9o%dI^gevHNJC-$+B}m_RSf8mX~?ekZw* zae-cwT*&x9zZbPLA<*mM&P@#Trl_4sf!>nr`Q$)vOZI$9pm#(OO%3#}bbL<>^hc?7 zPY;C4gKOL~0wI6R+1Z(a5Xg(m7YNFU)zs`j2^3ibSQH4^Z4T8J2ZA&CIA}>AWVg9JW@#Ygv>yg73xu5Z zgP`SskkhUSS`i3o19mW1210e8^SP@6A%Vd8+|_|l-RB0FHGz;y;LPsYK<#v)#JWIm zSh?9{eV`7Sk*^4Z^ukS$Z3qM>_6E?#Ku9!P2ig>fHwWr!WZV2LfsjGJ9M5hI zgfv7I(6&IxpkE5w9tauqOF%mU!4{uY=;r|`fomX{pnxpfoUQTm$Ue(WOp3bWVIbi`U&#Q(xEzo(@D5r%wuindPk!JlH=d@S@ zlJ|2$uAk>slbn$2=XupMC-gtm0)3Fv3hldSmJ{;-4?xyDr&Zc_(IO{wJ=_b~hdH4p za1W?uPV00jZL6HtYo(`kP8C||X_M0iuJoV)oYN*KhRwi_bJ0U=%GxTjDQl<5u~7S5 zln9%$4vK8bIx2E3)F~Ie#HOsXBF92qa#8o3BkHQiIiha4=ync^x+^Y*f$5Q_Ffi$v z^568#dGF;m5ckS6h_f@%!hls9d8SKM`{bFEFQ{+MZVBh@`Uy1!^%rUa8jxqcj(HC> zP^b}TP@W}qOasthq57a9c?O+Q7c^9eOGLx+494=0py5LAf=1*S%;r0wkwR~SM&%g{ z=$oL?LT`Y^VOI2H|S z_!p;;PE=fhcMDv;&~5s8VR2~2zq;_RuKY{7A0{wyCtFyFU)69v)AG|1RlEwCF7!&p zJ%t%U|BzE_j#HcQcbwYIm?ATCa}F-?|18YPO&RWcfDg%pnkKwf{HnqgX6MFYZ+>je z|DB&&CcIv3jhD>Hjl+if_&iN`#Dw1#4_BO1n46o(hwAu%O{i_c6Y}#)u>w!c%T2jA z>_!@1?-_2v@nRh_0Z+}(jsJnWE?kMH7UU-Rfv337bYX7Dhu65R;GDvu+@wD+jF8M z`E4CD2g6t9=3)`>Vxv{LxeWeFrNZjmRPkYBu^2WNi{l|!lbfnOY=>ZHu{aQ~TbrB9 zeb`ehj=_Ue3F~zWePRI*kieQ5myer zYt|)K;5+>^H!tg_d?Owm&&?n7v$c41A~$d8|84N-v)uf*p3)ZHvLiQe>f}r&R@_|p zA~*2e{-SC`>xse>T_+k&)Y>T;O_Uj{Fpdhp%ndK?-iyEWm12mHT13}aE>|>1gC`Yt zV$3&+;TCLUh{my8F8FPDqE1P#{TGoJNAFn4aClf7SXc3JoPIsUfRpCJYWDPr`-%bm3HRffCMDAjwV2(5r+w5E66hPi8{Ng!4=|--HWHxDcQ6zZH6yLhM6U z4B@mI71axUN`IM;e6O9q*D8xWUR`l1zaRGygj445-?GYI;uQM+15aTUP66-t|2c&( zDoTZZC0rrlPIxE(_vbzn9yH-m6P`BV8Pl|)YN5Z3RP+2@V+>XUtQHrR8H5G?wjQn=lR`-?;jr+Qy>5IFdfwd zBmUNbk#q2V!%KX5hh7-@Lq}g@`d6G)7@?zjV-z2d?#5pkS>j6_?i{;x-#?~8Hq)3& z6=xSl>BtF?@bTwoy5OBh>oXG}h_~?P7ryezM&QnVP zZPM82wD`Zz?1pq&DWGK;ujsIf8ZJk@LzF#cKV8`*^8$4 z@49F&{=|RJP0#E#F%9s=&Kx?&&2B!BjlZi2N^Sh__)0i9I{L`N)+2Ol7(bBCc z*+m<(Z*F={6pyv&t9Nyyr9=NG)Lk?C4ovTznw1&7=B^8(rH%g+?BwjeUArXaH|{z= zTH3pqnw-0OZhmTCoUPFET~CRYp1l}|`Ku31#k;32fdRHTTyfWF(b8iejVe~nZP(0x zGTeUKFMqA7=!OFLKx>`cKM85uQV0J}Ej2%5Azrt5Y0=hSdSH4+ihug>jGwM}HGkFNjjz*lGn+P-`=$Po!_&Wa*KR3YJG{*Ao1XK` z|J>mzKd|qhRQ~A0l)iGGlz!ylNzcxEmOtt6q~{JyOWjX6Jn8v;9Gq=?f7Ia>`oW%x z*ICa#O!3KCueaTLcug)ir61N{cjazR|6}huFIrj&_cz}m*b9$hcxH0<=tLXE_lCqP zc>iGm)Mj>1wW}i%;41|qM%DuO5%W`5LEg?ouR;kfS=cF>oAsTdUC~WR7UDxEMy)7X z5=9&0c(^$bPc+({=GbUF6#eYbaUj9{iq^&Pt^<1y&hcNg_R!HrVokT&-rDGbb>z^o z(W#2{i1yUn)O_4*U$8%V(xFpL>T#np`$s0{E}Oh~?^JWYA;0y|35I;s(B$my!O4Sr z4dorstl`#mCTf#=_iDT~F1aC;#ct@rL`z&ee0>>0OuU^owDrMp@Gu8P{n8 zF0I|I>9lRm`0<{~wvtYL$WJZn)IT`+X2r-~ap)MMXKkm|G>pd!@oKwkKtJWD8s1O( zsTHm26MkxsPW`x_+N)DP=BM`Q)Q=w8XbfB5?2K`^HfC(e5R4_8T~@jyZNq((muNWG zdx^&6BfUgp@j92-+CE}1g*XxorVvM>!Suxq<`J$M>LXR1+lyTp3=UU2Lpt>nj;TabBX)b1V{1RPA~#TXfuoFBttJ5_OkZ8^<-|sNI-|esSm|lX!F-k4`je zajV@NiwBzBPV^6l9&TtS#PI}L?#yg#T51h`+F-<18%p%HL#LReV-x0D+!-GnZ0>+Sgi_bq*TiwF z+UYhb(WnGbY0+QFlGGY&(Q;||c#`@KHBNCb!Z@YYNy$hREtLYpW20O7FM74g4F@*l zrqithD6ThZ!=2~?X&g&nv=a>+I?7b^DlE1($MezaVXm(F)krD#BWb^v)Kfvy0WS$9 zHXmK)k`5ZI$3dgUTEip-_FF$qq5a-ZQ*aMrbknj&LNwkxH94p3I|VI6r?0o^3i!SN zL81RFKu{`v;s`X)>3B2BQ0q9#5tNd-5JhP@7@{aO2QYkVv~|>SiOI-I{0uT#so0)P zR|M2f&e+r1&0QTHP>Vl$;s+n_DO+x;w)V2beiEX9=I%d-?yfPWKIgFO9P zR>b7!rCEx}Prv|^o0m8lRYE2^&@+`P)+9e5^#({rQ-6SDRFz$uM8UPXZPk1JA)5*f zf2UkzPBQCgmSRTolRaj13I%afHWj>Y^dS^8lAq?1fm&}44l0aYfn;z`y5i|Hx5m}( z*a$oj_WFHc3S=&G<3Xo+VMF!Zr??Kiy*5grFYfv*=6t8Rv? zz_vNAMSsBjs8d!W1#O}hecnq#71g3IcuA<5TJ#y0#KI=lO->_|6xghvrqJg7GzB-~ z(jdxmuSG*HtHjfZzmiUqT9qZP2Ub4kA3ELS=0rM!_&);4mOfHNvFwrVUxuYKJ`lY{ zI#X$m=r@NRVN{%?{mp=me&38z$_^@-!)i>I`*8u7h)WYqhQkPlvfDtbjjocZ^gqWt zje7KaRdjU5;NI10^v6*7!XeZa*2YF!&EZBH#k9utH!5ctX(w(7{vHJh22awgD68$- zP~6{v0Y^zeh(L^_5jdF-99nNIUI~}5GlGfBPMY*dhnu5~NQ~8V1FK#13qx8XU1&oZ z9BbDahW-lI*Wl8R!OicEw@0H>T#Jr%aePIlY;RPzMR!R{7@0?*jmw>nMq6oIP}@Ma%H1=nC80&2A%_kS!y_({5Dj(P#5v z(0eq@j(iyKD45T?&V%~UmPV^&1Hz)Fi^WMd`fHgj+e`+k?RK-#jvnWgRC{bIq9&}n zb~n0Dd0-rH;ejk?QpJ9Q~ma`Uq@ zd!w_Z2ty%>NDIYtrV{zklGWHRP~5+^I3G&kJP8G-Rii&rb+grJM-8+|t@k5Ku=<2v zmHhQIbCt{^mieQGStZ|VLx2}+b3aZ z(FkB)iRP)x<#S6mDvL%Yr}um2{JoT;Ih6ZrYt9|U94iOsIKjLl5AzkWvQ_D{neSj8 zN<=c@b@Fd9cWUsjFIjoXfw^6?(Z}WRIXc!t3lQV!_Q7WKFh8MzC4}JUAnI|vOlWon zqBCSd9SKkH5=I8lr33~eCmYrD%JCmD2@JE1k%30NjzNw?`U_#V&Ltub;4b$^|8BGL zy(KHJnB04CD*9lGt1}e6fn4j*L6_d0aJ}EtJl2jj$Z>mMTdNy!B-iRzK^=lO(eJIc zA0;^N#^AnMb>tr{Sv5N~hp;7L3hQjz(z)oxQdMpE!suiP-04)i2pFx8&RoqA|^4 zR--M;ACVP3H77x&V?58r1)1uNR%5hYMSLnkzV-0B9OH3xyZm!3y7kbJhPndOF*u|0 z?-8uA#NT5h(KKw+XqeHPNH`6BV)MzgZS6S+_wS$FH?{jbwP@XZYAW#pObn;1Y(2E( z2#iQ`Q?pl0?Jh-kz@j95=|pr;{#lD&BLBQFx?KJ_iX}W`Ph}PTVad{qqaButKd)5F zaUITB%VAZ=25)uKok|>yTQhS}Et5Kek>F{m)C(2wrc5e%&r78uya?RUOe%TDQ>hb* z_bHiF@(vtE0k1a&dHvGmP0S2~w#2VrDocEmEwz^|MX7z-mKy%NGWrA*no{G;rAzHy zZdO-`fLAuZDv(aAU-!ST`UY+Fxz_3%Jgd*LX5O%LX*c?Ikgbd@jifn&Z32Ft__Kx` z6Y=MT(KqCuqtW;Ir)o~GWWoHKrQ**kquX4;a6Z-r^8#0CDp5D5b(vHa%CV_b-JGIK zDtU!hrf_w0Iw8f26(o31OQq`OB%-tmVM6g9k>c&DYFwE~CGL@~auq^S>3ag{9duTf90x9%H#43vOAuveW7`hA~iwSj*9IwyxgEy1L2M75=;ulZ%bX8t+b5*Js^I zF-ccyR4E*tM`Y$sWahGC+ELNz=WzVFb?J&`2cGepFuSXi=ia(>Ew>2T6ODQ)`XuH7 z$5;d7dqRw5^ghYhX|B?16uX0;G+9xm1|ctA>7+e)_FTmo-}| zerWo=+8t3lDYu7noz&8&maeR|#+&u%T3Vw9_fMf9Y8ZU(pfx5%6vU*hVaQgSZ8$_P z!JLwCE~ke?pT#EBkZ?u_s~kOxe9YPEPc2>E8EQq}k>H&nnsEhO0iCNgo!WqI1ScMP zq?yD{W}3=D+#G2QH%73dgViuc?hh}-#76OnL#G*}jSgv|+HPXzRVcqKVj#kA;Zf@e z^%RG|6*N|cHLPYE3g)T>xrp@_Zn^BRT3D39XJeLn3h0!7vU4V!JY2e_+HNMoKNfNj zNy^#(!qV=3;12Q2NqKx}`6pDhFNI+g%$U%(1&*i8M>ngsXkb@Yn z&Ex1Mc3fY`L5x(Hxx91}J8sOyAO|sCA1GCf#@K^wjI?yAKDn5MDAgPm)J=1AtE!uJ zF$+<4x>dQYJ}%B#KMBmb1$c;aY(N!ps~J#awi_2HoL4Qx zM5NapdbAl^PGwEGoS|8XQa)>8Hlp?U1&M(=#sYI}l=ZG`y1R&h2tNrh3^y9BI{qny zhl&`8u+%R;Wdjk$MjJbtx~9%6W+6%=H4ZW--EAr!rp(w{K&SkuuL3g^Vu4z`+txXG zN-+yj2K+HyO;<4v(^Q9tS)^EAbFfT}`~fav{Y7}1PUhqnEL&0QwuhtDc9urU@E8J% z3?S&K_65t9PgEH;OXl_$EL#a%ngh|@&X-C~?-XaDcX%_;^+YpsiNShYmA&zWG5~nfB=%j*qtElDx z3sG*#vasY4Dp9{!$L}a+A~znFz6*JW8$6(gwAZVW1vfVq-| zC?62hRg!5ol(@64v0Z`us*r;izss|v+ZY|uL*<)_S%~s4B8ZRTs0|9Ruu442fpR2OY13G7Xht}#1BmO`O*4ZR z{n`aj2!&Hdb{|DYag>6IX1hBMBae1XQl)pM<`I#cnVp`$dh6`W!2{F#FNFtZw-Xf4 z)&S2_5s=h&9i@00`_-Ag_60D}o-InG9r3d+q_2qe>A6Ji`ED;Dk>lw;7=$BN(bg1| zc01}*+*qn)Yd9V=E9lR48{~>Eavl9`iY9W4(^K{|mzGo42-ML=cw9VrwG=U_<8?VJ zw*m(zO-YNb>O|+n)UNrNSsdo_%MKb1<@!`Uu*=rw`L%d#a1irywA+^{36titymuI*{fm^QUq2P4@HaSM;+E5qs%bAbFf^5l$maR|+Oc}l3ptfhg zy>DvY%4ML?eeJIjK7#DKjB?N_U29GWNiL?ivNW&fyQ zzZO-Zbz|FdZr7fv-3Rwh#TQS`;zrUeHe1&lDk7P?=PrhKA`+&N@B>u2R)+(8iG8B! zzSC;_l+nlqm@naXhBsM>&lrj4VWiX&IC!XZq&vtDt<2|)%yW=0ErWb18Bv>XXOlX( z!|-2?rlSMQcPv|jZ3{J|z;RBah}w>pSd=drlq+0qDV>e|yKq`M8KI(=WBAZY?p(G$ zNmY#|x){}#kT$etr>6EDup=A#_(n@y*Ex7`B8si1Q%n^6&Sgg@sS2>W??5z${-R^# zcP=|Fg*h-iKZkJ5$(CV*z*WSrr}9#t^78U(TVUT@wkA;xzdXs|H`6(MI&3}jM6~13PIUe&8VP$+SF7 zn79L`2k(buH{3sSAo@CrPdE3YIQK#wPB|zC^g%&M91(q5cPGX`ot=A@t(?bs^En)c z&5PfuAk}@#R9_XJL_j^l}xJ{_IgvkJPoX0{glDzU3N8a-?Eh`pK=LK zOtL^QNo7P@jx}+(`P1VqX2*_-@(!CpGtd>))u7C$CjdRWfLpWf5j^11tXIV_mNZVCGJtmEr;J74vn}hNmSZX0Ztujl!m%cr zd_=9i6OlJ%1o%W@Sf947_l?U}RT~|GU6k~eb#Gj5J3tu= z6*P1f`01Jz5kf>nY@^~e6%*G8R;THKZ(VYmsIE`h-g?{e)y-O?)gJ3c_gI^5TfVAY zS7~R+wC#x8g728b&egX`J9}(PxlOl}bqU`(!B>gSl8|OJJVn}5!!d?>y^Zsn$&dmg zYaOgPkht1U#4>rjfliS0aAdO9sp-_4ZP&OB-KW~=L|>9AYHYt#8q?aURE+v*YH%I1 zqlL&zPjsnd#nOr^^mAnzw#=9|A{C=a3}6hlT~c2vQgz5NJkTYRE_mni#;!B z4e?IZM|azj2LsHFPLK&Wbf>6Nxp=vFi4157g`aTZQ$$VNyfFP+HNCR|qtlrovhor47r0O>O+~WLyN9TWu&Hr~){kl?lxMA7lb^dM^~2T|=tZ+CLiBp0vUrqN|J{T!gHCFe#DMKNKZ$4&-$yE7pc$ zeP7ZGHvCYQikmMLFOE558h$r;wN>j>p$uxfdc$@l1OI)?SEx36n{8xBQ7!panWEbJ z>uf>Xr#tDlZBFhJIq9<_)_oZ2)O`7DG;6aX$qS0AxmLo4CH4J)K-^_p0a6F57b1oiInxlhbaEp>o@xb!swZW~?|9A<*+YrXGd+FwqqBi=m zVWR=ZLG}$x9$LO^Z~#}b%ry6`heR&EXf1ol%+c4|l6oj9shu{f5bZR!viwTe(M^iQ zrIvAQD4SY|c&gl#^>D4O&3;(e?4-qAyJB?*r&-Zs;Ta{E*REKj6LH?`^LALecEu{} zt~T0j93W5H(6uWN_`r~`)@JA06)WrG-JQeHo6|`{a2FHb3s?x445QCoDzzrPALrf# z=TK9%%9qHrmQMRiNb4LQ!Jbgod473uo?o$IwHiCO*Kn33(esKGt7?e8qmw=x(zZ4p0H%5JZB72xk|rQNtDFwr z9TN#SYmI2I0blp#6)WJQ593US>3v99&XW_uzrlrFt?iFtZHZ6zwiPSK)PU>OL2p~J zy2+$cSzRd81)L;SdT`+0ju6xWPOa(PVNFTCZb5A{YFH_V1m044qU}w$tXMIG?VspQ z$x^TGjLMQ_d!w-pOC*VcgZXDjmYofh*LP$}w>i>)i=VXDTTqqT5Y(-qnEfC_=6Ht8+$*O#u@kH(Y7t$vSKCD(3Y>4f;gUBjs7d?8;`q1^o=pe$Gu~$ zphPiMYlD?i2^(3-Qt%ep31)raRtc9)guT^Tt1PxAkprYu;A;6iJ<-ZkN^i6xmC}d1 zD!x=d&RhE_o3Oe?6|hqthZcyt9MPW=*J8D>yMjyA$zY;u9TnWhfkKf8;Vw>K08wPT zI*eN|s(HDg9A&AJ*}y)+5?1TeB$Z7}xi=RUUY)6Kf{rvr2YP~j&rnU`Uxdg7) zMo>}17%Kf#3|L6zt$Q;w@|guS46O=x*QEIF#vp?k80XBAq2lfpE4w>5p!WJnbREZK zQd@EL`$^>5ZYu}q%5{5}GYnV%wPDMP4ZFt}#tY%PVDDM6QZHS`Z7aQJ#VWn!DkdqU znXd6urxnjCXs!QKto8mC+FN{|)q4Mml{!wf&E^VBs?1((?YQ6S{IP9G_pexOJUMmI zPUit=+F_gmpRTI4<2cNvjeAenxTFAnqlHURY^^g%Wkmjy7W^BhR~;u*&F?oRUvIaA z&TsUr`DI}TUg6Mo+>4Cq-NrSH%BY>u%hBR=nu(IA)PHrHTxzSd8ONy?Zz}apm#UXE zDplM>W~$kRW$QM&m|D}g;x02&>pJxgpSPh?Kkugw>eSDnM{C?<1)+?%&SiqmyGnZ@ zwlFlSd&EN#1~Y`RmS{K>x}}PlezM7kcHC6z-F|9C^Zuukrw^ex$51<3el6zUl1^ke zz$F^(Cwqwo@+2>@M~k0`d0mSinat}-*HWjSgNI7n;Q-VdD=JZ3R9EkKs6={>#wa8j zRgC1BMD?zT;yl$$H0Fyufzy~T@`OZ#d6FwUb{tbCU-eTB>R0?!11nl05e)8^ecoPO z0HS@8w@;^v_Nkw)Q5jn;5YUy34XfOV0`w*9R32Y)`ynY^YV&*JR$DPbTueVlzl1Z%9ca zHk>xPCvFW7Tja?CI-&PujJEQKaR#x66RV$5KqvO@FgE287*6+!o*0MyTl%o)%3LaO zk93EVY;h=Aj4N5xfvqirx;B?e)T0BaN)~N0TMq0#NjYR2Mvv-Vq!T&YFf1JnBZys2 zu>Z1vPV5&4${4m$9{#;OBxlO0FRo71YQq!tM%R?dmIZjIb#+XzYG8kHF$)#^ZAQOD ziB5M%*-Y^(a@ne=6){l3({Qdu_xocq2$+-Yl^aWh`!K+%L*<~ih=K4=3BV@^SVN~9 z&!%{yUTcmH?d&8Y;wcO8P{|`RjmN{ma^JoXL zn5frV6S#<@C-K`0IjG^&0Sy)di}!RV-W=D_(GvV;7to1*d8QLvc|>i})w~7ufLrHD z4;CjTO#uo9qCYBA&5i*9l(gwv)clc{zO#T%@MmRAxAJgggV@6f_ILrE*cXMdDIeXR z>7G^HJYB(DQ_MmQFUa&@iGrIs=?n~Dk{ZU78zZWRiTe?z=pCK#qnQj?IxZ8Wv2j?o zHe|7%RzN5A1sQBBAN?>RizWWH)^_a2D7%LW=)@k&U|V_gwe-+A2!|E-aRz&mdcD4w zg&O`bQ}7Z6ufpXisU%ANwwQ%VUYV@>9S&!1v;Zde1 z6-JrVyxTw&Ug1A(0Uqi&JJWzY9Gs#_5BZ8-#^7MI{HTzFI)0iN@&yJSTu5sumvOFs zbYOhYOj|!FboD3_eS=*Lj zGOna%ZAnkh+6m2$i5G@-D>{vy%qe5&Myv7dR!3j)$W^_jFJ@N@=)@jMVGH@_knbp= z$>CV7S?{Q#{%H{d(H}_Fg+#!`esAb9@X8~ux5tueo5eg-vNV`Qi-VcboBFJty4ng; z8F_j!3$XLzi(O}p@$3h0DBFW7RFJdTv)VGk**#nmm<4RwAgJEUgmfn4k%JOSlZCtAAN z8H=$`8JnqSu9$_^U*nfs3I#)#HyK$nPju+fE49i>aZtsF{o&r{K=3=94X`EIcup}3 zb^KLMHZ%&38QJG3SkBf2`yULr-m?%B75&2R>J}jR4>Zq@*85M+$P% zr<91R^O=e-_bDagMN0Z`O|L*nuTnBr%)*>Z6e;ONZ!1uONHJPhtC)pKwihYsfgfC; zM9)Y?ow1B(zoDe4GnOlboe^#~b5hh9!9pcPov~al?u@#}^QlJdIG>oUc-`YKEGn)N z4jg%-z1KcNPcsWXs)&L3Pw<^)4*^$Ka^bc8k1k>${1fxxOE^H52XAJ+RBTij2L{5Y zVxt}dVxzh6x}QC)h=K5r&b7Y08P7-L!s||US`h=`&&Y@0gc}99@OqxhuX{7gJtiN% zA17>c;q?rc+WwG5tLL}J=EL`4g_{en=e9=_F|cqRmk-~I%UHSadiZ%{5d+~LpAX*y zXF3;Nk3IR_%FJf@-3oJAez!6+S$?-N^H_ej!Yo$Mt#q$FBR_k320Jsqa7wsm=PkEH z!_d8|RX}ISZ}*p5QXZ~E9=7gM7ZlKmy(1TU6Fi7KY~5s1+Zn>H9yQjawlgFh+ZlP- zy1h&k&}sKGa_z2QF_ed`XQ|Zgm9R_uJkQLP~VH|3CcM&*#7+zFs%A)K1p~bdD-wAijPPnvdtG9a;|oms-4n zx5TPh_`k4#PVm3+3rEVsy|K?FdWFNADs8**_?88^sORlD#b~h*J@K?5P=uq?F*cO& zoho&I%`7(-;-a<*Ut1Oni;gpmi~MNj&2S{aD_nuz7UKk#x?MrH{l>+!Q~&D^JLCUt1h2 zHQ(i)w#($iq2fa;IT^-h?_`F5un0b?y*Dqz4iEbrIT;3zGfg$HuP=_3nh)h=*h9sK z2hH+8y(jhy$@TMjY=QwukB33Rdr|3;Pi$1h+@He14+&9UXY9GE(`V~frTrK zh1p{-Vh?)s!fe#{#NzA$4X#6u!m{eNNqL^OFdG$~k*Cn2!OP7lPh9wOL%z9A7VG4+FTe*!V*bzzj&q6_h+XrYUSeAWJg}Y%uf4}}ix>!B&xh}c zzL_tr9mw;F7zp3Uhv)k)xz=kR@~K4(gdfa@=bJKVM@c>4g7=cO7y0@EI>B$wI7(I? zFU~yH%;68`2yfavFW#8{jQQVeIsdXKPU?G?Kb(Xy@vf;C>BG3p5y=kERGA8Erdg;f z71m6#q{Etytj8=WNrg4jEL4&TYo=Hb*7SxwedeeC_IMJ66J;qF7rv-T?)!=6r!$_@P&dI7o z#3^QP4QjJWCIoA`?X5~XXVbNdW2Ne&gY#j9j)y?SahkMqrK@*fyrW<4-%!LrMJHsO zD~ABL#@j@adBc0{%+iB}98~a7#;Mi{2-b${9M<5DpM1HHgBre(qd{TdDHzX{l6go5 zOMX^Q?5n0(s3Uc(DaC@fEgo+W9w9tM{ZwCUM^f$Y-oHp*s{QXw|KQp!gNv&?1^VsC ztM&hCk-XIZyCVG#7vaVN{WkyFBmc!Bd8z+5Mfx2sK7Ui7-`c75Kd?w%>i>O_eusgSkI~h?Uaj4;NM7pyMV@{i7iW?R^jkZ%{+}+Am--(l((iC_!m&WVttY*lymyhj z)c?yO{SFtW!wU3UJGK6wEs~e|e_f>C;o?lh*{1(L*6;uDP-OjMHZb3$`2Jx@(3X1+ zJ<;fR)WSLt3ofw8THeF?$yoHG!;+vyKP|E-tpms23oLSVDJ=TIVM)-Udy6be>p=Lp zz#?lu9@esD^y9;lphZ6`vM8+s&*m0bWbMcL+*%ezf3M{hrmqZyAw(N`qEh=o;X^G;NZS9v9{iG-l83|f+|Dwvs=)mVs z(+fr8H*h>sF_7fA|NcdB(t?AT*RP5-m#yXl zi{hl_D;LnLF!6RrvF4K1eEFg{sabrpC_CDt1{Ee&6zSz%x=v8v^wU4T7)I*-N@mTI zMZ^_>VzpSuYPEMPhLLK&x`0|D;_Z@RwcOfKx&6Xo7^(Ja3#cU`-XbVgTT0Y^aWRZk z`}GCX5;2-`OE>*aHrGwqIkqPZ-de;!HMh96T?PRkva?G^LBw;=Tg@)Z=ZhE!|CJ!T zMv%8i1iZaq{%p6ylO_}Ta<_$(BI8oC-NF$hywav>{;3JvpCD z;A#L^OQUh78wQ_kM-YQQIhNdB#6a**XBvh>z!5BarH#8M%|=}7saNrf(3j^C344{h z(&kBG6wE+YEaYq+k&stsA(bR<3uYk87IH3+NXTolkV+CaZ8DH03pt-hB;<3lkV+D- znPeb)1{f&OlZyB){lm9_UC~vnCR9It!_Y zh^A$v$`*209+8mG&O$25=#N>cl7-xzMHa@SLD!$C%#N?>jQE)z?{WH$5eQKmqR1o zjRE^0hl>DNJoHM1_xCw8;=MY62RWQJ%Hp9*Dm?Lwm(3Gt#Cur)4>W9NWbx1+6`pvZ z$>Nblyz2vapyBF777v|K;fYt7EFNjZ``Z8>XxJ9d;-M!hyqDzAi1+dU9^~*Yx%IKE z4Lx>G;p@3nVjglnmM@DlQd!iBMg8|&Dp9{3KvlBQzJOfWqKdr%YmKH7^*aGnMa7Hz zSzAjM^_#g=qJB4ks$`=Xe>CNDrz=<`Icm_lH_5iPJmYgrErc2)l;t$s-c- z$pJ`8;_<62q+N8Jnnxt$qXLkW#B~_2IF*(7(2OxtoV#Kr2`WLwxhtQF?v*u^@71f~ zJS&e#%)Wr3l*B9HSwp*a)$)^EDnak}>s@6-$s!zMeRZ1!{6`WAd22qIxVJc8JtYk{ zK5K5>n)};aDq;T=FjvV&uL#I>EGj=eryZALtvQ-X)L#Tp6%~6F+1lzfFVv%yxX|N3 zNhIc3f!d-Z)^ql8Ln~$4)Yro#!X0wY5(_B|Pu?I}!&&&4|F|x>GKWUE=lg?bA{T8) z$>2*nG5_gxj;|}B5$~!Lo}potP4IUu#6%t9K3)(BANsUA*qT9qF)PNe zF}!w8MNcSZp_;O*wEzmfdzMn7Kfx8_SE6KjF$bcNY%9YYFM27rt$y25EJ!$ z+r?J2o&+KJ4%xmeiux8ARO#PT^~;5rsOq;_RUQ&Ph>^*a`XB&Q>EBfKfrXf;O56%e za^)f6)i`@fG-1%+O@l7;A5?bc!faI6lWv6;B>4}7sBDl+E98f2;_*?w%%Ymw_lp>) zDa5SG7K*y0g0Eh*?k7LS;v>GBaXO~W_) zh|OQb-jdcW=)^wX`F&}5>^IqCpPB|-_4&hC|0Mn|7T}?d-=uBuac~|gRX&{Wz>`d* z;=OWhhoBQ*1U%Aod4s{`!OW=U7jx0)c20A+sOKCv3Wm9G1~b)uxM;#ZeJ5KygJ|qb zs6_u|y8R@wI4=}N)vp`emrEt;uX0fPG2Dew^|`B`=TeEv?{Mo?)lptfdT_2a+h){f zE7dJheVh653-C}wDcvT}9s~})W@LvKT3`l&9myatmro}8HEwuGNz087MN%Wc4l@Eg z+)blCk)V%pE}cij3lhGqx_j?Py1$qbl$;7O-eEFQx3dhMP1^OM-CU2?MjWtY)aZ} zgN5_Rc6G*2H=$ou^$#l9lSd@>jO)stB)-*dLm?#aqnvSPSnr+OltUxn+gzAL%3(^e zF(I42RhRffVG_~!@i{&Gt`kytQPVR{``Gwi60`fJ92(*N#WyaI!~IjwIF)V!R^JMf zi1wepaYjl${Z5-zGG2&O#=Rh59BG7mNx(SJqLYI%`Z&Q{4vl!%1o6f&?q@UGX)5#X z43miV%|K>5O*F17SXJls-Y|(^zYKs?tC;>n)vAY>RGTwZr=K%PwYh|bHW$Lv$IaiI zL!){B8YsCMzIk-6pCgX;$wcw?Fo|gI^)qXva68wIx=Ays=y$qQRlGN!OwbSc`j}-S zjgMH_b5Y4RjgxOF<7ICBQDvp#r;A~vvIpFdn2U(B=6Py|61Dmi*smAENVR{+RqGJp zG}wqiVw*qwJ)?+$YQ$c81_4us9mf+QKP}B0#@!wE>XLY}Acu>J#5XCzTzGiV##=m& z?v8eMC!%7_K~-`63$sz*xo*PDLBq#q?X>H$w0De67-cUkW}%|L5pA_IwrMjS8&id( zQSh*hopwDXx&V!uKQ6>XMdHgDK_slEGp)f`V$_^j#6T5dZ_ZQE-q9RHc*^?xDWa>K za~I&DlDhNxLpT_0!_|T(M>^*Hk{gOys6{-@>}k;`IBj8rVIH}?1D}3X?d-ln4yyQ- zTRdeku<*(h7rw$CD+S3j#uE$hP>c8~RiZ`W$fdcYt6r15dGW-s9?L^Lm29<8Pr?(4 z&mKuV!yO&z`BAnTP@H6<|5Oawrk5BpPO4{m2uaoP?wG5MRSPju$@*;j_K*<1%nWE` zup^8P0KIZSE-HIXwte_m*doldF>;m^LHrZ5JyBJ>!hlzv z8BlaRaNN>`^qOK8>Ja;bejXHx{F0v}W4LLl;pDa9B2sk1OP5S^5Yq8jyp7>VY~!T& z=2D6K6c@wsW${I<%yfYl(qjBGz)ve;Aoc}fah2GdAmEMdY`tn?vH<*DAqN%wIgmAr zfju&{z3y{%W$;uAFH?TjjC@i#6(p;aPwkHl}3_>Y*GxYe52}zxvC5kRo$1XN;Am~@06f4GLq21sMc%E5Gr`7G4&T({f_pkO6p<6D~Cwm z?1EuzkB^QGRonH!>iDqU&KB>n=JHXQc#k!Y4{Id5=JR+sz_=G(W*6k5zN^!%v)NYm zTP&O;vuh1cn_*-PZ7*h_o@Zv8kJ6)2;KHVqU@+hoh51D#uP$bxk~gH4cqoVmq?BNA zqmtwol>Buu3zfVgtt1gwVECG@jrp;-;F}FsJ44&Caj>&C+=$ELdM9%8!faIbRNtNe z8oGy#-eA4TGVf<`N2X=RCKT3-7-k9 zB&e!oRB4Y%+$h$itnF}2RF&%4i7Lw^pXb#mLx91kX6}e0OaJP3k4o%uP|17zq1oq< zkwH%bT~Zd=e&4IJ(xempp!3Mn^0-RpjcityTaOA{yh`N>D+Z#ASE(`#Sf1I1ibv#8 zVwyfvKqvSWIi^D%j|ikpZ|Q>Xw3_-9$B9J@L>C7dv~>a@dUw9G-c&rPh=K6pqmOC$ z3aZ?5A_1wbAMdGb)4N-LF65wsmFZ?9F>r$`UxVK7iV8WXVO4>K5=PTh?Hc`j1%b6Y zT|g)LfpqOUdHDfFuki5kc7-iIACaLGTYNquO~>#Nw!1YluCT=+I!~5#Vv9p`X*wqQ zaH$(cl*)e;au8p<#q8m$KTvA<8g$F~Rv`y9{AW(RQbQTL)nN_Y<_KO#WzC8Y4SE)8 z4r&k|8q9LwLxZXD+0?v=#p!IEyATug)N^`af`k=Np(@=I&Rd9ysv5H_4dSSw*Sc5^6&xAO*Pxr$=L$Kf;m(3QlySy5UxRK@pD*N~hOZQ8C}Hm* zcXrcRIJt;{_>b_H9Cn7m{8+{Tgzyl^V+ZWu&nci2TpY{rDgg5Mz-Jgcne;C$pc8w4 z&a}WuKXS4hjq9D^MuQ7noXJ&opHe_4_9Gp3S{{R%9Vr}5Toq6XZd{0oT3+w!CWwUV zJN6MgGVnfQdkhy$$J#YKvY~x%e3e>hoLnR?74LB?$s$~NNKo>%wvV^4#87HCIDbFH zLTx8Fe?Pzi=g&qhJ@POj$y{8poqb{f9;*4gU#Cf7;h>ws!OJUodWNi?&n&=0JzvVz zqi`^AdF>;ygK^mYk>r8Ws}^FSroZspM+OOR%G%YrEIO)!f0*cMF33e?B3v29!kR0n z4XzfNqAkL+7v!S0emCw(Z4N8?To{LW!KNFMQx7_Yjao#(c29o+QXAp_HN_0 z92$|^ZbL`P;q$dNgq5UY?6Hue`DCJwyFIg%G(Pki0^ZTZE7R;K;*lUBsmKHtj|8R2 zcqAwU%yotW-k(n<@WG(Pl$MJFp)+y*-{PjX6qT@VcY9kt6(6CpySjpsxc%Zwnkgz# z{~?G9S$tzAgv$2D!hKCHm8drbQ6Y;seWqyH658hK@NhnvxSed#8fkoQC1Y-9u$$nD zkFF+#V5o$>K5MR~V!fL|-Cnn-*XB}*`qC__mc<8BGpM}EYRW)dP)}?%RHD8ri>j&e z!;6WW0~IeR_(WoU*XYTs~0uGU93dBriH2n3sR07|eEf6h> zPqAb=1u2Qi2lC0py)xS=j5OYEv`#nkg65ZY&cvsk0vv>&^E2gR;Q1@-xf*%8mi2Dp ztsGfEC;D-IT|&~zqrkjku{3b7w4aqvCi10zu?T52Ft3q-#3%dt3#CqI@f}fVTZsRd)!oFgJJ#d7!z5zenl%ej@{$vk zcdPhZ5B?GCH9lBEBG^qnm?2>n^$SdYEm48JFH9oXhkY>hgiCD%ktKV^NEHjgI<=a< z%WzsAk$`82d4u(tNa9HcH%umkv2k{7=J&n1RDymeReuCkvN)3O9Mc4~R@FNbVg+n7 zK^hScrkb59t!fM2m>XXbJZOSPq0AK5pe&>z6ZNt{L2EKzh|88J3RIsE6rTXLu!=~~ zo#I1D%41M*5znuMBJLTQq!o`wI47ww^%MW4LvO`nGqoJbO>s19BDmampp9dZ1nl0pD9L!`qiI1Vc{DA+P|*cgoGUOboU2M@fm~H|0T$;9OjK2zt4evH zTZq^}WGETaxe*}9+ zm_)Gm`Cvv$ev*`6Lu2D@{ey7glC)1G;2)j);t}z-r)OWix)Vq2^#f$Lg-L|_m~Wqv zLZH#QSJbk-(b%Sc(7u!Mhy*;{x6exAY=LLr$Qa5G{|NZTFo|$)_3blK2t0cB?QFo$ zS3d}MR34Fl8-4q%Bs6)D+%%5W4?-TBM)sapXA zP_O_@=YatN{G-!H6`v|%pn@-C^577#H64OS7LqW8I8bBEBgHTf{?;J8W{@jRO7o+M z{71XL;kW68M9A;>ZQ79Jld%Nj%^UnqF5rC3d3z};AwTQZ1S)<&s(`j}pmJ*t3CeDQ>HS{|_?Z|G=tCu07i=`RnHhdnIWyLB(E4iVWw~8$c|uvh&AzM1uazA3&@mUN7??Tida0 z-d;DBuFfM8@+cqDN@A?Fu^Uy+jd;L(>TyYsLa@~?cH?BCfAUpuk62f=czoWlgFu`E zhmJ8pv$d9h0m94UFdpH;g#!Fw^_KI9gxl;JU?p+W%Nw~6s%3y%|0-(-xcc?QO`Vo7~*Pzb^?J4A- z2C;#W(a?vhYxx@V*`Vn{4r(~y4}D%q_oDseYtR9QXBTo%!{r4UdJyZ)*Pxy7%L+ND zVYWa+1sC%2HE7>kY$9YzSv%fh6CuliO@w?6x<~9QDoo!PAo#5xWIF~7&#JtTo^yJN50$X=8@nT;}wqK2FB2Jd3 z#p^b0y?n=aAV6uu^YMAWgMl}E4q<#=| zOFo&f=ljl@kVZH0T)b+ng(B6Z`l~RBfWPxyJR=2PG!2Hj*VX@vFo|Hl$$(J`uU)0V z&`5PV{dt%~um>|>l)_t#X)yFA-J!&*8*Bi`iy{&1feaW)c*rOXhHkHWzPM9wz!ZsK z;!eFF$vgEX8RL^4qJEOmqeuk1KVun5_+CNUG7O}8Ed6nqM6jP_z$gVLI1PrkJN5IO zKMa!yc3%dJQn(Aa(YT=NbvC!f`ovKjA`s{j-)ZHOGuzPcJP%VZ2eH4c7M5-0o2@Bk zA@l~nyCl-)Hy()d=4@#0Hbz>p`l+k=9fcfJ@jidf_AxLZ%vx*$3#`)x^R#Q0n}_Usz{R3Wn)UK7G|Tm^?_pa(Qs+f-e9#BG5(?Ij$t0NkiK~l zd{p@kKTM*`PT}Eb#1qW;@<>moVum|ht<}cc)vjJBPb`+1+MnTGqbo#~H^2joCeQB) z)I0N{?F185-WF&*k}2AjDv^3^9MP<8F@MI}^avuJ7FOn@d8kM{Ega&J2eJcn-OI(h zSwSA^5$|S&co1y#TTHz+0^bLvQpZ*kH@++xcHJhMWhsqZ`Vi?RlM7|G=db>oF{LS@syi>f$^9;A^}fwK947f z%fa?gh$SRvXT_q?qY<#_4uwb>zDi=34K}^jvDbOU>B}^ksN(cxij1=$c8Oz2o$cnp z(x38(1YHrxJ0)@YH=Fn5ywcNiXau}Ckax&oC6LW~r?#y%q)&N^>*+2BnoLyj)K!X% zbDd#eT-l*JGM!H*@PR-Rq*-Iba?3{QOm<{KwFOC%2^^{|O-60m6HEl|s@KcAc&}0! z{L)-1VgKGmr+ryGO6Qe>MKv?sIr(Jb*8Fl1(%8bW5iO|_K6qE}t6o>cK=7COEieIB z2=b|T2|tLfVAkIg!*-KQ=t|gbkTHwdFog#^+?Y_v;-+ziPUv6ytvsXqT zoZqJ<6Cz|F0N$wfx#Juf@h%DBjW!S(%HnlL zwS5=m(1^DyfCo981`6PrZyQhL(1^D;goke%|H;*3cLaxa`C&1=gq#6WQI z!NUv!!sH%28iCs;SG6V{DW|m0K={|VK`6t3CzWl@@dbp`$3DbYU{h2Ai?6`?RD9#i zo@Y@Me0T!U6ze-EyMMX>4>dgCW{VIGg6p<$1iihZ#WG^qzp;pc8pMIJ3<3_Yh2Vu3 z^~oXz!r$S_UchSvJZfv3q#(k2J+57tPbT!F>jEihTtWx~o7w$o`D6lLkOPd_{f9xx zE}r*Sr9G5SCh%Agn9}k@ua_C??1-s7%Rq23wPzUQ+o6i6##3Dj<~GV-xbSm;g9^me z*(?Vh%(i}yqp~Uu{>B12(I4g}iL^XE4IRYBHx+b45%2CwSw$!Ikzs7o;Z6jwStSO0 zc>$f+M})AoJRW8A#}-xU@VB+qx8zcZ`vEsA$UMQ~p|G5pYu=ViCF;AwsF-VNA-V1j zgZkE7Dp79dO9 z_(K7m=;9+*ehy*%Kcs5Wd>SYDR*f1Sk6D0+I!;R2kitRG&(8z<6t?Ji`(Noer+`lU zTA;rgd4y83{S{Xe%=ak1o=YX}p+Fx{vT$)-z49hEEiS18(231=6mk&#t3r1M1Fhdp z(~eqi3?#v@Ekz8(KVMAKX#{yVNIiX_GvJE+peS-Dtmy=Qt|;;p9UEk>$Q>;y@^!gX z;vOrC+>@2Zu!P0c+L&2^iLXm!=tLG@mq^nQ$g@jYK{MmzGxCT;-R+jNo}~QFsU?&d zNHM3&pB^aSgihd#0|jj8h$m#*25EMJTU*3H^rHiLN)T`_ISg;-eeu?omp8>gc=6U& zh5>6M=g1{hOxmPpKFQ*AIIqRaTrS`&;Xerg_(kdF#N zwi-Bd5rQ;x%_H-OgnWDu60?kmn8tBuX9tHkczb?pqZ<$5T-Wht`|QX#Rv*WxV>fgN zZ$chr(pNP`s{_LgII9~>%IbQvqmn-FT3WLc4~~!G9NO3@Hi*^I4TtKEHWF(F@a*?M zb+itL;YgFV0%;|jVv&FIp*Zue%z?^5;oyB zrq?bK0;i z*f)}v_LNeF^^{>4-`rTbB#MrR<7TafV>oe)D29EBBUZ0{u!YInaNr#!0S9N;@DNh9 zpX!Wp-l4g5l-s~?@a)O3Bzd5*wKNZTB_{JF8+L2&z}Wf|-F3J*z@2S&*9Tlzt2c&mIdG(d%@9!< zI5ENn?T*!tO(*nz1AG9x5rvIGHK@)k6u@&OJKX*{TAff z2+l`7K95wE7lecqUvnQu71jm}()Uc3B=&iv&3!MTx1*!5v3);)hcjoLajuZg%`xxuin zZtkB~y!^(l<~`c*(iVkyk3`nLd)$hV zncY*^GT3NS*46gT?7FNob8vRoR5XQBN?6w@!r<)XnDdXfsYi4!n?BH)+;?E_6z+eX zXw%nMub7&hymZQtc&|7CTHl?WzVy*qD%3*Y-^A-#@h%4deuycw~EOu0DN5 zWB=sEP;#b3GD-~T-(c5?Y9v0A-HoGm_v!;v*!vHbLXwGljys||R8KUY&MdD)=`6YD zxHaPk4ouC0h|`-Qb$I4Vo%(HC5X3OKg7qIqZRjlBbKF{po1AiQMccOl_95Mwc(bcN znyyy*^%}m0X{*&HS8Iq;+WujadDIuzXDmP4x){UqJgJN>+ca`v_W~&c>AxQqQLL z;$Ukwbu*46+Du!7as@Ad*<@osu@R5AhLAfsn#OO|2MN9Mp1+jXj4d56w+U3aUtR*1 zB0Uv6RvVP*@5Rh%^&5LNAdU#wi2bEGSop z3yQ~$Z2d@eDCTlc^z(dTFYcJ+O7`Kyw_cl13KQi@_u+(GD%=S8+(B7Z^kBY7|fcT;=sWCuen4F=5KZVBqgb8;J;ljOpy_HgZR6O=+OP%aGT%; z=^ve0vXVMO&A~2K)L!>BqZl3+*W^?D^1`>D@D75dZu6CL9@XVl!dlg9qmERDgPcRE z!0XN-^+;FV6p+J2+#oH-z@nOz#Hn279zrCwo1Nz9R)qAu#$t$rXbYr1D~LKU)*X@; z^PDvRmakw?9egyg$`Q{9B*bLh(1Xy0ZCVL2S#dCGks&6M6`Tdk5EDrTKr+NcvJ4L+ zLrf$YOUV!u$r85Zy-|VrJ<1;_(XGb2yB=E^pgqTzT`DT}>Xv^-1lh*KZT*SRRk-$6Ug`)Nd1-i1;FD zzYYn4rkce2ob$tMD8Yg8&Q5&E!d1O#kmmtdhM?1}LX3m+2DXR1)~>0%2V&@A zj-+&7O8I@hxFZ|!|K}GK=u)}(Ub_L;UR|R6W*3wrUCqkRbgfJm-~?Re?wZFFXeXEefTHMBCG)ZZnWK%&ngk7pNH!V`>y?$5 z&a{FjVp!DyiFJmc&^P7tpKSP#@qm;RpCZ;^T&u>l$-UDT&rZ%y&+Nyy(T_BN2^~FX zqu9<|hb%8$Gr4)4+Y(|_nUF_>JEqA4y2029TTow;)Nhg&;ipDcTQ6}pNx!_y3Il2=OxVMC3Pf2{}#*J$`)0gg_+}lCe=*2b?cH>4=Nf-AV%h(`I z!echEg0N~Pu?H(x8~$RrncY~0zh31<2$WqNY_(K}=>|8)8vS@FP{t6l9Gm2)5cM#q znXq+H?;;#!^AEj>Let|?yhR=zOVKvr$eNwl1Za|R@i4QHtiIZ{2ip=+%a zrKZ&36+=4(s2vA0DV+>7-KICFWHt>mX*}HZGer{9Qh$-uF{XE}wSWkEg~k{=fhk6I z?WP;0R2qhOel<#7L6X4$e+pesF64uB%b)Cz%NG(dzS6%qshEed-bfJqp!*(yE)Y>OPsM`>|E` z$&EtYnVvd)XjiB^C9E#V$>$R2yU|KaP@7*QlMsAlF0lKMKzt#A_%7;3Lma~o7Wp8b z3xg!3{AHW%Jz&&D`sIzQv0pH~dukT@z^54KW8r18-lT!ohOrZzuQ{A`uB7;NUJvE* z#VFr!C>&sPMvvwPEj^S+gi(@a@~w?))&7eb(Vt?g6Uo(~0n^T|=f=*d*t%Hvt&J;G z4F9@R$`C$OgW@O8@^5WisY)B~aiK7owE9~cSLss1X)OZv28T);u$l z%r|VSQ^HTjW*0U%x5PAvLt>?WM4q4Ei*S!klQOo$KO+o%QVZ)|C zeiP&`acA3jXRVTaIT5Xu4Y6Gt8^RF)dy6*2vjZ$2EQUe59zt`opU4Zrm|peW1(Ala zjbL}u*{jqMuaOQvX_`%E#5zJR)RWT&%g-U9U6T($Tap?UZgOjXNf?U$8B?F7@id?GLE#*@7>rm6c_i0_5IG+_yzn`q?3J zU%Yu!pR%kJu&j4WT-H=^rInVcN@E56kKg4@I%?=6zBb(_*%Wj~q6?@8o@0pT$nDy2 zbe-QjH4)LoxD4OL8~q%q7hx(JY9u5E85}ihwuah_IgeDaT(Q$fhR*j;Fn#3%4A<&7 zjbK;J8Gu@QXRC`DJ|BU@$H!9iR?5VW7SQ=6<*%o*AmwpyybLGDH&HV1c1sB-(~CLE zGB}{JnZ~FfI8cnyg9kQ>IeHP*EavEoPId2OW$Z9tb1&g8zI{Y3kEx84A^E!aB3T;) zbv_5@_cB)D#T*qp>*-g%EH`}fPF~8(n2L4`?=fE z)bsXCMnT{Xin!fqB`9!5d{YsSVwo~5gI?z40wj8{io|cZhzyd1a#5sPiVMbu_L(Wj$+CGo=3R|? ztfA`0qIU|of0?BYn|*|fMR{Pctwko$L$%2929Rd*jHjm0x}IjDTX@-Y2-o6+!J8!R za^DH7>QfgpMt42(s^c#Aov^_Kv(@QQ57 z)T!Lxov^BNP!;X7WLkHq&CI+4y-_PXiV6XcXj|*9ZIDvNL0@~1g9#P5&-RiKJ30=G z{>XWGW{Hng@<^+!W7pReP|G-(U_;^=*$U1*lVG~`nE@!Cl1kBdk}pq=2l?!&T-~Y&i;G}3B0@B?;{=Dl z)xss9?pQp5JtEvsu`f`Dxdyhj$hRaH4O{pY?Z#X*!)4Hp&O;lOw*5^WTEb<}mgS)( zIVC?f$@0p>*rvE{aOG^u(iR+=r}ceURs+pyC$5zCSMgwn^+_zDTq5N?0ZN~uywi>P zMiKFFI@+zLpo1$Wd?2=`G~SUPVWAd7+JrDcr4P54#8({zS<{Yjxe~NWUkP%@25B%7 zwBuc0Hb&Nl8h9B|S>;7pV30a9&tSmuejZf1Iqi3vuS}7WvwlDIi&xRqNk5+E*L`N4 zv4S+*QuB&R-7P~W>x>V;q4H`y}A|cqL7~^Tz_>tS~+jH*jBQCt`A5S2naV zb}OwCgQZD$3MftB)Gg^wO{Fdg^Xt)bvR7HIEtGy|u}q`luA)dAvFIP7T8 zEK!5m9^Mh)(%Z#H2!H;~a7MHrxrVZ&;OSPJ7g493d``OyOHQ$+JfFkwynOI0|4ax? zF48=EI)h3Th_dm49G!MQSmlOiad=EiiM();8trDgfl$K7<>+%>ILtE+q*M7Hi&W{A ztVU5HDip74|kib;hoVjZc&})sn+WV-PtvFn#_sfJ#JenO>V1m`DGm7bdeWj zmwI_=xG}o5JA@c;bYl@6_l*kWxAf!QwhR4a@XNS2{;WcV{t~t%iV(I`5P&IQsNj0L zc=SaSgUMs1uU~$6Gr+KUGtT=IsOZ5h{7VWM`YL#Wtq5UrFMOr~hF;tTD=a9)@}s90 zB5W=d7gQfEyX_Lrh^j2t4tR`5yDuAb5g8JifH-C3kx=_Q8j>s&Bp@sPPkA)d`O-WZ zs{4O(Xsl`R?2=~+D_LCS@@c5w-{xSlYM1BHP^;ptQ4bS)LU;x%oOjk`Ufx-azt59H z4d&&YmAAx=GuoC;cdS)wjpK=)RMo+~G^AfS8P58uiZHIUanRPvSc0x`yhI#VA7#qu6kSHJm3tTa&vkW8zM-st6lc(T3*L-S=F(%*B^k%?J~n=h6m(Cdt8iolP0Cj^b&nZ9O9eVsuE@s4Bx(t}e6 zyZ*{~1?Yw(d7bcQj;zXk3}@c?zM6UQ=Xf{cd*tN#pU=2xfI-K_9U|a@s`Vu(*=<)x zI|`Y1DKD?A?{#}&zdC7vZQz1_Hgd%m49+&knIe?7w-B}h033-8Z{ z@B~HeS9W(`UoDr~-hnACk6MPTcnCLzT!yUJ@=j4JkbP1vas{&aR`o#k%v{+X$mUzs z3)v^;%JxDw->N>yJ|S1O53*;vL0{xI*-M4^n+q9$AdbLg5m?~j>9ha?5Z>Z~qk=*0 z!j|B|+Q?~|SjO?gTw+DO$)1+%!TxVZk{jl*SlpHrk|e^~zj8CYAnM)Ljk&b43`q$& ztai$HvO3g5K&s#bLynznQsO45faIPm?99ys8?v}b>Pxa6zrYRDW{l8%7NG=hh^RN< z7{K39qr_ly2R?CWJqV(D^cG)rx~70(kPIT~Z&V8qOw)G3M0^Y*o_g^-ZknvLi!X7c z=}P&RU0ECDP6NKL?F}kwcgj6(3$xnj*cnW`*=|Uxg>cy*K9cE?urhd|-w6Pyr0D$r zRi;5|Djp88rDNdg&9;763=?9FA=)1ou+$rh} z>E{K~%SeA}Aiae2^8@KU_$a`pKzaq~n*-@(q>Bdut(_&LKRLkPgA)`_3Zz$%epVp8 zjP$bu=_RC>TvR;K%e%Kn!O7CI`Vpo% z*#=3vc!MNe!amM#?NI@DP!GF)O)tcp{pTUf&%- z%S^EP5~PMg&H-^7uT~jjy!zN2VY>h$rw9ad@X;o$Cj}#qvEs!!KsF+5*i~${*X0c* zxR_h2%3vFwy(lDaBedl8BDAYR>~@hz_EeDeTqoelzA#R!KoF;WWiZO@RU68T5#0|g zR)?3b4i@NYO|}n}_xccoUEZ2vNS1&~>XND1*{R)l04dNo?CoMBXjX|*ZmXLc^s*T3 zyEBA^@mn21Ck^m86iyI`?ITGj%k3jcsL1UjN$8Q=N0QJhw~r*D53`+JV@pCm4tWF# zo3Nq|5;o&S-ymTNPT1QHEOp@B)eq)S%JP+ePo@H&GK|)PO|3Ac7th>;DSdLY+tbr8 zH`YALCOoPWM%ygk`}btF;BI?R1_4L$Jp(C&r(JV$iZ@2o~?SyS8F zRfogJJFOL%PJ|?07_x4N5ouKEirbxhow~iAeF&r|esz++iaz~1_klJUd zX%96CtvtbCH2-!iC}ZVy z{MprqA+eg`!RBbQGX#g!`awd_5T6%lEnF=%I-Tgdf!0#3x7*us(M)bqJ+1K0;tz(z7vIlmuVXycKQF_$?YrIRU(tt3%P^1<}wXYj--0uyq6e4OVL0 z4VqNDde>h4>d4h}N6c%cShvm0s@Uk=C@C#)j27r9T4Q!{ZVHD%(rA084``CuQdKw? zIcI14%1)l-T#Aq^g>Z?(ZcrOgJYk`Z4y+pzsLud9zMFEh`hM z-P25sY}7d0XQ$_<1j_6C6&&0<5-Ri+gZOI85uY+wHp5g5r+}EDm zf9X{8NmmGpFo$EWuW=h08L8ULz5{y4o^SYjEuLFK1{?QvtS#;h-&EW39O*qF0lO!q z%}BY@uXUrHb{W-|m51Q}*)2uBBDKr*M2G*{rzvlr{SE%+vevE?2Uh zaPui^RjL|s=*Q`J%zBk*qcM*PL*wP!a}d!v|Npc0-T_(^N&omvO$peC3@V#Rn zf_OoM-6b4hxdlNlaj2{E9-=Rxrx%wbqJkny6a*1el8RYT5f!r{Dk_U4MHB-@5aah# z)iXUa&ojHn`~H4^Og;T{b(-$#>ZxBI~ZL5l$@!ER5yTJasqecY_>$YF0F#;hB*-2dh;^bXUk28PVNftImk-4j!zRe%%sq2)MlJ zaeWImGmlISv#b?X8$hqYzaVp?(~<4&TlV zC_gD|I)C@HJG^2Q(8GzDlMybj&#ZXlly#dSQ%x zF+Me1j7g@%L?thY6wYJays&Cy6snPo*I^Q>j16_?NoLsb3i>`Tr#20%cTm~BD$J&} z22Ka2bP3L9N1VJ*e54_tG#yI1x+T5)hMrN4Vo^L|ZI{42m{m&ZePH2^ijcXgG)iel zMdkUUFN8->Rv9Ux9EC2I#9>=D#X@v+C{vwu+e20srfy5TlogWR4sb!%Re17{N0U-Eg%w_xSse_uLfNAF0f(NgzE_@p#~frZC|Vr*Atp<4f#&$f_?3pa6KV>)PREnYmH+B zC)~uPPw8<#nLnzmq0EzeLeZ}Q*SkwCxSqJCr-poey5KgDns7aFS7Hsgk}i<1YQpt| zNLT}|Z%^3#^@$Vw?)}P!z;HaM1VR#A<08+znX!2|BT-~TJ|+I(kW=*@Hms~-I7%5( zK5|f5X+Q1f_qXlGhjMbe>~v9qKaKq#IAICzQiWHC^d8!$l-(=3{D&miZRlQm5}XnQ zuRHCFkyTMK=(R`fNlr$RpVgkE7_<5p@sSo;6`_zZv5h@H1uX1c%lnr0#7;!4m~y}1 zvRb%MLx0coMaA;a0M-)PmRueNg9j=P(`{|)!B>~p3~}L{gt8U$NBW_-0ZG}keh=0k zMb{0}!&@5c4W6pvUbC%@e_?2@{1j_olsIx+9s}W7tsQmwy+&3@ZPOB(B4Y9Bi1-E- zi(}H`*~pwAH)SJnwE@mQS(zqyr2>UsrcKfr6)vKvbY$<| zI5Z|+L{v(gPQWK$yq>N*dL=pjip30BCl*jrzt5(IxXD1|62`u zh?a%8-3c#%xizHM{so*~jQl6C@FER}CAGwzU6M}Q^Do4Us>U579hLmbstxpbg=@mN zJS*dGYiN)b#5fQ93?^2NXN`hw+7rO2vb8TQTgRD{JS@37XTFjCU`rYYf$O%+WSzoy zXv4`0r|0sWaV5Onb49EHhqC6d@{@Yv zc(MLCfFYBiM3&ttZHxMj89!knYaV5h?D3t!pF9r%Ylw|l zVb%~`jxXmDmo_pFNF~7TbE0I8^Q;kx0Q@|tkn@m+ZWrw3J<3az$)RuuW;(xjZRq!w&39E!4t zCCZNDxfAH9=VSt*>@FCoTF}K9ty<7Ij96j@CEh74-`Jgr$5|M|AX;LD-k-#)#_@)` zbPC_L!e`#7HTRfkiZGrp&<3w5=rfg9u44I1Y-mj9G!`XR{*Yc&nOxzTLK0*oTT~Nf z;>3&v7RyE~H^wEh&X{r%z{#TF&|StDoVgOViIxj-f6<72c^vTnQ>p^s3I6 zl9ayW6;MoOMPcQa;4GF{01A656qtBpOQlYK<{!%_Vfuv7bY*4@de5K5rBKGguBN_O zIqC_KrrKl{k+pPd+gg;LjX+Ck&&~^K1uv*iVIb7%-Xh8#Ew-VE(k`fsRfG6Vm4D34qE`{I4W>{{QHp5QJZdxRSA8uPTtn%EFiQ~tz zwWu(*80WbnR%``v+8mC)jRf|?ZGCitxNMYw*(&L~p|qh~w_;zskcKCM^%ymR)1+k7 zG%6*drco&wHH}KisA*J6MoptqGHM!?l2OyBl#H52rDW7Jie*$S*``swlfrx&)dy!) z)sU-1zFks+QKNLOQus*JkgF_t&Tu+cU-(LBLk5qM9N69s!<;;?OCx$P;+c#bJsI&- zJpUjlMVT;V^t9x-(uxr{k*fpx#3UVv9%*TUcAjF8x=gWz4+}^1@YM0n_#(&dmbMb?7vetU-7x zXy`_{6uOCelO~*&k<2ecaUt;$oLZpxFlMY!AI5|rF(OE_wfnT8*!a?&9pi=$z>T@H zvM~J_GdBwZkMIh3iRsafOJijq@tvX|AmiZTb1cXS=MasM>L1N3igQTq3FnYF2Uos4 zCQXgtx(lkPfQCB!^e$L>(yhe@l8h+Er=^*Q9JW?65nZu&l8NYs&5=w*cQ{UDAh@~X zVg#n1yopk35^`oI}X#66bRqZWNTmbrmyc9A;)r*b$<|6mS|XQ%i>aqsO1!cQg)T z;Y!zJHZPrl&qbC?{W!xSZjop+{vardd_k8VTY|$D{dQ3AXlRa&7cj-0;Cun*^rLLC zGTJ8E+pZ4#%niNZuTUTtpa><@s_2}Go}Y~7E6P;#ES5J#Y~I_h2&a*%*jJK?d*hOJ z6+IKuO_aF72;2`iq_mQq*Dn|^2M|T5dLv3pHDVDaN`z>dJbk-#%!JWrj;(~hVKPDD zSnVjmMd&ak=Qifvz^D#YTUUJe^7?q5hEi3}QK)|C2)UuV3-*=uJkG!uV~@Btd=7iT zwc)!$imwgdEqOmfM*ZEPYt@#&2M)2X4S!PdQVj4Z?w=H!dOophtk4x@I2~YcIu-jQ zDPgK1mmst>vVt$;I6anUQy83)dTfjeYli#@A{Eaem6tGRb9owr^6JN#!tz2abX2{na3-dDRob<2mLvj&Rm54s!c;CCftPw! znJcQWgh8DP(-@RiFU}N}7GjeoU(TfF7`*+%jnnU9YDl4@z0<@M_F=(M3AiRe8!=T@ zI3DYA=YdBn0%(#zMx`bWanhx7ZX6V*Wqi&Crq6T**}Nbc7D=38R}hV@Fx-2kSKz1+ zJ}L#ipQ%ye!qt5vo3atbn2VV?a+rjfh_0A@nTT$fcA1Fom~UENh*}%kL%QJHg_>~1 z@Leb;?c z4;!I;idEU^!x4hlN{Vno#Y~Yl@1$JRyK6xz|**I#P-&u zmIQpM1vdR^E`g^D_E7Z#T2KX6WSkUMGoHU!9ajq;bc;ijYR=E(a$-vD&Tj(vNs5jm zy8L}i$DAc3$}8f;A?Y!3VJ}#h!OrUu+ny1Z!O`LQ<#(kMM@N@eL9$izsfZKzAJDHq zP9AI&#`zpKsC*=rJIzWsie1X&fb)~%NgcLqWbc7xP@U)Jk@oPCvJu0vO7yN640n?B zoKQFnKMvakIcakR_W*{1GY%e5Is{GQ?@3ZCR)|L4{^h4t$YtK@ZA4^@v4ipPP~V!W z9adI?zRaqYSvAbQWpKmHsuo|04a0+T6;eziYBQ+d+k*a4NPH)%`<-7C2l*G{vY!;k zLmU#r%%*!Q>|%w$aF^g@ERE!1AOTAkkHQ_CBk*-cO~~8`jA%Bp>!_1Q$i*y)e$>Tw z9o3`eVsT~Q2v}#bi^Z*XBVaYD35jB7*NE)O#p>Y+J3+SzC)7g%$RB_~rRBKNyE}|7 z*_fQc>P6xmAqw(rV}WeY2<%&=W_O5GLRAIadPc_W;eOY6)%`fpLa!BSSfDZuEgb@X zW?Z#i1F9IlEqXc7FBxXUoJlQMtm>%p@+6iBQ49{F-&~g_nZO!5g>T*_MKsvT>042T ziwNW^br3;^Fj>p2WOB2^l;lpds3Ce>RB1TAQ+IRN3>La^!aVM4f%P}V#if7yp8@C9 zLAbiI%is~oOT=_Xh6!MTMuH3DfzWS>J{zSH;n)PdH_7?S#=)I-Ymz6x#zP#vVk#O4idJvaEG)ca{G}5njvgC+!2N!_l^s=H-W#7{ve2Y%dpf{PP*xU1N};Ex zyO&#B-aF1wl$Aq&#?IBKMkn)}61N*=U4kz`n}vp=`XfjGrShT+N0nV%Ic_3OOiqm~ z<4(H}TZduy-U42l<#*5_>;xg{1UZO#LF_1O8Oh42KR)7iOHLt%IOD779+V_ZOmT|e z^1De7I`VE)YkW6t4I7Hfsl=o2{P-(;Zh+LSBqsI7EKI|CSyN~I9}48f=ipJd`1r76 z+i~kkF~PE1cxjC-JcU@&^t8#5 zUjw>68}sJIDdj`}UU4jNSJjM$632J9T_kqCu4%Tx{BZ2(@#lxNR)FKFY1o`=z>J9! zgtP4XxUz(iR(q*%CSIesT|+aIrZ^fWjeS4v%FK{zkXrvDD<0SK=X5us#VSqM-UgXv zrg)87HbaXc7rB#U&jY5iorSUA|ubD59sxwS_-sth?M%zhur&kX23a=Sqg9gPks$zs$ zK9nX5WD)CXm}gVW_dRCfHa|V5$dD zy_!7Ca#RymrWq1apve40(_^h8v}=zX47>L6*>>&7%Df?HAom*bSAP@6Trdth(2>K& zhCm%T`e%%=GB0lkQXk6w4MJ4tn>-YC^}&HP+CSp0SXyCR$?!p=hL;T+#0D&EuJS>n z9TRe2Mhb}3vGf+=2lLlz5D60}qD6%R1y$&BOdus_HccS-{OkckPAkKHnih}}=+lOl zmX92QuOncW?quTF|%+D!voCb+<(6z~rE@6+? zWkI`(<$A=*M!%5Lb?Jc;#A!q2J}_iTQIz09dMd|tYf0@RDl?>~BWb08+W}FIy`4tJ zn6PGb6w=m8n?;X#{lVg9~ z1ST~d69@DslEgD{V4DAg6{{j}zFk(U)cjkLo}j6WGOOyOnQ53Ho^=D`*J9m`M^xUd z47>BXn>e~;ur_X8n%A>~Bm36!f-I4V>%w>q3JVj{Ro^&6SbItDp)wWDOV5QMY9F)qnLMx6(EB$82dG$QeV8GurAysU2qwR{tPaPEXGDx zL1YdbC>dF-vZqr@WN}u?98SwgX3weY=`tmG%* zBbX{_K-io!v!aV}3sgqxTxwg4iAf6SibEVV>(Epqm9o=fNhN)!>*8!#?@ z!?E!j4v;sr(?v*R_=ZD|rbV&2NfFR6$UpF6&Yy=FqosWhxo0u6LJ1pZxavhv83JI- zgCU?80z=O>IB&_Q^Q()-jl&&WXP*M!>`2?+-@!Sfa`brk!8Hmsg#8`d!MK0xJRDb@ zNQ7^>D{+=!q+9Io;E$}V{7dQROCeGua`uPiVgj_MM7qIa#$CjpxWAZ;#9_A=j5~V* z%t+D63;R3p$qP|DA4je9kVgC(!^fOo$zPtZUmEKz87~x-^J#~=VhvO+S%IZYDL$We zs4wwRb6zOGM0LLnaXre@Nb)2ab{AN1X#C)Y2|8-oH}QHZxRR37N^Re=I?1~?U2ss2)=>-5d_R3HXuhGo7Bt^cugxM{_)vV= zsz4Xx$2FmfK}EXI=zWqW)+LlSE|jHvwO^e$Gd)6-sBPg3^80Rh*bfj9wc-@z(Riw#qG}#uFjr;Yn zsu*TrobC&4$4Vd-StM_OPaqRLqD>45blfR5l&t!t2Bhj5J>rRS6TOpFZQMax2~A{H zeUz$Gy(3Q$7>JVhsdBaund^dEKL3y&!w|*ycqTkC6Peh)GCMtOLlac$=5@}YO;fF7 zt(@c4agO21Jwv&D-D*oP2o60z$s>&6BcRRm*H4;*bHV5(cx4PpUOE&-iz`NTVe-=6 zXCyy)ijsH7M((iWy%7;2*PRi&W8pnQ6z94Fu`As(+@Kyg#2=GK^W1(OQ@q1x=|*uh zTr6=+QQ~`QVRRK`{mOCuI3M{T2Q4R0mQk#biD=XrWxXr#CAy}DkgW)AFbur?;XtbS zKoW_=2HEnfsWXWiSyncXyXx8Oa=CYhC66af=EaB%!?zxpb)o}?!IM3+PF_P8ow)oU zEEe1eA8%=P8^$g-K}g6;$s z6mU|Smf?Dzb=F04QVgWNelxFCf*IjG?$IU-(_}&)^4~ABn@>5`P5u}N0a#0DMeivMWheaPClG0)PWP}Q(Y6=wcs#)M%BC>}W+QmE0 z<7B52UrOmMZEzP}XZdLGbURCw+8dTJkY~2E(;X+@tv`?TOl7DqF9t_SUS(nY&FF*F zh_KJ4tZ|?cZK~ih(EBW8sCv~s2URg0B@drSk-J8OO`Q_w!PaBA|C_itWZXI0`{7Eg zJ?bTn;RYza85YAABNrYw2&@ zbTMAHmfSh)Z`6YBihV^bE~n~-2^Li!tOZ+)`y6V{o5NN~s^SWHs|x*AkJN@{Psdtv z=aOO;H#=Q;SA4dbYMDl>xB9#mY;p29q*T$IHP5!G|Jf_mWnkh%CJ!s^fD!Q-PNNGesyH1LZA*6@XTnrD4Vv4}3hMy|JCv8iY&2?HpJ8W! zn`!PEMOWZ6wXPY_*!4QGFnaiqzA(5H6fzu_$mY_m2a8e@%E*i_7S}~Z_w~6gVfq}5 zwJBN*Z?dnWYoOj_{pveH}e^G}5_Lt)=rm1?6cGHI&E8(R-@Z4LB>L#SkIxg=zy62=1Q3ta=ZH zvx?XrW^P(gZ~AmGE#-1XeG==Wf?TNzk|&B4zL-`k5*vd0;1Fpa^t`_p)Sxx0z61J} zs~wg*@oj|ak~W+#Ivz_W2u0cDM^~0Ub&JaiUm?G!ZUseYA9c=!K`Cg2a{o+?kKXbN z^W;~Ct$n?FgCsnpS)HbZcP?hw`A}Zj@rt$Nw~i{mR(Uvo`NfsvMRShI=pJ(jCC%gB zNJ#T1KxWC1<|C)DFOG}0{z^cvN+kc{xRldpFQ`Zn!o|mx{f6TMK`obaEm|%g9SaZ~ z501v(Y?xqW6+`e{;cJ;_6sgcJ#S1p)ma4RG(j~Ek5hKGdxDyAnfU(6j!?jhf4(ZCx%rJjSOiBUKhl(#(tV3iJBxKQS*(nP6UtP5Q7s zS>&bJjntz#)h`R0sp*gtrfdlN3({&uozv#o584!@&T5us6;c9-ePTg2t)+$yD!B;v zLyw!Nbm|M^F;sNTU!a1po77I&*LCtrE67=$u&-V^IBNgNO9FY?L@vvobl179HAmY0$CPh3+W+wNRKK zqSba7d)z6l6lZ6v&OjE%m4F-zTBrJ#m1Vt2#2t7E&aTwELDHk)dR|hw)*vXT|&|lxeUR4w+_0woDV5 z#SeB;ruQFfiRPe|Xo|I%aBVwgHli4oPR%Tmg~?)hYhpd* zW=A|u7Rz&MLh@qC`xY76RJ6}g)wuzWzSeBzlN2RUR&}l~sBi{AMU2GCs?J4vWIp7P zb#beaS=Bj`RabJ#FfJb1FCcg+S+l9UpQ5Y*L;9A>epj1>Tqdu`TNttV^P_~ssL>Ut zhbu&*yuOqDkMQvOClhN`GG|%R0Y_RSxn#K>l$B>VUwM$Y>LQs(46YC6k%KC)gsJGw zJQT10Vfzl{5d@>~Vr8(P#o`AyTp`ege`X-0aet4OC~2I^f$uA0VInGs8?`*IPm!F3 z0^P1OJ%-q@X*J-ab(y%Zfw9~Wwj>lojxX#W#;9iM=JP7b`NVjcIG!kq56R)wm>eQZ zG-KdpteY3%^b-F<+_4dk$B<7b(nFC%l;DIgExttv^b@?Q3MxUgD(jINaV5A@FC{(k ztEQx(_KvLcF?g(u8D?xa*V$ha07rw8X}~ zHuT8|Vj*W7j>e2-omw($E2(6bMO?CPDa@`{HuQLGCapy(kvG>;$tOouVl0(#?vzw= z!%-Cw3kh66o>cO3VG(JgskWR*cWA5W&kOU#(hS#=lx8wsR1aIGG{Xf%d_NQmZY!)% z3nd~|RK%o^Dc#7+L%R8KVL_T;!-ZnpITzr=*;q*7tmyc78A*N@ri2t6fd(1nr&x}Z z6keAja_ql24Bs!OV!Nr>Thp;URqW02Eawt%C6^R2A;lFK6Z*2PKq;a5jbqEk$q}c$ z;#GzUU~k7<>#C;p>iU=7D%;hICgYd zf`Q7GSx9sS@4KDr;O%fAA`YU0fx94j#06tvYi=68bUkhz5=+VRYAm@P-z9mVa~*ir za0`caf$u3w&W|p}EyIZR`DGHRbJ?l8$!!1yg>=V(jTvS4fDDlleUe-fkYC8aE?9gE zQx9a(HzPU+@6?RwuEy%D=x&(M81nGtee_B1lHmiyp04QfKbORJN(SS?h+>rRV zjjDT;Oxh}55*WoStqf<3j!5d42?UPiy9cAGRwusbRAqqsfR+PQFL39hnZwH1|D12_ zt_{zZcc<{(N95&yvsQc#S9xo(mg~ps7mpg+4U<5d?Gw>pq;l!cPYW{TIMbO0nK(Mi z^pkXlNlmzYsEZuhqxz+Rt_z6bq<2vgkxPCvkVJGf_GH(=Zby1AAekd-+s=Y~INhJy zmT+(i^9iCjqX~k@Wi&w$U6bE4B#Y_>`*?oaBuCV?w+h-;jJAQ}C5|djywh-O%BxYj zq97xei;Rgg%o8n%GtP+hmPEk=c?kr)=!@d=aZ$ZX3$n}mNcPtYvTIzF{l?hH!8PzH z>ccAr491rey^FD3pw-FhUCGqCIoK@}I4C?_4_{;FcgU-~PKC|^`v z4jT~J)#dQPL=DyDlIQS7B}Ucda9c}$iOdlD;rh&n()Vc z_Qkbj&tdN-ReN6coN+@e=<{%NAHi#Y@ltwnNG!7?OjE7U>*Q)e@qyb~lhC+a(#ucB zqNp4uc1=a)a7uEjsIID2i8H{tD2bI;?M)XYh^SRxXB3sgwyZW}B#UAOm1smOZ1e#f5QL%qdbXvdi7)e`O~ZwVf1NZr~3mPGxms#h@Jy0aoR- z49kJ$I&t*5l{(3UBszEag4Eikjl@ISxwf)Vdl#5 zA|;VxQ+D6JSUqO4*Ro?)PU_$un=4(B6PCo+2~9Y5yc$`RlTeBS4wSkwzs zq|iT9*EdYFPL*la4Fde!UESXxvwoFH&8kfM1Uy#~z-$1k6P}ClOfms(WU$_=GW|wX zX5C}(Tv%n+N4Wl7NZSB`1FOu2_|xzO#5O{p(NoBH3ISD79079IB?;y473Yg=V@ z!f&Ua;uViWf4qwhG22y{-OyteHAYO6pdNnKR6B-E#|N+C*P#=Ft@w56N5K~Sdi3Mq zMg02oli>O4Iz|!wG_aPV)8-+v4*gf~6n^W{&w?lMTaSJoJdWS`)FpTfzYVB3coe@4 zDHlA9-$v9mcnH78P`BU#{5GcU!F~8`LOp_e@Y|G53hu&hGwK=KiQndQa&S9-ThK3p zwfH@jei^LBZ%g`Ba2tMG(XWGB@Y|YB30B~@4fP6^T% zfJ%Zz`0YTY!2%j0y8Xx81$+xGJa~cM~)zJG-w?IwZ! zOW=Fs`3;_-cuvRjCp_!v)D6hg#cmqhkKbauxeR5_ZXrY2)jn2+vYXu!L)pOSZnr`c zK$-j;sXoT&VYdnF|3*Q7!E+a#x*4rG$wv3t#|4M0eWRz{`BeMF;6#*tvfVSd68-iI z`{cm;hF^t2{l$1a1(qVz@nk%|!1F6Szs7@E)3FzxQ}N&hI`+X+Qf2O|ZfyLbV=4ZW z;TeJlQ}KlAp~f%mUj!Zxg94M#+n#{Q9Gc5u5s$#9OdnHuxaKif#o%EE&okJ`U^l=R zE>c1Y$awE#Yz$=h4|AN*Kuici4UcneuK;w!7aLr3jQ;X!F&db0GbQ?WJcY5DT8GUmIE~7BAc(^zs&!R z?Sp49*ywsRtK~fm?qjfl!NUxmXRwvQ>kM`=*v()sgLeTgt*$VB-Rc9B*6L#hM*v!L z547IQ;8_OT-qu?fFoSRX3WHY}YzJt=FWlxa2K?4-_%&Bl_cDIn<{5AuLGI*T96AZZdcY#(;X@=R`jN8%dYJe7)k}a@E9E-WlPs@9`Pox9y=g?ye z9tUXkIZ}53VVP~J%+5`#%qK7mz3fv1kB7+P(eYL@Sj&JZ!Q)nW+yalg(&H9*+;?6z zgSQy$XYf7)F1`xG(98Rh|Ng*$smqHp0}MW7@C^fApsnu!in&nhd;ZHU zwW`n{i<@ilqwFzBfJfD@$9C;9Ie=n@5FX}gS>j(`Om5+Ezx z8vZNbQ4R@skwXG_^;;o@GK))aH~A|pE{o3z#}j5JK$g##<8f$;6e@AT`|`j{90#0&29p^~VZfp! zO=EBwgXs(|XD|ccV{RoeXQe9{FykQRLd3J5c=ppZ448`(GbNhC;5r7^Ghp6C%$125 z6fuMPl@!VXC^3_!8yGOtB4%2|ynvWp6Eg(5i2?I$x|spkQst@FoLh z*u*@Db}(Q@L^~PmVz8S5b0hkK0dpfd#NaSMM=A6x{(FSM*9@375VHni)BLJq z-NAs@b>c;kn3>d(LYbKmGZSKFLd;C)RR*sy*v5c)3o&mY<}LId1J+3B0D})0e8}J< zfIFnnkNNL+48CXZ1A{6s7@EXjGJ`1$u4OQX!F3F-XE2w+JO=X_EC5&{g)Zd3ix{k8 zu$sXd25T9tV{kizM;JWHU?YRa7%;~p=6J*$kC@rX6s67l_bCS37`)El4F=m89ANMP z171al1xoss!FLS4XYd1qD)3F31TaThI+_1YVK9}!GzOP3n9ksG1~V93!Qe^;S238$ zU>1X`8C=6)Ho#R<=(YTJ4uk6%%w;f-!F&b_7%XJ4h`|jE7Bg7F;6?^Z8SwH)y!`!B z3SGf}S2DPT!L1B#W3Yo2U8xUAw0>tiKf(irxBeUuo(TV?{I;+CGtk7q!B7; zAfs0^uD2Ply3H0aSP0M@*_$JKb7XIh?9EYCbIgk7f?UKYcnxmOYjCV6{k^)M(W^Nx zzoIfV=jFErN@;;XY5@vr(E$$zs|5zD1qQ1HXtu>q@SKQ;g^U&~WUy*Alc&M4CHMo< zm!}NBm;%RQ3LFb+K6XI(48-psXbWg$OEj`28rc%W(Gpc&$g)jK)Y%eswnUvRQD@7w z7{r#mezoMKO94^h*aoLGxd%BUfaigs*S?m#;ttuer@G4onu=CuZUXpO;b&3vHs0}LJn=)wKhnmIyi zW(KX9547IMfM>r_ePjJsl;CF=Awbk&7Rp+0)!;RRe#+=@2biZ)zh8?LMk&!f}$W!rFNZMd?wD5)(>}$`wtUXUM0Uglg9Z^U}6w(n5=!oIyh~el6M%a;YD7YgE z?ug0L5fjH@a_hJg**osifThol0`_odFN3!M#K71wwk3ALxXOdEWmCa_RXfJ1cJJWt z`0Z`?3nt>XkKI2QkKYn|KyV>`OYPqTG&ON|2`Ow-y!xNf(rbW+kXs(;&-V1r(j5R zd*iqEXqfPBN2~378SntxET-H1vVTU(3cE5W!|yQroS+21!|neLPQmYK_FsZu;dg{R zA?S+Vk@m!(7{9067X?4Z?-};R0l(?*>`Q|m3kBLEtR=ax-X%z}fZ;GpLV1rG147 z%cyIdW6v}L4}o*-S!UoMaGrg&8CVF6v9B=$6M_G>=a|8F2>ivq&J4amV61(;85}|2 ze0#15JEm)lvlp4crwCkN-(Us@5xCG^Yz7}8@IUqvGxz|3@%Az^*pI*j`zABkhrmR8 zxf#5Tz(w}WX0Qi=i|t#?;4K9HYTs%G)d*Z--)07HB5`9-3rwptXotW;)9M$rs%~X0GOa;@cLY3N zfh#P87;J&j{RY#5)!6L-2^Oo~Pf+z@(*+-KTcPSY#uC%RAFma0!a+rxVIw zYI>bO+5?Scrq>hEux2wCQC2f%&&pQDvqf3R-scc66v`SVhOhu_#8-YI~gC_X1#`Mm>pWg-b@Mo>*{Q-aeh?!o;SZ8{p@aNCL_xN+W>79u` zXJIziG43$EO8hw|_ym9MG`;iiXH4*ZbyH)#>A?!`jSZ~N!FVjzfOaFzU8eUxh#nuj zhCg?k-bMIxvFxbbV|th3&)=};QpdR0^!|xI{|X+gu4mkb@#c{Mw^|Dtzu$zJHCO_2 zdVp=Mfp?Q>eu(%7+2|TvgZPIe0OB`G$U9&{7^rJJ#kSo5|7b8$JGZ7%%hO$Ln6j}0Sl4(}Lf$OP{01HVn&~aI0&5@0tPYZGGre1^;9`VcH@(}f z;CzJMFui*%bW1(sP1Ac6i5Foa}-_djJL^N44p_W?_Z%j2))8 z*9y90_w_B)W1EBbH9#+5cJfrlYUUZcB=jSMcJp)#jzwsXgjyi97wpFlE<@;T)4R^b zO79u(u*Dl~Yi;b4khjuCyKM`P`dwvX(zG_-HNE9_04#a80lNy%T0HA)^ASw4{cJ4{ zywwtGeuQ%01DV*tZxMQ*jp$emn-~WqJpq zITT2`#V+gzp7EJ!{iDkKDJIb8ru8p${=WmJ)h}R1HG{Jd`qH$pe*PJi95SsHX3(?) z)En^UP7s~iR{z#G4C5~rb+NIt>4?Atl!-LYI?8h3QCK~H27Y-sw0*AREG+6O(k623Afe#ap(5{lhVOnzeRW2LB}DwS0pWy_20c4D#GELh!-Rl5*RjF_Ae^!}lHchii zpbXN7IK;|e!tVS%|7AOgn4Hg4rA|WME5q|t4ozcl83VRC(_99;+9%A-i}qxPnDWwD^8n<6UO2H zY!^O3m0FW^m?mS!{O=9J%T=jj9=@7O(3atZJvh%4yol3fS%KO1ODh0E%KASVf75o~ z*yQ_Kb$6ayd$^Xp435I^%QoLCu;H&w>uEDM388P`M`H%O^nc5nuy8!_jPH0SHt2%T z_q-h&{0yNVcu!Uq?JB~?EZlyeo{+W0gyRp?6T&_%Tz{aRkhN7QFH^~a8gnD!rjZ3T zhJ~5S$a+I5FVo3-(+uV#?sBpq$Xt)m46=5xLIbsgteq@MK`kL`mkE&qY6)5InzH83 zB7M59rtzigLP)i8=!@<81x`wO|%;290%_eLY%i4S`Ss$6frHGqD)+c6g5kl9I z^(hNno^d@{Uzx#Q5SmNY*CzCE&zMKpWrim18S@ES&Cta?V*z2mIXDxcg@pZPEMuOr zh_LAl4c#+tAnZIt5%i43gzaZ&f}XL2um=rQ&@*l%3(C@K2rVUSNe8bWw2Z826ugYk zO=Mk8!3zj2Cu;@;&mnX(SrD?GMrZ|DR}s`l&sa&;EP{aQ8MlyiHNm;dGj1hoHbJNK zjN8b%mVylkts?6>f@_y&tS0Mvf}-geYsi9db~i$6$(m2WdW6=Ibt46<5W1bLWh7&H z2Vu8d#_~?WmboaR>k0ejqKMu_)(VnQy_>L&E~9!6S+@`zx;*1vvQ`mXxjf@OvR0Ff z>iuLrM8QiE#TerU^mChMY~-eu9n- zIUCc2f?p!^Dy9hqCnNM4CI>-rgLsX}LBaxFC+i@=$OG{j(}bYOdB&S$eNMqo5!z1H z7bL=QHCd40k4M}NvJO+w38A;py#x&pLNq23!Q=xW8dHaYHVEy;yAf1A2+^1@1gj5( zXiOL@xDKJWF-@#sHbU=UnpnZr2<^k-nAJfEw%N~ScOcM+KRuGCY zO{`!tLI*HSED%#Y;{!|%=m6YJ4S@KNtZS^`ZwP&a8Da&0Md)L)=2*f94q}E_VgmVu zthp9UAoYw-F+)(mZWQo6{(eT*g7ELR$on~2i!9+1UyyZ!C0yc5%p^;A!y&SuyfAM# zjG1H!!F+|8WC_6>!ThmcxdRWz{IP-&2z^7=ZI&2ozQz2pV7~(oCTooquw4Et>IRAkQ?*deVXeXLI8+%i1idKwdX{04o5v%cfh_GnO!c%PkA~)N=H~49j|6DyTC5 zg1=W-)(hd^G5C9>Wxa&ID^UPzWmj3&mhdmj{WC3Vs};-zVwPpS0>mvy$5ZKQ%i3mv z)7LYuv8>mDSPaByAZA?N%6zENiZP^o$^O6pS5Xn8w6MMEdU^ zaFj%$+>7Pt-Wx1y9?HK7f8*{w9vo<~WzGLzRLs>q3~sQ*vKAm)+z!nRb^?2&Wi86a zR--LTE$aqg(`{*swk)%(#X$UTxZ&M+&6_Oi0Z0=kp+lEj)}wZCEkZY2)<#>_?G>O) zTh{HBpi5gO@-3iATPE_YphsJV^fu6<(xg{`7Hte}J!7?HJ&hJEN4E_@p=&^kwv6yv z(4vhI_KkHQKGe=^;xCg|89I@Y2>?5TIdpf%DUdwtL>C!`R0EqiQb5Q|O3THcnI_|fu zcWs&H4_MZI8`gTPdlt-fn9~i7ha?0iR`v#i9$w$rV8s?Io(Kjhz;}KrZBa} zoPl0`92A9&T~X5$7Cf)PdK(%~N(g?oCa=oPf!l1sAsZvm(0EEhaKGi%+GJViX$+YY zj0Wx*3BfCueb?aYUe9i}bqQH_qKx&f`335FL&dCe%?I)CO^siVf7{hRq`U*|sJ7q(7r^n2o!{8|T%Nz9 z)E$VA4EIevfw2bAdSRuU2JpPi7D!W2>6vrFVZk*HSoC)Yi>~p3MgM>X;2IxV^iN0xuJMsY|AIi^8XsHq?_eeh zI%q*x4Q3$pi3KM-kq17t;E5;lz-JcR@kBZJ+=5S@CLd9N+#Q|e*}AhonphiPj*eF+VJtit_hZA8;*X# z4umeV;q52u)pQ#!f597wyWEC}B-n<~3>$V5d?*4{$%YvWpNc?Lvf%-Uk42y=*>D5I z#uL_E8@_-rZ(|3?hC^WREJ9b?wA2*E;u;&SfudN!m9j4#0^q?=p(QrF3}ID=s$|1TCwpB>ZF*R#i_2_+n#$7PO*VWG zWf56!!_p&*$jvrPdZHSxu;G#@5(4b2P*Yhhyv2rdBIH7-N;W(cWiRYD8*YlS7q-fV zuc8Qtt8F+eimb54hS#DPoY&eg5Q$Q;&W4ppmYLga_%F&%*&Q}4MY2MVY+UhKr*JjQ82JTPc(G+qBQb_O53GWP>XDsFtNvmMZtz0Q#62$HjJ5~ z0X$~IOoi=S&)8(cRt3vHb`WehN(Ma_B`tXU8tq1D(hlZrXuIh&>`74mr-7A}zSE9jnNp1%URCwyoEtp#*XGUHzZ-IL7tZJ>LS8UH%yo@Bj<_Ts;?s+<y$aY z(}r`W%;{Y=JUm5=*lokjQ^bfpHheuHM*PIsYtvn*V?CF5F9SAGs;>dqt3rJP@DxG@ zDtg6q$A+J%sD}G&+Qh0M)E*mFJ<$O6+XQ`fB_qLn=fK;1B1m3mN2-H!BPgx7~I5QIfI)StYE-4{3}rWH=tb# zen9A3&@N%qAG{c}OW5^?$^_aaZ2LoH0`01;qbi3cS;6Oso8%C*%})`U>=3lgg9uG= zXsQJ#0PLzeG}{VxAvDc_*DSX9!HXTZ&WdSgx&!}NG3{LLz=>8&J2M=3(u!&43J31A zV%oXVflsZNcCK>ZSR1^AQf9(VVTqAvmV@m8G4fpP5ERH~fW5{cD1i?lG~0pOtr%~v zb>Mp|#+x|~9B}bL7kIG)FI*^mFk3lr#l=TmFk3nB$CVj6&mpLYYY{i!p@%Io)WD|l zh$V)ag$}%R#Za@zfy*v--oT3;`0a|xX0bz1Ag@Q<5{IBX&Ozu#2X4GFLzg=6<&_z_ z%z-bj%+Q-0*lcBnE_di@OJ?ZJ4q=<^@5sBtfv2ymt1DsEQEK-s4t#!PUA@(T<1hFr zuIhDYhZVHii=l0`kHLNh2N-<7;6n!N#-*IM4sz%-2I9BHCV1teb%aA=j7R0G9D3h^ z+zAVq1Lxvk6hdnpco>U5zSe=8vFPLL9Qw!-1J3OZeXaEDI~@2Q%PhOoffKUKvh@x; zk;T+v>TNcRsKxVcqkoSYkY*`>50GZjcKtAZe zSy>jyha7k;i#2Y81GnYi4wUz>1K;If9YT*da9|GBAO!Ol_8eCsw9$bpb8ss{k2&yX zmc@0G1E*$LTpxGf*({6e6As*)WpRDdfhAiO*UcbrTNc-+K;E`Ek~|Iaw#63v42aqm z5_lFwZ3_uJ2coux1fB;`+d={_fT(RD0XDwbLIN*=sBIyEEg))JnDomIT%(0aZ*|}w zElm0q2Tsz$q+fO5DJ@L;H3#m}B9?7);4>}D@#_wZ=OT=~;m}H3h~`ZP-qRwCZFk^8 zEy7qeCXOw_*bYn_-hqWN3KPdxj2jcjR*V}HN9ljN9eU7~G2i3B-x@|ch`0`%uHild zu8fIei^1+4OdPfIx(^e_R$Lhq#|Bp(Z0yIxv4b}Ef$G{Ym(O>gdyL~YF?f=}W(Lgp z<$E;w6fO3rV@DWH4;)zj6>oRo@eSU7obi!E(0tn# zW9t;|Y~qK9kK5Y9l_m1WV-ewFhj!cW$b#VPV7CB1SrD8ZY#E5L?o$W*24bxH%z@Xq z;`GmvG5rF3#)2A((LO zpa`ME4xG~A&xJL^foD40Jg{asa8HMK32b8yeAMC61xD|{Q5}r_WaC@RPdjLLIf`mG zgTYJ&vlv{>fLoR2Q}_-_`3|$l5%KJM%pym`vmY>v91+i|T)N7En-`V_mu5Qf^TN{L z(kv&~gU}S0u6ATWnCj9sjw}e%T$=63f^eBj*E+HwOm}IHBMZXiE?wuyf-u7+=;yDX zlq+1C>&Sv|rAzZ1SrD#rX}%*1!c3PIII3&PbdEpqT#HYwx+~5*)eqKx#yL6i);@%RMRyiW>-RRP4M|KRBy0pd- zac`MRYaJ2yZgOdzBjVn2mu_bp1*}6ZJ?tp!kV}s^$~xrIqmHr;xwO$y)*+W3bCh++ zrA>|q_N!ca+!4WkwM$PpBG|8S=}AWf`?W4@c0{mW=h9P-2=>r>pLT?k+~LwQjtKU5 zx&&(k3wi5Zdd?BS{w|lEXX^#5K`y=Eh+uz@OD{Si*x&2YONw&tb7_mBocmpRSy9dd zE^T#0uz%2{R~!-SA9CqcM+Ex~F1_Z6CHP^NwmGs(^oUEZJMiQLKX>U3M}+;2F1_i9 zP53dFwmV`g+T>ETBetT)U4oUQ0y&;==`BaB!%w=j(}8~{Y%ebDazs&h%B9_oC<;%z zw8s%e;Tf0qI-)2%>(bkfC<@QH^pzufde6Ib#F0I{7hL+<34Vg|UUcbO2Y#Fo(_MnM z3G@Wn3t~50rpp5 zl3@jJH|C`)bg&2W(iJ+`i+Sk^9lVWs=?WdZgL&x+9qhxrbcGJy#k^#*3@jCxm#)yk zdzhE5(82qdm#)yk0nAJGj`55SFfU!FJD2WoMP~Wlr8`}bS$=S7y&LpG9aSFP<%-NQ z$)menky$2tbdM`C%M_39bwy^G>e2nKaEoakJ>UwrxXhymUEvnfJ=)-kq;k1O54$3% z%<$+DS0t4yJbKg>N##n9V1QyXz*QbS=8B{;(<7Lh*bFesqsLv5RIc{u30EYQYdqSl z=xVk{Pbs>()}yBtUCr_68AVsudGxHJtLr^_PSMp|kDga_HP53L6kW~t=tV_W3p|2h z>oU~4(4&_XT`lqmMlGhR8$5c|75QYbN3XdepDgicn=9h&jUK(BsA;K3Zz^h9=FxUV zP1tyOOVQABk9H~=!uHE9MMK!6+2e{-veKiyuBel@c=Wa_>g25+z2ici#Ez~<`&^M? zS9$cVD^l!gkM_GF#jf$_Jy)dIwI03iibS){qXVu;G`D;7fh!Wt9Ugt?ibQj#M<2PO zXRi0?V^<`ayF5DRik^A5N1wQ&XWrw{r>;oA_j>f1qNe*i`dm@d{T_XxsObTZzEsro zpht%kH9h3fVOQjs4IX{viX8K>N8h+2y*z^LDOWVpN3k{Kie|deqwihWc6`jEA6(gX z+~iS}C)D(~N0U8Sah~vKiYF`1lO9d=WX0L+(KJt1oTogx%##)8X^*CR!lj<^=yFfE z)UzJV@Ptb}=g}3OaH;1#y3!La^@2xNdBUY$^k}9hT^4CtT`fkFN2A zOKtUNwkKTb6_2jToQg3;**b^?b)1xJxaH(A$-RKFI+U?O&wya`v)uUye zaH+i>-Q)?EdfTJro^YvmJi6HvF16326`pXZcRgC^376XM(Jh{EsrNj()e|oDzDKut zvRWPRXq6}Y>I08fd%~|i^k|JI{OTi*)_TIPKK5vxC;aN5N4I;zuRihUPERQ8Q;*hr zLSdhQ=XgS4pM&Rk!mqvn&+&v`eF>i93BNkz(S4rqtHa17= z9zEoVr2Gx|kSDbEEx3;-#;otaeLOK{eGl&AiEqmf;69$LgH=9l@uZK_Y36|GJ4=_y5Pm-+OxqP6KhJ)>yta-W`6v^K-1=M=47;nVYq)~@vF z1x0ID`ShZqwV6J>q-brHPg@kNUG3A$iq@|2X{(~O**?9ZXzf~`URAU<$EVj6tzGBS zHbraK`}De^wYfgM;Rz3$=hK^>@UZzlZTEzSE%2$@6BT`-Pdhx(wifyHmM7ZQ4LhFN`Sgw_d~LZ;`#j-mH~aLi zCwy&%Py0RLYb$+v&lA3Oi%;)+!q;x~>3}DE?KYo2@Px0e^65iQ_}XfpKJtXGt?}t& zPx#tepALG$*Vg&;i6?yRcAq{~RCk9@pDC)l)2GiB)vfpGOHU-DyL>w2iDY!QPlr7* zq2A-uSDu(q@Ac`3CnnVUeEQlG6YBjwedCD<^#Py0^~8kwpikd^FCee z3x|8br)zxSa4-5a+ZPV^l26zA!r`{~G{+YX_p(pd`NHA0`gFZ79PSmL=K8|nUiE37 zFC6YQpXU2Qb=!Pe;0x8g?$bhFsO}A)7WqPTZ~AnDFI2bPr^UWdUA0e3e4)A>KHcaG z)xG7@QeUWUr%%g#p}Ji@-Q)|^?e=N8FI2b3r<;ADy1hQF@P+E$_GzUrRQHZgxA;PJ z`+U097pi;Lr`vp?y8S+_@`dW&^J$GQ9PWLe*80NX4*0ar7Y_Ghxli}`LUmvG^nfoM z?n|E@^o7G6^64R8INV{MHu%EfzVhi|UpU+mpC0jLHT~MBM}1jMzwv3KFRSUdK0W5k zYWf{GoG*6X@4?}Gap(B~9L^Vao~j~x(ihomQW0(TMK+sUL{Ir5n@uUAr+tylrWVmN zzQ|_Nis)HiWV6eP=s91kNYjhxd0%<-710YmHdwJuRYWiP;^K2f5xwM#kHD2hw8a-K z@Twwu*%vKvW)W@mMGKr&M6dXw1zuf5ulk||UQ*F` z4PT`H>x$@2U)I&@i)gzq>+0Mhs`h1FomWIVd|6lL7tu~dYYU2Km!h?WMYLPd+M*)b z>&t3-LlM30%WAr~h~DvKHC<9f?zzHqY@MRd>?ZnmLU8mmo;=v5gqbn4P9GAhkaQ?*A>xMzO13Q7ts-4*3dhO=o??S*_}o7tuNeceGz@< z3pcx~h<;FXb$1a}6^W#OPZ3Qj66@r>MKq;IB>nq}Xljx0u=|T>T9NRu2a4#jBH>{V z7SZ$~;b9LI(d9+L!!{Jr|6}Q`<0Uz+WZ}N&y|16T7`wZwaU=_E$&zJ|WXm8K){MJm z+O@srHN&pq4l^?|Gcz+YGcz-Pk&*k){6ejsk>*xpoH%i^GTY_IriD3apCg+V<)lN7 zY+9U?jybYvNlrTD$fl(^>6{~*mgS^Nj%-?iDamZMACnUmo;y0l$68Ihw)+ntk9 zIV#tloQ%#=v{sM-96TZOT!@?m&@p zOe^j}k#cy)42dBWDaS2|_n}BRZb^IqMatpbLgar?q+GoY^azTS!`p=z4MCA|+??2G z$d(-IWm7}8=2$PA8L}ukso&9yFu9Lupvb~WU9j#aXo zAt!RIlHCnCnPZjgVaTZ*t7K0@PHV39GUSZrT5m(nYOeJ$u8lL~f#%wHLmq0bO)%t<=GsI<9&4^m zGNjR9f-%{UrUny?DTXvNsB2RVX>L&0rWw-0;M8ThAuSC~U1k{4%HY&xrXj5jcAv8h zX=5! zwIM?cy00~c3^nM!)*3R*p!-^9$Z&)1YrP>O47#rkhKw?(TpJA;ZBV&388XJ8a&0zb zoIy5iF=V_!<=Se<1cS=8&5%h3yUOi`Og7k6?l5GE!LD+rA=3=%)hr5ThOe-Gzb} z^#JG|6vU`|K=+{_M%@8=V8~Ge?+Zfzpdbe4E{~uf2Inr1p&$n5E{&#~G+6zbnsUlu z^=oFzX@k|TxhZE1R=*aeoHbbeTAFgsVD)Qd%6ZM9)}~z09BO0AMa`kMrd%>u{o0vw z*`TXxZ^{*euBwA6R}H$Vj;37GZ0cmnbSD@GgBe9vQ*IgbSKUmxZO~tJ zH|35&f7Qd3y9P6go~GP0=-_*qa^IkX?`_Hh&AL9OJk+e~Ysw?dx_+iS)~xGqN~6hH z%m7oGnw-T9G^LrzSU-nbO&$=NfNH7n7cA zf+^ihD$+z#x|>v_Nv8BLsYsJe>1k4trkK*pq#{itV!0bFlC%c)~z&U zyh-I+Wy%DT%C*{*i6)h6jVY5%vTm&@lTEU2ohegHvTnU8Q%$mNgDKNYYS>0oW|;I` zn@pK$(sOM#WtK?|+hWQblU&WtB-?J7~&kle%`ulr<)G z?XW59O!})MrmQ#Vua26s!KA-BX37qedUf2CohJ3_gekjB>eWe8_L%JbPMNaT*$d(N10z@$o@HRT{q^M-<)Gv$y;l{#jtRtn$ z+=gzL-12h=x?yt5&t2$-$t^$kpcZER4!(CEYGKxI0X=|PnDrY#51|nzxBNVUMws04 z^B5Xoa?4MnB@axx@TQhLH0i>dS@K9TqPZoHH6vPB(r9tRW=l(&THLVN%97@m-Wp^{ z3rlYevZSS@w+30#+S1!JEoo!vZJL&}we&VkOWIp{{%c7GOV58T>1gTsuO*!=ZqDpt zNf(QoGrL;S)#B#NZkBYns5IRz>0wc6dRWraqSExVWS~WN)60@U7Try6O9oqXH+?J_ zYEeP@S~ARH*VfOH;TF5L{+5iis2~F@8D&vH23j)OqJj*vWUR%!X|N^ZEapu^EE#Xn zKM%EJqD9>pX2~Rrx-s06$(DXQz>=vJea=Wrrdjkkqb!+j(dUe|WTr*67-PvSi)t~} zlGzs3Vw@#&ExMcWmdvy0ZYEeV-=e#jXvqSL?q-rD3oW{v$(Ag#=$fZkve=?)o@&Vw zi>`T^B}*;3=INF!x2O>_ELmYuBW7B%(xOJpvSg!06_{a_TU3F?mh83YZkAZG&!P$}wPe3V6fa@nG5*<{I8iz=|$l4};HzFRE0ZgIEBR!eSLRDo@l+_LCZ zwp()BqF32r$sLPcWv3-~Eqaw*mfW+b2fHn4X0tBr!J4u8r1xUY*nHCaENNxa$L`0P zvH7GAV9nTk(g(3-Y(D8jmbA0^qz_~D*nHAQux4ylgQJ#ovRMs|VfEOo2FI~_Y*vF4 zSUonM^hry)*?iKcu#Rj#>C;$8HmkuItRtI__N*nnY&zO=mh`siLC#y!$EF9lU`bz_ zb>X5V{cP5SOP2Jv$%xCA46w(WdjghSg}(`ChkVh)w5v1MAYJ^Sz06 zX_Fhbur6(K8u+{L=I$&GuKjIqg$`&gGY{q6&-OPhZ8p(PV+`rSvC z%&^&6KgN2q*;zN*GRtPS)6|wZHua#HEpu(^L33N?*-WBa*s{Q;9<;P&p-nw#Wy>O) zj-s_KOKj>v8(Wsz)PuIREVJ29x3gur&3?MQEh}vH(;aMCX)}NBXv->_%FxM{)i#x( zvn^|EDnl1r*4pfVy4teNW(U;Gmi0C}pzgM8(9G#!%SO$dp0;e#%;{yzX3d=5wrtVN z>0`@Q&78irY_q8m{cPE8QzQD@vcslE46tRVO^q06%PyO}&>&lO+w6q~+p%GiQ`7M>KOr+j3MhXN)b!G;_w|pQZr|QEvGbdCfagZGiQ=5XEbvr+j3SjXNoQ7G;^lfa^9x5m}bibo8Dr& zEf;Niiy5|Dvgs{m+HzTQXqGKkG>2x}a#eF^jxE=0s?S_ouG>_fdA8iJsXp^k|z-G_1+?Gc+)n|n* zk8SQ%TWL$9L-)GMmZlEf>uOt?IdrdUY-#SW3az!Jy+bywv!#PWHm$d%qeC`ru%)v@ z_1S1k7l(CblPz5xy3)(NnLMmbcUW44TTs6NMS8RJlWPS`Te(fOY(;~ky< z*)qY=`JXM59BR%PTP8cyoU^t}ai}@xpbQRkz4K58hraUyl)<6zylBgOhraU?G{Rx7 zcNrStFxR^Rjc}OjUA1MgL-n}^wQ#6D*P#{;bG;i-3x~6bn@|gf{`3~q!l6IC4YhDs zneIR>99E{g&cgOGkD%)S*_6>~yF@tsU9ru!6O5WVgc#*4B|d z4l7tYNA^0bVC@~*ubI=qkpr4J9UVESnbXOU!w%J_vm-|ws!tb3jyhDIu8tgcShu=4 za>8NV>h8!%hjpumBd0ZAdOC7O^QD&~XEk4XJ96G(wd&)@1&7tDuOk;VU-~(6N%N(@ zBbPN_1~_uXVYM3Q$W@2cYLFw>99FBrj$C(Gt%f*q(_vmb)R9{b^WtHS+;*534|n9Q zL!}wv$UTQjGt!a!4wYtW<48-F?scpqtzF&!I?~3~{jVc!UETjW z(%#kmuOl5?-Tyk$(bfI0Bb{ANOQ$%}#pSegsv})py4Purba$y6(;eyIQa5He($l4G z%ygueOZPgug8*xa@l8IMUZ;*E`pdelEM-d5-jV>2BsbGQg#~S>VV(m-@2M zkwGr?WsxI8TykTvBST$sV~HcfTykTnBg0*~n`MrSaOrNAJ2KK`jauQzD3>*Ar6Z$V zvSgJbV_dRiwIgF)vSf`T<6P>?T1Upa)R%RROmL|$>m8ZsQeQSWGRdXBY;)9a-$s=NximiA$ez*pa0! z73qj0%UmkbQAd`$RHS2$tZ=DF#~oSeQjtzLvdX0*opfZiOGP^6$QqZ5blQ=%E*0sF zBkNo$(pg8=yHuoej%;wLNar2d=u(j`II_v5B3*=nxKyM|P!N~Z>M|6>Wwp8j1#!8v z`YIH}W$%0q3gWVNz77R(**o8Wg1CI6<|Y)xasJRUVarq|Y9Y^-L?4s{N zOI&u*_n;*%yXgDS5|;_z14j}i%vkM+UBi#BupvTY%mmPDXE9YERtER4; zcUi5PxpKi}wQBClCC#Q5u3Xk^YU#=q&8AkaT-9u9?aDRHrZ%oz*KBI*$_>q?cCOsi zY-;byEzPD5uH4pa>gdWH&8AMS+|_LA?8-gOrY^4B*KF$Q$^*@&ZmvAkZ0hdHBh98B zt~}Ok>gh_O$5$MCxzf~Q7v0;HW*)ofKCU$P*hTksrG>{=9Q(P_(&HN({atD8v5Owy zN*j-P-9T5`dd%wvxzf&KUN_j4_8#-PA+B`rnAZ(;rK3l^8s>?Mio#`#i?D(!-;2jdi7`N97vlN-vMfHQtrp9)0!%SNeGL z*%Mvq>(OUVa;2X~pFP=?{vLhy6jug#tZ!3Y8R)UTO>)RYxMtIb)xvq@#sA2P58Rb#K=DRZ5qlPVTWsFA+Tj-d~8dqj`)UdU#%=D;X>s*=TQNz}|GTWnuZE$6dM-AKP%3O~cw#k+G z9&6raR~C4zd0Sjr=&|N)b!D+f<=W=T5|7HY-Ib*tm1~D9%RDOAPFI$DRIXjFtnjE@ zyIoo3vF7b@Wwpl+ZLce9Ja%aNTv_K)ulBpL-lJX}aAku>y*lX14v((+kSjYqy5_^K z?DFWEkGQhiqia6u${vrd`IswvJ!W{vUD@Z+Bb{(%zekUB(v<@qJ<=&x4tn%Rr(HSZ z(IcI4<*-MObk>z49zD`ISB`p2^Uk|+%ww8&!Ik44Ck+=}IpN{lPP}d6%1N(o09|(F zv_~Df;>sD1I&{^QvmW2@xCW*1>KT0RI+Vu4$)0%2(3OiGRq7@*$D>N!g64QssoT&T zkGb9*XpYBR?=CdQt6#(Ky$8+la0)2$KWL6uzXbFEn&Z_k06m1}cs$7V5j4l+LAH;f zIUZlmZuI1?W=>O2?rG*U^W?r}PIFHlXy&x=ND$W>q#@8SzkL(n)`euyS*nZe7=(1!IPFgU&-$1No$|;g-)Kd@i|}U>`7an^Mx*+ zboDvY?CME3pEJ#Fo^4cR;Ym-QzNx1ty?myAy*%mdGxh83NgtnGejiWz z`kZO@^`xIq2i4D${yrU4e@_PZI{))zkWU>N=*eK8IyA_WA->N4JQ?ci{LhnNzRv$V z8SYbuhIul=rw$GGWTa0W8sW((pE@+slhHnPXp|>oeCp6>PsaMxp)sC}^Ql8)JsIy) zhsJp_!KV(5_hh0^9h%_DB%eAo(UZwOb!d_&Q+;-5lRcT{vqPKW$#kC`+EhkLn9%-p3>wS8pWu9#C zsWi(y+2peuTj9xOpWWC>Pqz5%<5zjI&8NPs_GG(HXSBwX9X_4WT2FTQ)R%Rh?Dm-e zt@mV)&+dJLC;NQr%SKQ3`}9MbJUQUg4{i43kk6idizkPDs?SzWj`&ocZJr$S>4LU< za@?m2+TqCwpDt*pC#QUB&Mr?*`_!D>o}BTiIeR=g=hOS__2j%y@3YU73qHNieorp> zRGI^xT=uCn2R*ssQ)v!)a?PjXIqb=GpN{8~*zX-;Ex`#4k>Z{lHf`}LbZXR*3{zBGIeYdTFeHj)|XdWGQj%S!JO9DEc;l3;js5B#dSsqYnM*6ZMpwf);Wo1C68STrefJ!sQ zm(>B4W~?u3G_S__vR3nIyf5oCuO|4iUh`_AFB>$kCi${a^J=m$n*u7$6kj$6RGO*2 zYzdeOP4i`Iz*K0uFWWT3X85vQGi;_WJ2b;)`La_pY_>1EG{ffjvRgB3t}lB6D$+b( z_6Ag>`M&H6*zYg!Wq-haf1xi2G}jjSawuT0w%C`$0eiJ2z8neYeU|!iEMT6v%$MT< z^Tg%8oCugFuJGklzz%JtFQ)@`XsdiV6R<;D?aR4k=!e$%aw%Y6 zw%(V^0sFEIzFY~|mu>XrT0j@H$(QQ^UC?G-7XrC|5Lvm=p zFD*iH=zuS+LRPDTzO)X>p+mm33CW?uzO)OeNJo5WA5xKy`qCk!A|3OkQ%FTR?n~#8 zigd!4E+G}^q%Yk(%Ar$j11(c=F6x+j%mJ(4&=Dz%a}k;XugaM z?IP;X#z5LfoN#Okq+>)K+8juyh&r?-kj@b~v^9_}5jnIikggHC_w9jni`c#I2&8*N zMcNrikBEx2E0CTM6=`=My&`t+djjblv3uVeNS}yY+ZRaRh+NwrNWX~MbRdxa5w+=H zAOj+5)1g2HM%1RmfeebMO-BM560w#Y4P_n;dQIdmVo5s^a=pc@f6^boocv5$WQ-H7O}A44}Hy6eVJ z)@Tkj4P~w7P_t0hX%00HWxeK5i%>R3OtD*rvPpBORVbS^hgyfSHDWDm6UsKtp|+uH z*BojW%Fc+jtbHiEBG$4Fq3n)W%Q}W~SaYLOC`U9mI)`#pbE8Wr$0NP}FO(CJ-v1ZM z$%y{Bdnl(O`kWr2oQ~*odWLc)qR;6S%2~~g-l3e++~^a^dCiT!po}u#xp#W zTM>J(5ux0USiweya#wR>R4Df}H%5nYUvpzjC=WC@#)k4xb7Nd6k2E*Nhw@l+V?rp6 zv7Uc~(lpldk5HP$dj1hg^H}fy3#CP@_y2{`GS>V5LTMH2{ePjfj`jY(P};>(G|1Xq|vEKg|O6QpBGe49rG1X^5C|zT!&%#i;#Z;d~ zp>&T~%NB>yBW5jI5=zgQwQOl9y<&1`Stz|@>d^8~`oz?s6`}NvsY5G6=@(OnR)x|( zrVgzRWk5_FS`*5^m^!pJl)*7Q^}0}o#PrnbLm3*=8Eptdk5ER(dj1j0n3(FbEtDxS^<{e~Q)6;yM<~-`a%g8L(_?aIS12=La%gubGh=dS zPbjlua%gWTvtx2-Unp~8a%g`jb7OMoKq&KKa_C?v^J8-8P$&yxa_Dd<3uC&VBcUvc z>4J`ivN)z|J{HQ7n6CMFC`)5b;ZKCJJf^;!3}r=3eK{4%%9#3cI+Rs0_2o<`t7CTb zXQ2!+JNk1_hM4~OJd`1(f4%@^i0Pj%hO!~%T;mcnB4%%Y85$9@x4#m~mYC{u6&ev! zeXcFLL*}K_P0XW6LU}C?NIi{?CtM_vM*+De>ar z%`}a2J|1W`(=5uV-Y1)B9_2zj&TOVdl#5XltfC=l69 znttj^{JT6?U73E&U)5>Q0N4b~qu(Fu}QSRM% zR@uzJDEBgAm~3WHlzRm|Pc}0+%Dsn|vki%IucG70W`;(&_u_$NGsB|X`|!N7nc-3H z{dip2%!nxW0VXjcqud*f4MXvx9Tnw1SAPn3@x6$D7#-z4&wo&N#Egk@U&IgnOZc;J zNmP`>y->NY;R$Cmql`!?D!~$8(@+}IPo*Z=M$nQ^87nZjGicvgOj2s@JFk| zCnrZwlp7mn0ZoaXz|~{Z@P|%~3_Mmtjb5{vX^~MtUBn$wk%>=D7uF}6nGu;qa5I~k z8JP*Fna#|K%oNPbW@blb387OqGbb|3=d1T%adtMdCNf__nw`z8jm&o=%+6-k zMdr)Mva^}>k@*VF8O>%kMCN;N%xE^VF*0Aprqyg_Q)GS$drY&L&5`*Tgw5H^mdN}H zW?tFM*2w%Z0^w|CTV(!}b!2;F;`*$Q;-|TTNSzb1GcteK*q~0R+C`*}liVGdxI0)K zC%K2{b)dbG`D=YL^gg2Z!)GJ= zd5jUg%%#YFp>Fq4e^6ii@(cXC%aQ#uHsEG6S0eirq-WX8)yRGi!n17VT4cY9>@1tP z9@!s2G@s4fi0s#pmt`|IBl~s4W!cQF$o>%0_-y8OWWULu{hi4EFsgYrb2qX-h7z95 z+>7kDP{FgA`;q-N3V1g2AhJJ>`kl=@jOZ5i8N=iP~|V*4A|T@4+J?QilD#Wu11EncG7 zHnzXbOBCD1_IG%RV*A+sE&@{MSZsd}`6zTOw!hD76+6ZDPkDD@=h*%k?@sIz+ds#d zTF|lB{smSwbS$=ii4(P;W3l}!UZU6|wttOX)X=fm{x58zhK|MdZ?K0NIu_f%#bH{| zvDp3{&eDR8#rE%UlooU>w*P>Ww4h_L{YPx1hK|MdpUClnvHfRkqlS*f_FqW$!Lj{U z3|6w4A+fD4d4rC{_W$6u4d_^G|Ba7wcx?ZjLFkCs#tFabu)UG7jdOiR1C5GpoaUNATM z#P%$GX7R$<#(BN}i9c^qY~#G%9|J9pZJgJu4y0KU+c>ZHhd@hX8|U?YA81)@l1I+$Mzb1;_ZgmUaL>M-5A?A3HamquWgELoCN$9(B|02slOiv+7jD1k@r17TVoq1 z^1ckTEw*tY?@K`2V;d*(z6)qaY~w^;b>P*`*gn?4c70cDA8%m0zB{&0H_+JZiS0A$ z)>4RCY@b!vmf{|a*gmK3ErqDX_W1@5Ee^ysu9{It+#QVVi|R5{oU|R=m(*>hxCbM) zFRSZJ|6k@vY~yU+{{wV1wsGd}L!e`^jWc)e109cToVj}!=tOMe%-uf$os4aqxvLJS zIu+YEbN6>Zr(+vu?*0boOl;%KU3K)!+1SRJyXt_dbFqyxcYnVBiOl)f?hduO2Y3NQ z1-t`zQN!DSmtuvb;5oi~81SBkhXC(`^Z4`t-~$c!13uJnAK;_d9)>UM0er0C zZotMoua*BAU{ejh3fL@fkHB}o4A@-5F9Ej5+avMm7XVvo_<6uqd3zK-{VZT>4L<|e zCU1|!r=I|9tKr81+vV-?`1CEn_8NW+u!Dvl1?-sT?e!l9?4;qFfSon`5MY-azY~WPKtaA5}9{O;JcF zsj>_(B=0mqr~s+VJ5SRV4$C{w&=wBQJI}JpjL19hq&XUyciu&FG%D}BNOLqg@4N!C zXES5+&U;v8#^#+@S!KrMoe$6ojn6x;(F#q-JFn9UP0TxQ&(6Yg%6Y1zG@2Cu$BfBkz2?v7sr@Od_S3v+~X-8XJ^m&dxiZY-~`P zIfqD{Ry#NEe5$eGuR!yN{sJ^V@8E7|wF(#H9bB#c2mHJj=3V@}T?dN}7BBA>>HZey z-GuIMN#0HA{+8z565OAWS(bOpbr+Yhs~_m{yjy1lU6FU2u!644yHB!$uFAVlp@JHj z)p_?Fb@vOf8u$%s^6qom>gC<%wbjeJFKDZmcVA*T-H>n`qEy^G(u zDet})P6&1{@4gR*#>4LA-S=aIf|1#pcRx^fztV_nOJVu)?gv>rx98mtp>`UX9eMZ7 zx{I6CRjuBccRz+*Q`yX}y!#e5O&OWpdH3zQi+fwupSdUReu|!FZ{GbEdY*lG_cPd- zkj?DRyPw1UsBGpy-u(hS&%wO=CG3gHW)9`uuh8=x&bwbjam{9q&}xzm3>En>n6$zk?DB-bsw{39$h$v6k%iIAyFW&ah0)8qKS5G~TL$v(eGmv?`Lm;&}L@BSPq1?*kk{RKh_*t@*@OJo$VcX{_$h$vw1^6syZP{7{h z-QOaXfW6DRze6gK&D_bmzegwmdzW|rfNT`@F7N&k(J1U)-u(+oF6>?2{VOUi>|Ngd zZxmeEyS)29sJF0pdG~K9x3G5w_wV$)O$+Wn=y{tJ+<)?ZfaV3aQQr#CqTu2dge_oh z%Yutr5HVFOU>f{R-a)&aFCxUKbF0Bs9y`vz_|X;*MNG{6`AzfAjr+ex4M z-=W~b1uej59Sbg8&|IKS1s5)8Hc;n+i#rWw0(B|4@I%vqx)xmAX`oK0?pAPdr@>^P z?gbYfNgXKKqu|0LjR)#ka0lr70eTf&I3wk+dKX;yp`k#13NHMR@>hKeE^a6o0MxJG z;)a5LK>Z6YZYbyjG@#((hJs!|0}C#0DChw+sNljkbpsk)aN(P}01YX)@J*e7h8A4- zrVc>E3NCz8JD}kOcf$YPC{S=G{_l+f1s7gQDaojU3orFgpwR^vZt1^)#uQw*C8ZT( z3obm;AA!adTzI741C1}Z3$^E(P;eJ%&o!~&F4mrFQo)5=`We1Ax!}SrDbF>f;KKX- z0BCB#h4=X$(6oXJ@ADm?=>-?w=UYHC3NF0QH-Kgq+zr}k%__JXwbPniaN&o(f`2=w z;BMAVYi_~CEeK!0XY&f~R_(Or7u;>yX)P$YxCKGoEwHfQ?$AzaQNhJ62+C>;Zabc@x}y#Lui)Z5|E~h=#8cG=?(ZtNGxah1y9@3d zb-4Z$nLT)dP$A`0_G+kn%04_Ve7YBKzlO?@9MDiXl7j_z8NRR+@Q{W(01s=p9q>rO zU5PJj20U7DR{?GWJcg$axE}C09zWn(z!Ms-0XzvR;L}xrr@#fk6@aHf2Eb*2XEa<2 znLb0O<4czd zUX6|Ll>)X9uE8f)3tkg!r-cX>yeCl?yv+52_f*}Rseaom{Gw8+8wKwf<_b3p-m_2* z$YH^I4m;Sq%zv=v4GRO$*Su=zWF(P?w_jd77QBMehqVJKc)j7io677righ z?DQylUuN#pv*>-jeja~vucG%2TxE_9xafV8Ep?xw_bs;6eT&|=*;4l_df%Z3=wI}{ z%a(dT(fb}->VZY?2P_YRir&xJB@ZrozhI>wQuKbwE_rCt`xU$7VMXtE?1_gLz2CDZ z9#QoEz@B(y(fcFgjZsDKPb~GLi{77E>c+)r;Vzx-K+}sJ zDvMI?8AT8EMCrrKqKA5-eBrF3hkBxX;q0Qcm52txagq|SGvBW=%E5BU0+)CP=S66w5;f% z0{s`z@}h?d^ednhMGqC|7eFhE9%{@_fL0Yf)R-RutuA_~G5?OWx~Aw&1DEdtuGLU= zXX}bwg0}$IYpA-j4H~NMY-5qj^BUkL4X*-jE^-N~Ms16RmjJgGxh7SkwoSwHfZH`x zJ==~V7u6ZSof@77+*RZ%Q|;Ss4ORQLM?=-V?JaT%9|hc};Ss?7MXqV3kOwq82zXFK z)zlp-dJFM4R$_TrLnW3+G~5MvwCJg8Qj}O8(@=@!@uH_LXxR#QLc=Y9CySmsU4H}M zDGilwp4M<3;F+Sg9A8knc~-;Kfai*yy69yk;CT&|gkC6m>Xd#Zp%*n&5_+lVLqdJ^ zJ{z>K=;xU_T`BqnuBWR-zsU7;t>`CQPuGin%Jp=k=$Du}-7NZLrcSqteuXRScG0hL zh21IoHLkF`MeLPS0ph))--Ijde$juDE9^nhe~L4SheiJ#a9B{gqW?5q_2Z)d3>RNx z;y;Uc19OYSe~#T>v&4U%-Cy&>e<#NSEfW7-91pZi{1-VMXqEUcF-mWp`0wU;piSbx zOx0|g_^(hk+a>;csG98)|5d7Hhs1v`RkLH_zmKZfDe>P=)$E-3Xe#i((IxR;W7^m? z@n2`!*e&tjVA|L{@jpb>?2-6yQZ;)f{zoa6y%PT|#*V!c|7+}c`Xv6>(dfYXCH}V> z8&nI|k4P=w{)zwX#s;-~2N3-YXkg-FSfFg#AR@Jp2Pgh_Rd);Pm-ydnY)}h%D3OX( zh7qYHJv{MotGZg!BZySEGLlFw?oo;VgT@B6xJMJIm}Lx+TIORD|A&nY%E*l)`YF(O zB4z0&B>umvJ28#S#3TTn0taf6%}h#y0)JeSlc2~S*OVkk_~V+I1Sx-9(~_Wqy<^$T z^dzXVk)DwRH8#>Slc3HV$5oC5_|@30&|Nb_$;==qlry|&#~#; zo&=w#nb?s8U!a-TnFL>?nb?&CUxJy)W_BmRml?h9Ndn!5?oEQPGJ4;a1Yg7a1I=p^ z{4079G_OhUZ_MBiCc)R4!5>P3Z!m*DoCM!w27e?8zJ-P)n>m^U-$p-zmNf~!!$jtI z5`34b{D~y^9-0xftV!?#roN|=06m(b&FLgSkEY0SCJE4^sm%3k5}-#@PWD_9pfgkX z>iHxIcrvX~AHb5QH0IisckUFLTTCo;Dozh^1HVB>5V5K$) zUD9BcHV9qQ0PUI5m2PQ(_DtzY_cTCzrgWu88lXK>YSJ?e(4HwZ>6Hd(&yS;R~v9nWCX8 zz*E!UK0aLzI88%UfTyRyBYe6DaE68p0cUEs0B}|sJjNI10nXNNF5sLrXhawEe!#gJ zs{C}GhVKQOp9W3w1$9B?0u5D^x-boz;nQ~mF4FKNNcG}0gj9zPT5-r<8s<5_U7Cgk z`uJsOSfr0%o`wm1{E9S8>Ely%?CJgm9q~VjCdTva^rzpOg((oM=-_2?GG{tvI8a~4WXloiiON+lP4WDDyw>=G? zXP>tt4PRiNw=)gj$v$sa8orCVygLnFq%QAC!6q%{4qng^J(}~W^WhL@Mp~4E~eqn znY~>~!(T9ayPSrZI*f8vc!s`*s@slk4hE8lrLeH!$OF8ny!Cl)JvCp>o&v)37x@RqpzMhRR(()KIzW zM`@_8D^l+IaT=;ii_~zWu|)VIz^0|J9X?gvK(kWV9`FZ%%{BZ!U<(bu2iQ`>?*g_e zg&pwSZv(d0@LPawG*lP&w$<<(fbB}5x+qEgE!u1NuYesi{2E|K4b{k`Qz=yUDSa8R zvxaJ9(xnut3zpQ#q^pK%WYSH;&jEHXgQoi1aN?c9|jy)3VYxSYLGHW!w&)uE`>eu>Fa<) zN?|WRHAoq%q0)q5rBK~grG#L(hOc6sk0?c0=aD*vA)6Ulit;qKqe_w90W!K2=^Y?r zN|D+D;$_B`qRRi?@2HXzmFJEtMRl6m@uf)Z1u-)dO3{<`NOdPFpO{#R-a)H2sT4g; zt2Vh5JwvNDr4&6&t2VV1Jx8lHtrR^^t2Vt9y+ErrqZGZuJYZ%idX-`^s}#MT8Zo;R zeSjJnYeO3{a@5sORFN2n1? zO3_ED5lc(a$EXp@O3_=?h~=f|ZED1dQuJ|Z#L80i32MZuQuIk`#OhM?DQd);QuJxI zHfu}Kw`sN3m7?!3@n2txzDujMp%i_OR%>G^`aZ4Jrc(3+TCL5c=!djgTT0Q-81HW_ zML%b}zpWJgg7N zg0im^{S`W5WcHV$zt%Cu^C`W7XT^F#Y zh7Mpa4Q;^Qw6Gk%#$I+&IewkJ z?Ba6#27B2h<@kf#a$jDqn=IW`16c)|1q2<@n3UTeF$%<@hUj(=wacQI5aLk?PKJtXtS!<@oE&#dnwE zZ(x{)sckv_CMT+U%kj53QQcRLzs-s2{&M^sO74Mj{9Q<{mpNFDzgLfyF^H89_%MF| zp>q5Knz+N|_=hxcN6PWPW15B*xE%i&-4$Bka{LoCSD4zC{c3s1>fH%tgi=GC&siCrMx5}}yE5`tD zYpCMSJLOoJjRSypHQWz)uN*70u@~@uIqn0f`m6^U?gD&Rj{D-%9e|HC+z$A-9QVVg zs?Tby5PlJ`X(d*-C4U~vxLGBSWsKb!YM)>8O1^-O8=I0V`63!_Y)Y==6DEPJD*2R2 zVCzc0#3ZmyC12(~khYb41^u^|X;;Zt>v{G6#%r19;`g_&1-MJ8F@EBSYGT+*YGe}w|kvyy+6d0($e z{(aPi-j)0ZI2`Fy$-hoB)VGrVAe*XwmHeBOgZ`ELN7zdZsN_FJ6&P5_zs(kEP$mBf zF8;xl{HNGC4XNZm%{4!?lK(8t(6CDW^IYn~EBWtniH@k`zt1H)vXcJ+m*}WU{y(@f zM_2McVk|qRlK(N6=-5jBCtRZAD*2ytWsa}pf5mQQLM8uehD#GG`Tt_LG^vvR4a23$ zmHcn%c&1eHzoX-sTFL*J{$^Sw|36%Q(<}MEarw=tonNjLs%+e^R0=gV?pG^?I*ZV?N}&mZ3~G6=tcAD~0zkOKq$c^vt1YwV-DX&8h`Gb7)>I=$S){YC+E&T2>2s z=FqBI&@+eD)qyR|`L6*EOJ8_z|0}fz`r~`8Wqv3qRrG z99%8@Cm-jKYT=iBibJb~U-2mps}_FEr#QS?_$?pah-%??e0U?Ph2K-KMpX-c<_?_E z)xzJ@-bM^Es_J3B4K$WW?Wi4BRS#F?!Q+WO0?JLO^0B=RI8npb04Hgvy6wr;LNh#9 z6}wH*@V%ht)M^p*Eb1t2TD4fVs1_53Ycs3Gl;PT}YO%yRFuPi;GE#s>P3BC1KM_ zwfI(JgUVpn5vks8eYJ?~h~EU-K%_S5Y^)Zs9r53QHWB?R&}O2q0d1)ku`y9?*V#&> zBK&RDBDN^1PH=m*h>eLV!rxIXVmqRW@OM^=*pB#Vpj||&PuxxPDWE;o;%D@u-Akkb z{(VI1A@8piKik;wF`xrP>LDMj7O_E5h5m<#-UK>aEq=bS;e$X&h~B`nJX%fgEE9(& z<5)FG84Vn-CMEuWPE?aJ*?O{?RLIs-)uc+co~|Y}iqDy9(uC#pY&Ch3<@H=Od5Tld z^VQ@Xn0k7d3)KW>V*z5>MD4zL0HL^8O`f9{zEn+~rx(6lOO`ocXPAI&1&))rM zlQ)?$+^;4dX2$TKntX&?2p?9Hx0o?JswQtUV|ZLmKF*Axv6g&_9B*1n{)HTGR!crj zjyJC*pCh$f)RNCLH*Q%=zCez*swH2c#c5qjzRE_YO)dEvb*61C`34!?u9ke0jBZ~` zzC}iNs3qSekvrCs|Dwg|R7-wCi_^K5{FWA{OD*{wY1_4y{GMK?TP^tmy-xR9@<%?5 z9<}68d>B1z$)EW!dexG@a0K1Emi(0?=svaNzuA}cttJ1%XVI^g{Eg3|e=YetpT&S$ z@((_XfwknH+y^qKmLO6Y1sV;mCGat7SKp9Yg4xz!prN${L5hlAhSd@TDgA+l*Alp# z-asR22||>fKqG4jLKNkOM%5BHpRPcoYe`q_i^kLvOu5uZXKXF$r5)0^T7oD=jdaG> z66^?3JNPEl672r?JJ7^hg4xzzfF{)v%(ngnG`W@_22x|;DYXRqJAMZ=wU!`qQN!SA zwFINCUjt3AB^Y(75%7#!GC_}OX4Vo6xYVd-RxQCWOG(1)S~6Qt=H}EAjH}e5pIb{X zuKFs_yjp^Bm0IfaYYE0xYN;=%B^Xz!rM|G1U|gk^`l4F0{C{`h)e?-7)b6?^wFILi zwYzRZFg8*HxRtd8W21Kgt*RwE^_vf?YsoG> zlv`6vcI%ulJHDGN(&}zy31{46ig;7f$G@t@N&}zxU29y8@S}l3hfEoZnt0j*cFj#@0 z)e^ivp~h*4Y6;$&_z}=yuu1fR0brBf2Y9rWU^k(99>>5Y;qy3NOSQ!l!i+Y!W`L zOSNRQ@b&-8wPcL&_1r791UnX0)^!!Uf&!|T?piHTuL`Ja?s_dz?*}XayirTkn{5jL zZ)&&z@Ro)ukh@(=rr`^70q!wGhANP2R!`>P)29KOYxoYp78Up}>ljZn=>Up|psCu668mgYBM?G1AFQ}fUr-rKM=~YkE_RTC{Zw*z?(?>(q^YpDJ zYWt?@Zu)7cx|{y>L~Ybmearw2Rg5uE!@Gck>d6LtLG>|%>&a$76=Mw1P&F?@>&X^; zsydco8mf+Ecs<#QPgTbMLa z#<+U28=tC%WPCl@3#ht~2^y*{WMVxzfKT@TPSQ|?8S?K-9)oF3kK>o) z_-#w;X_duxSv{?>*eP_|ZW!CD=_4F0i>Miy3J*?GR>*=ek z)!XXn2Wa!R*VET%^LNzK*V(M?tfz0#@9(Oodfd9Zo_>sVcuzfji=Jq2J$;*=XkR`3 zI6cw+din`^q678xvuwf+*3-|i2|H9zKhGxYa6SDptA%*~6Y7U}62COV59mZa{W>;VV6#g-{RY#(Q}y(lNG`n0>3aIDdU{HI`!s%0 zTcOU>)9)}KJX=q{%PH@2hp8gaC8k>~s>Cg1sx1Ro7&wcCZFZA5Ep8gTD7;H_hr+-3KKpR_6 z|BQ_^*pOUL|H8ME@7B}5qBvkS>Dx z9uo7op2E$12%j}JNwL#)E>P1ZDR#Qf25QzMg~OQ%)VxUwhcg|hMUxZ`XDU$3CMg`w zWS~|}Qe-<5fm%07k?o8JYSScz>rtC;+BQkM>3y~Bnxx2kM&h&fP0}6>Jiw|$lN4^I z2R`fAB!!#l2GprZ3OA#+$aHR!!p(F7>e3{Io9O`5wMmLGmf9lItw}mw545^BN#Sss zo{4Cui(J#xd&@8HdmWP#w zv#0@C9yt+bQ3JC)@*gga24(q;x|d;amfyzD2$GkH25>ias3Lb`hbgj*4bMa$SjI*u zvW$()WYsSNj#6Yr8=c8(z@xV@imYg365;0BKL(-b+;YV<*d4e^u^Vu8mSCII61YXN1#qikbKtfte-ZaK18!Gr3f!UC1h_NHvmvSx zaF=33;BLhRz&%->4N>)gdll;f_bJvvEZd(M#4>XeHYCF$lbKtkj6Rr|N>WB2%1mBd zIEOQ1qz!Z=Ggjim(aaPiJ{-$TBJtsPW>Sd{Co)q+Kd55a$;@O$GZFs-!{gd(_#US+ z6C`Au&P4jI~C%uE#t zCzmqwD+wo;GgDP6>noY5CgJ32W~xg#xt5u`B%J(|nR}(OzMh%;WQ<=X3Ov z3hKIK9+iT+9+}6apsr8macLSgAoGM&)(y!#DV232GEYfm-I&bNk_a>*^Nb_{P02hf zi9j%g#R{V{!7AtTQaXm z_-{w%RSEy?$-FL6zXO>!q@UE0%e z=iHslpXBlOAoHO--kxMWlE>SNjE*IGllfR4Zyz#$k#=8SGM`AhuOFFDWj@iLOl_G@ z3?TEFJl%n0K9`3&h|HHVpBPN$E9s34A@hwq!J%ZnlljCjGT(~_b2#C+6)D6=kU`kv zU^0>n!d`RGC^8K-gp4MGu-6dR#*jg9`W7^n42pC1OpYVdNrS|XWV)#1VmuiX=NuX) zkbxQXW6(r02wm@kCXqpydKWaA4BQgzrEy0WlnXcDINk&S3C%uL9)*G z17|970z6BRoAa~D@P4G-z&VQCoS#dw#yJ6=r^pHLe8nxm1tjZ#6L6s-r^SmDIW1mH zh8+s)fJ+oP$}A-_6IVI3EK^(sTuz2JEO0zop~&%MB^lnZ!0}`i8Q!J9L1eY!0^k}& zjwfpsIi9Q|GavVIJXx>E@nnM{$CHhUTtsdnvk3QcJlU+s@nnnQWZ+gZi*W+kt4@$GAnVF!^Iv&4i|gLtin|e7yA@BT2qHfN)Z zV(U6vl2L3uXK#~HY<*`di;ts$vpSP)=XKToWq>Zx=%7mn?vk!^BwsZDj z>CU%z_E8y?ba3`D8I^Q&_Hh}NbaM8IB3E9WoqbZg8eN=yO1v6foqbvcxZRw6R`j*I zv%e92?cwZmV$ta7?DJyL=;iE7;>_sn?8{PT^>OwUDX;oE`>K>z{hX~O4Fh$l2dXD|E24Z%Qk4h_ki#<9p3=_IpX>XFChE=GNyNXHl;F6*Sjb6e*ml&vO<92`A|DorOlf1zO;2cin)z z&{^p5i@3JP*-`9IgVs6AJ2Y7rmnib2a;cM*&APZuk#%voBDV`xI9c_qiz^j5`(EYj zRQzL{XRlUV4qT(i61i59C32m!oQkkSu2)C32^;EXXW|yA(Ok-mS>GxW`#mVa~JnDsrB^Pm%NN z{mw4H4Xl<26j?0~DsrBE$XT|Gv05Hh90EMzEGssvXC21EXxKy^KTgF&ErLIXkdg$95cc>dP?Kn;cZf*Se4-5d!}E(`SlH4)-bLsMV4r##1_ zhGs&%%j5@NxR*l%%4H!QKeX_L2g-A8K`n*2gl;9oJ1P@_E864XYh1%7>PeS%+K z!XMFwv-x~-iySD|-eYW85m!3+q>>yc*U=|=*;w4kCq|qyoqb|uV{sRs6yPSVSk~1i zNikt7Q^L+AJ|v@?Pclh_yZeMB5$@p=Cy8)RpLj`xd-)`YKKJ%X6n*aFlaeIDeSLD9 zB*OiCa=Ykrf1lhT`aHlVRU{D}=#yVbB0R_^{~`K3*e7?2J`eFpRnh06KB*@9Jj^F| zN&Y+BCwGfJkMPMoqR%6Ja<8<%M)~AENrXrHkJjqynh5$dr%sVM`*aXxuS65$_x zqRzSTK2hh~1fQsLZlX^f7oncy6Lro__Q}(t&r^KzjOg=JpFAu2Jk2LB$Y5%^PhJ#R zp5c?1M3!gz<9g*C5K6zgRcD_$O7JJ(QpL`;7 zzlA=jjrB-|61Y|I1aO;A*ywi*xLxrmaEIa%;7*^g7486Vmm(+DyM59gS2=~=qqqyW zSCQMv`+UM)x$VIHikw&uA}7{|6*+($@kuA#z)|C<;yU0lMLyZ) zxKHr{rm9~je0r-y>61RKBvJa5PxG=aPW#lzx;W!gi*-@4?5s}<#gu=nl=mOpk0*Q1 zr$te)^FGaFsa)_W$x^xKQz!BIl23!Inae(nQtV#wX-RsgSABXLY9^Rmd|DaX){xZs z^bXksbKR#^#6MXc(mUn-uM^U$^8VKiX*In6u=jD_q!E0i@1 z={?1?FaDdnBe+pW@0VA(CZ($}QV-8rPMOCr`Kq;E(f)-|N>O19N4r0+>t+dZTo$;0Xq(!aKW47 z^2+uKsT$~dhx8lCh5Ll`Z}?@S{})ocPAt*=LW)T;_i6fvlsBGazyXRy;J_dcHvtY( zEC2^9THuf%4?YhZs#pm)ETp_<{|z`?@n3->6n_aE8B$)e{{kGPSP?i{@n+zdkn)=S zXW&@HUjWA`RsjB}cq4FpNIT=+e*#WW{5f!<;y(f>g_IqlHvlIq{sVA|B1_5Ckaoun zEE>}kSv00AUIoqwX%F1MqA^qP5^z>Xd*dpL#%x6vjX8=e8goP12RE>2%u{61n6Jp9 zu|V-SaAA>kz#qsDoM*^Mac5f zGFch20wM(rG9h#2Ii9nx4w)~{aYJBD$U=FJw_2NwIzvY6G=UDZ6kdywS2osUq~(AKGK&`%Xf(MwLH*{k-m`!+9}evlI?bm^qo}j zT_SxiPqu5MzvIbb_7Mr`Kxa_*NSGpVve_dN+G*@{=^5$&HLX`9G}buT>>a6ro)y|B z5{fo%w)Kq!#cKxY7YXHC6Hxz1XuCB64TyvpQ+?3DNSHCPS9nk)lyvMB9vlfXrtd*R zB4M(`?YW_mFj@Kwd2GcHnBo#y-)2~9qp=8TVoQj(`R6C$DA$J3mNk$P&OIVn;vb`~pW=15;vDi;DGtwZP1kH+srXf#) zW=Fzoizj$RFxz?@G%pfnTaSX~N5X82&2bANp}?&PS{P}xPW2W=8j}-u z$Kpt6Lb4ZUNu+V=#aS8&)3EBewk#5+VO2rPBVh*iYtV{Fn1NLRt&B7|C&#d_ii81H$=h=tbl79BhAU-yhiwB zBF)Xohd^wOG%qI~0 zp?8GsZILjAy97EEXQFMssDW?_d0?#Pc0iKN_B7X;-Q~VxyUh!|h3sH3GTi`{-Z-AGg z$o*Hq%ZmRCyb?v*zW`oU!O?eJUcQOf5Vs(mHn)Y{trq6+SdR8 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_wdt.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_wdt.crf new file mode 100644 index 0000000000000000000000000000000000000000..3a4de8b1e180e247f5f3a19b0e90a7b4e9efb2c3 GIT binary patch literal 198542 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/main.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/main.crf new file mode 100644 index 0000000000000000000000000000000000000000..a8c359222e44e3bf26f1a9f58079099a849adef6 GIT binary patch literal 226426 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�#l6a+D$h~sWc2z5yv5~ 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

~>)9IW>X~<`+i*H^ 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/mem.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/mem.crf new file mode 100644 index 0000000000000000000000000000000000000000..4fbb460e978339a64627c6bcb7267bee5366c58b GIT binary patch literal 29576 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 RhI6>bd%tJlf91xy{|`KgY_tFX literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/scheduler.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/scheduler.crf new file mode 100644 index 0000000000000000000000000000000000000000..7711ed7735b79dbdbe33ed4305f98d788f2f5152 GIT binary patch literal 26994 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 CR8pk? literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/system_target.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/system_target.crf new file mode 100644 index 0000000000000000000000000000000000000000..31be7c1fb4bd969471f08e61e29c4fc48d946095 GIT binary patch literal 198384 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

kb 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.build_log.htm b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.build_log.htm new file mode 100644 index 0000000000..d530225ed6 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.build_log.htm @@ -0,0 +1,81 @@ + + +

+

µVision Build Log

+

Tool Versions:

+IDE-Version: ¦ÌVision V5.29.0.0 +Copyright (C) 2019 ARM Ltd and ARM Germany GmbH. All rights reserved. +License Information: Z Z, VANGO, LIC=HF82M-XE05D-HREXN-YUSPE-IWFZX-WW2UF + +Tool Versions: +Toolchain: MDK-ARM Professional Version: 5.29.0.0 +Toolchain Path: C:\Keil_v5\ARM\ARMCC\Bin +C Compiler: Armcc.exe V5.06 update 6 (build 750) +Assembler: Armasm.exe V5.06 update 6 (build 750) +Linker/Locator: ArmLink.exe V5.06 update 6 (build 750) +Library Manager: ArmAr.exe V5.06 update 6 (build 750) +Hex Converter: FromElf.exe V5.06 update 6 (build 750) +CPU DLL: SARMCM3.DLL V5.29.0.0 +Dialog DLL: DARMCM1.DLL V1.19.2.0 +Target DLL: CMSIS_AGDI.dll V1.32.0.0 +Dialog DLL: TARMCM1.DLL V1.14.1.0 + +

Project:

+D:\10IC\02IC_SPVD\DriveLibrary\trunk\Project\Puma_Series\PumaA\V85X3P_Lib_V1.1\Project_RT\template\template\MDK-ARM\template.uvprojx +Project File Date: 05/12/2020 + +

Output:

+*** Using Compiler 'V5.06 update 6 (build 750)', folder: 'C:\Keil_v5\ARM\ARMCC\Bin' +Build target 'template' +".\Objects\template.axf" - 0 Error(s), 0 Warning(s). + +

Software Packages used:

+ +Package Vendor: ARM + http://www.keil.com/pack/ARM.CMSIS.5.6.0.pack + ARM.CMSIS.5.6.0 + CMSIS (Cortex Microcontroller Software Interface Standard) + * Component: CORE Version: 5.3.0 + +Package Vendor: RealThread + https://www.rt-thread.org/download/mdk/RealThread.RT-Thread.3.1.3.pack + RealThread.RT-Thread.3.1.3 + RT-Thread Software Components + * Component: kernel Version: 3.1.3 + +Package Vendor: Vango + + Vango.V85X3P.1.1.0 + V85X3P ARM Cortex-M0 Device Family Pack + +

Collection of Component include folders:

+ .\RTE\RTOS + .\RTE\_template + C:\Keil_v5\ARM\PACK\ARM\CMSIS\5.6.0\CMSIS\Core\Include + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\include + C:\Keil_v5\ARM\PACK\Vango\V85X3P\1.1.0\Device\Include + +

Collection of Component Files used:

+ + * Component: ARM::CMSIS:CORE:5.3.0 + + * Component: RealThread.RT-Thread::RTOS:kernel:3.1.3 + Include file: bsp\rtconfig.h + Source file: bsp\board.c + Source file: src\clock.c + Source file: src\components.c + Source file: src\idle.c + Source file: src\ipc.c + Source file: src\irq.c + Source file: src\kservice.c + Source file: src\mem.c + Source file: src\object.c + Source file: src\scheduler.c + Source file: src\thread.c + Source file: src\timer.c + Source file: libcpu\arm\cortex-m0\cpuport.c + Source file: libcpu\arm\cortex-m0\context_rvds.S +Build Time Elapsed: 00:00:05 +
+ + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.lnp b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.lnp new file mode 100644 index 0000000000..88003c5b4b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.lnp @@ -0,0 +1,47 @@ +--cpu Cortex-M0 +".\objects\main.o" +".\objects\target_isr.o" +".\objects\v_stdio.o" +".\objects\startup_target.o" +".\objects\system_target.o" +".\objects\lib_adc.o" +".\objects\lib_adc_tiny.o" +".\objects\lib_ana.o" +".\objects\lib_clk.o" +".\objects\lib_crypt.o" +".\objects\lib_dma.o" +".\objects\lib_flash.o" +".\objects\lib_gpio.o" +".\objects\lib_i2c.o" +".\objects\lib_iso7816.o" +".\objects\lib_lcd.o" +".\objects\lib_misc.o" +".\objects\lib_pmu.o" +".\objects\lib_pwm.o" +".\objects\lib_rtc.o" +".\objects\lib_spi.o" +".\objects\lib_tmr.o" +".\objects\lib_u32k.o" +".\objects\lib_uart.o" +".\objects\lib_version.o" +".\objects\lib_wdt.o" +".\objects\lib_cmp.o" +".\objects\lib_coderam.o" +".\objects\lib_cortex.o" +".\objects\lib_loadnvr.o" +".\objects\context_rvds.o" +".\objects\cpuport.o" +".\objects\clock.o" +".\objects\components.o" +".\objects\idle.o" +".\objects\ipc.o" +".\objects\irq.o" +".\objects\kservice.o" +".\objects\mem.o" +".\objects\object.o" +".\objects\scheduler.o" +".\objects\thread.o" +".\objects\timer.o" +".\objects\board.o" +--library_type=microlib --strict --scatter ".\Objects\template.sct" +--summary_stderr --info summarysizes -o .\Objects\template.axf \ No newline at end of file diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.sct b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.sct new file mode 100644 index 0000000000..4504d736c7 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/template.sct @@ -0,0 +1,17 @@ +; ************************************************************* +; *** Scatter-Loading Description File generated by uVision *** +; ************************************************************* + +LR_IROM1 0x00000000 0x00080000 { ; load region size_region + ER_IROM1 0x00000000 0x00080000 { ; load address = execution address + *.o (RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + .ANY (+XO) + } + RW_IRAM1 0x20000000 0x00010000 { ; RW data + lib_CodeRAM.o (+RO +ZI +RW) + .ANY (+RW +ZI) + } +} + diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/thread.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/thread.crf new file mode 100644 index 0000000000000000000000000000000000000000..10cbb893044626a432482e471190f991a881046c GIT binary patch literal 29810 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 UM>l!!7@*?4KeX_FHOkum4+KyW(f|Me literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/timer.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/timer.crf new file mode 100644 index 0000000000000000000000000000000000000000..4905a0fe4a08f73d46c25cf7626867eedbe98c4e GIT binary patch literal 28736 zcmcJ234Bzw_J5Ll(V5nL-Eh^V-; zD7YaCiXeg@f+D!@JJL~5+z=HvL=cz%_at}jooVNxzxV(D--nxiZ*r2HBqt~5oZRt! z(2g;|nX^u^|uN7qzFQpa}j`aC91{jXcBOKmIg|6V%IWa6~{nz@k|gF8>u zYSs^8{N(>-W3g!Euy{>fB-*#qZ)s^u4_3?=XRKp5Tv8S;8(b2~84w;E4zt%<_Hm24 zP?1}bJ8+OL{iUT7O0kz%yKp!+H;h$h$G7x!Yjn~QT~tt9R2V8OD-923OImulWnFU% zO7lv?RS{ah@JMX4NR&-&>FpMG_qix8$txE_no6Qw!%d4meWrFrLt*aIzH-GcTgD9kAc>DJC{+276XiR|*yyuv}@T%X^( z!n`upBdte6Q(lTb3v%)b*{>~q+!ppm3zU_dywWmg5!3ruX>1J$^)DY3)@?6ND==*j zE-D(rZujTOW2`K%fJRz0u#DZ+vaj3gUMMyN?#j??vAUK6-12=|m#45bCBw){Lj^g- zgNsT+tY_*nx^si^<@YZ-mo3f2cPOWr&CAqeK~8>txFA%(vNAM@bt^5(53xtmYPz}o z%Lken?BRDvQfQ`-#Ph0_?ieWvUB{R3WBwQ9MDab1-WwU+Z z1%+;t6|{7AXD*1moKh@w8Qavdmz%jqk}#ZKGzjBKU3|k-VNn^@7XQ#oNqKP@dopb; zl8c{|5)8B~bZ!}&>35-b;DFFTy}?#$!KG2O4~HuoYnx*9uwY9Umm>!pogFGE%_}No z*ZH%A+|u&?$$~r6#J?nTcAlosNnH(AJX}*BKQSC6J1`N6MnQRF zT6I#b$ULM~X5}bk9-fw2U0X2%nWv^@#%eC1>b=tXfsRDp%(T3Q>T2Z8Zt3WXK{ght ztfV}|#%Q4?Ro)I+19S3ALu`mIT(p*u%@eiy`yowUC?9i5T6T4t0?aBEtVt6jt$r!{ z41Io(l;Zr*C%-3?0uyPD7AG7w=YM!4ThOw%o7>q`$j|HVRjJi`nugFJ94;*zkW(@U zyE8YxlnwU>hvNoy3QJjkOrX&KLF|y)iuw^y3&*$Y=Vo>bhs)4F2%DLtH;2;Wk7Z4$ zbz(2#7_~-MgllVJab~sb$yAR%oY@0qI9$=lHe!CwdS@qTxX%KzV)2S-oSoCs!5vKi zd9ZL;k!Fg9V4AONXdH`8O9vzM*-4KpH#uT3e2Kr3XhM^}n$~KhzKWITzNrD6wu1`G zb5XIQUlE638L5E>{myB*3vpTvU?2N*lu22WFkG`VS^B7CXQ$De6UrH)rQ6V$JziT= zA7MZH%dOj@W3!-WKsnU-uGA(l=f!#KTCig#F<4Vy6AxF{LvoKx8A?H^o(XJ3?~ta` zF&sL#xCq+!3}04scK@QBk^#xWI$wq9!eS`5WZ6vrNYP~jp!ae^$4i79Z)XS12IH2Vp?yUF9NI+&wPAMz& z2WH65&M8SYG2h=H1?VBSz?+Uz-!Mooaa+B@XB;aRIvZwLI6qW4sBAEkX+;GE;o_V@ zA#?if$XHa6Q#ynNG8XmED=TH(9|8Ir5-KSS!3=;cP?XDF_ebED4J-+T*hqi1{SsKC zy4pB@OAz}oloI}Sq@0qHq7vv?PmU;$%%h_6GBzNcbYOXYK07UKtAs)Y#braWRZ?w$ zP+<|-Eqmj|< zGO*+B(PYgy+Xr2n=JrHp%x~{#ulkjyz0ql>rJ;wy*rZ7XhaIwUNA$G zt&p*n)>%PCO>O^%F>FN3!5-1RZHOYVSjC9QSxu3q2s?eZ%|+@4M=BcG=)WK;hHb^p z+uckJ(4HTAZg=A=BS#fp-EJnlprNX%Ho_L}j-T@SQS}WM*TV|kO+%&eig-;WER+3Q zne67vM@@ZoL$nU%4fU*rB&`og<8)UV&%!=2vNxT#Z!q$rMKDSQok42*1!UpDYw_G* zS_-o>$ngv3Lea4e7>v;aBs<2v)B9#XCENO=*mG$Pw@(45ITii} zgJL<2TUUxO3H$`O;N(k_M3FD;`h#TpuyEQb@0L)AXeeA2&yx2mm6n$lhY*h$m8r0# zys!`!Bdg8SXn$A-L)bx?igNRd;LGfjwsl-q5Y(XH3+$0KX=hGqu^A>_znG3VT9L;NZ79GtoQ%#@EAkvEQa3XSZvf?`H@s>SYv0uZjSR?C1B-$54 zJJ>?eu^4=EXRP5VJL5oDJxNLj4jFvyimIw8dzbR{)>y;ce64&}P|F=jD^ttSXhW2d ztCeJ0qKP=mgYS^c=~USirCl6ujMg+nYvN;BJIH6UbWiQnctsa@I)4psU*A+WJQ5Ap zRm4UiFp}KB;9l3!+q5q>WRlAcQCJ2jf(xt5_M^>B({%V6C<%Sl;Odx_Sf1pVvny*O z74=PxOlUV>VE%Ixj@bBZw$DLpqKWFD@nh*!V_O^v7|n`h^zneBPSxyEE0mX18;cyufe1n(7{$6{LXAjM zOgC9tSj1+bz&B588Y`0)WSOUcH+l-VA5F8CxQ)C+3{f=r(_vSvH>8=(G0!@ilWeEg zCa;}?NO<%Q? zf|YHO?>Db^A&Gb7aI|7Bpa-PL|Zfb6_;B6 z_x6VHRdQ$DLlWW=K{msPF2y2owkPc%H`}2D%FUmGgV9XpSG-$tGGmxgh?YC2U!bZP zKDi<;+n9pSwSJ~4AbZ!yXhEp76u#zJxrWkmTcPqFMoaCp*{&I`(Q|Q~6#f&(^bo@H+~$f#QcbWAlk<5qQ7%Y*t!EEm zQ=8emSxD{T-;|*#BWJAMt9v^&H81tG9~62AS?*{irpc{gs+tx6v6SSz+(RwR&M?#1!L{sP9^HLJ zcV`AV9SIri(cMq`U^>LltXwB7yy-Z(5w?4z4^WfSwaV7kvPWvfW4>?odL^C^-{m_M zZ3-y_|J!@*?Y!l)n_NF0wH)lus( zQZKQwF?@^Qo}$oFP-b7lDm$E_C9ZYH;DMP6d!vHu>yC(!PV+tFv$39s_dq2(U?>pG zY~2jrHHC@r9D=zt&61vSo7D{bo}sOtE-fvQOIsCz-8T{;zQ5{cAGdB7zivfsZ9^r# zzhG5=x35}wWbC92)EOqHCg#qoI~4;mRLj5=&8fDh2h)(!rV8&_{)+UNJ`IvN^xR~G0B)n4F z;Qwe#MyAmTP!y&%Nuk?nCB7DlMc9!o4m-RfHDT4o5Y$bbc1>9wZKw;^)zsqjjKJim zVr#MEO>1N%c&sA$Wq8fSv1Q78wJvwbNxBfk<>$A`Wb?3H|Buz zytA8?;!^#QIthrtDtb3Ur=zU{piT`xbikR|g65#SEeAbZN-``ArMp@0{Qt&W+b(Hk zuxD@jd+h1`eREsdR3&AGV($OewmKe2d2Bc!X%3gJA#A@X)A6QX=^F8- zR#HX+K{jd>hP^;Y!K}eP-ptaGrYD(XV6`eR zO^vOI)K;OP*6Wjj6wOqO#ivi{$~8lOb%ye&4BYL0vt<}+a<|RP&{zg?*BQnYyk`P= zlAnQ7L<^drUiZl?^cmWxO@_VA?(>(_-Mp!1ZgQF2Fh_Dbp3{)-&1}^TXWExY zvpzf@1VL&Yqh3QZp0;yZFKFrptQ&6Db3vEpPqR`WZh`ufuh2TaE-!DOa&33AyS?K8- z11188PnWU8^l7V|4IeU0r{0@s8f0|L?XHvG-SDPr+-A4l8Xh->WfbdnCEAVQ6iMAF zqhs}MtM{~S)iZKD22;nLWM*>fYOR@R+f168Pj=rkjV+QE2wi;xd!7W^L}l={BaI3t zk4v?}KeWS`b5pfF4pb97rTb#kzJpF!tr^{IwZdPiFxA8T8GggzO&@-A!^XD+-8!NY z-`n9uYdi#)f`r|JXn!zBbPCH*jSPU)6a!8Q<7#Z)>}xElE6D zUs>14u1TrXwuw|@D;AGZg&nPj+=_-S7IxCmwEzo}X3yAyB|^mm(>4a$t*6|{>6KbF zTLoYAyOgf=*6HAGodDV(f|LA>gPeZ2vGO(&-jCLwf||`n)+4g;FZJj&JH%TAvm??N ziB(qASF`WSR;5e zUw_gqF*-BFMa89%%UnVrWyE?as2-0D3W$#nl&`Wusu9k z)~-`ude_C~%74GK_;Px$RR5YxJyxYL9?itKOOj;V+D$VqmxUARTDkxlU``V@3O-$&YQ;L&qd!GH3@q7+w#9A(xa&38smhE_Wry-;Sp zgP?nYnpiaK1{d%x1bxzHKJB0zh??j{uvuf32(~A`?b&H(Cqof$L;B6f9XstT{Z$~` zueQI?@_u%PAE4oTouRGQ-M5M~cc+s2)vFO0jc>2Bx_3(B-rcd<{WQ)A-P<5ohm%ylTk!_=ee3xm)0d*~v5RZsxRD&xin`Sx(y7B} z@J|}|Zn`_zWw*DhVbZ$u=N_MtdPfxIrz1@amQ^cbcmGm0}k8iDlj`iQ&Xh>>sfHnyo5GKxmp9uAI7rPVUbCE{+(AwQ7 zh}5;3GoK>4@SXihhHm^iEs}wrnqt^k6g&P2D#4r=U7*476H9$66z3J{k4}%n0bokI z>eAf&oDv)w$>OaTyD6sdH4UH<(JRDsMy38{C8emTUKd_PpB|h7b3EI>E2Gb55U#@g zq&9@;e$u_b)K{L`o%x0Imo84ZtET%+T^d4V+pC;l~b-}bm>6ak@{nt zZ9?iC=H+a6bN;|AnlB+bkU?vj&`N`mf1zv7lkPp^`%qcQEYC^(2I?)DnR2&CzmGZG ze6cJ|e506h^zS?7NvZD_;}G8L>^^W|=1Eb5Z&40#dGW8h^p{7e_g(m*EreF{wMaUK zUp>#{@|urj7A5)p3G(KC=HU;{{Z^%qH@wG^C{?V{S`fuI`S@y0e~-3B1fvM=;{qPp2h+l8k=Y_d9AEsUyf*4su@R_mk{sXe zF@Y?@#0%cIzE4u=t79#`-wS=Mdy78Zh*4zF#qQ-^Pd`$}HP~#~dg6Z+dnCU$cJFVK zYy4xf!)H8cd|yBs?@sK&IPcudc^B0Ve;!M;V?tQXT-d5U(ScbatC`E;DBq6EgHdW* z!DenbYFI)tX?0RxCW0(WbW!qFyP2;+W#KkF^EBDIQt;`B@j3_5W!L~=`5Gc{6_TFQ4CS{;cq8V zsO|z^okf|F>p;QpMum3B=_3BE zdlFa93hLkuO5UX8ElO^nK}@COMoJb_@)#v+DS3!S_b?@|Q}PCq^AdZpeeG+|+&0R( znTGx#k{a~BpFNqYQh?s}wOpMACY1ymQmM{~6WIRpz-FG+70;D;u1D{3QZ|w)NCI8( zEJK$ZGs|y6dqEHeuK*#2+(#az=Hc%FvY&bYfBzwmR`=uYf$}(Y54t-@{N`9l{Pb3c7 z`yY9#x-~I`9VSmx@(om$Z&I=g#gYi+RB$Y5F61pp_%V2n#d8jxf8n_d&v;_t0qS@j zlC_D0*3!#Ey~! zmCOS}`FM&zkGTqB34>ug|Himq1s~27^y$!=IS^7?0WKwd|+XCj;BW_3OztEb9^9vP5za5FywAe41f zGd}5BXWx81(#v%z~^@ zsz3e~W;Ll35&>3}MH_D|a*Ab@qOVm0zxj#JiQ7fO;}`2$yd@HR?rqqm>A z>WQ~nxr5$za@8@>o7KtjLOCBH$GMY4=nf3np}peJKD!9?^>P9z7UGR~Zje_CWdk(I zi9!j0i{vDs7(i5BBh()NF*#YN-vHwBTA_XgXp&Qe+5s?HUMJLcfQ#kzLTv*WBc}_s z8DOluN2m>n6WJwlo=}0O!BXHAN5zsOVo_BUhsXPRj)wz zO1?*Yj02}~IVI!3sT@zqyOi94v&R$Qq!70fTm(r$gPTD`Ip5*g=03adw^{H$Q2kd?=PG62`J2z*f$NAfy$$_jGv(=B>2FQi zpSLGEqfxUdCd0f6zFCyw+Wmk0d@k|90J7H^CXdPp1wOMz9ZWhGfQmZg)v$?zzbU2MM>qy7}!Mr0`Ny%+kQcO3J*+}wG z^)4=FSx}VS*xg*tMpZgVu{ub|HJT5Sd$_#Yg60gcd%3*Fg6eF~?&I=45U&H>0KCrO zat>bK!RtW0-p}RzcunB-6ui#maxPvs;`Mk~kPmQ42A7;?DZP{RW{jZ2Mm#b1fdy&y zCCQ`nJtey+`Hhm_DQQL<*Cx87IfvHV*+mIiWI9=b5k1J|0=&yd(D|QKWg^~|L!Zp! zatS(LO@$9*lpMz>9|;0Tn**6~PQ^1A52=bIM`V;Zw6YGF9S&Jlz0v(V1D)@aJ?rkn ziBs8p+DEB-V3n}FeekGd?`|(lO(^ydDLUnhu$`FgTxp|68^gCTS{r@XrO>MnLmz?U z0^wX|^Q(}tfXgS55!M-3U=AMPFxr$eTsY4{`@V}E_<>XaV|Gmigxxg zE{ai%SpD@qc3xLjSW2-V6SjF z*;aQ0y-MDenho?Chlc?j8DOuIW2mM9y+Pigx&`P>auL-{KyQ(2rltVBO^%Ej3-k_o zGwNcXcS-cMUV9Ha#8ww!ecs1mk6}3|UPmq+6jm|&fX1q{-vYmyUrocENQv*oTu-m$ zwiu6P2BDdh+(F3$lq^psub}buTs~{7bAVd7e9l(oKnVzhtykznE?>0u3Vp=o%eE>& z=>{%evDFah*^M|^Y$ZRUHMj|9KFQ6;bXZ}90_+pA2Gr?LI-9smfNm4$o=3r_998rp zda zej&QYFOR26C1-&{lCUkrtUg)3CO26%A@3V{YAWQ!)~B=GU?C7 z`_GWjEWDE&)*fEQb{^;mi=q=YQCId05A3hBJ|yL*_1p(AH+S&BAvmNuu$?f#ps!H0 z0BzoeoL?y?(2tvcdnY=wUGOlJQRSq-6;#1*l%?%S7?V732A_q@-&<$iiJty|YoZpR z^iKlXYJ|zi14XQRD@l*&T>L;`_&vT-}(b&?3wsX){UG;s^(9|ao9~7!OG`U|7HP44GP0yw`df2p2Lytz-~2fFT=)s1#t{a#%%(& ztwOnP%f0{%iWu6tUBK5ly`{0 z`{*OVt-uC^Dd14wN!GD~Ct@t*7A{^x{aGRa=WH};%+?47HxF##{Cc!_m&t)GJuYzo zyIY`4rCHXWgKO8iroS(uy?X?VU~OdGs}b4RHORkDz+1%;(w)uG$g{n-p^fc`r-9~v z0W%rLhr{M-6o6e$D(C?L|5gvsGftf-*0`#y5 zJRr0JUmyaD1)_XG_K3(1z!}bl?|CR&D6$Vx4xNC`MoP4MHkEJ&e4Hj48FlJ011 zk>H0=xH`Zd6=dT+4YXLJr+^+4WUa3RS|Z5$T>-RIa9HWfA*7G%Qf;4-LAp$kX}uH$ z%Qe!r^dJ;GA;@Z8475UUL@5@5hkd02K+S3}% z16nP}W`6+a8I9fhT~u$y(uV`1q%oX-4-|$ zYP}RBZwU%;k*n~wMwbJIr^+Gam-@nV=Bec|e~F3K^e^`d{c84tC0E z$cOC*!>%0pn>B*{rj3lR1jR5*pu4wdgczZ6W?+)eL?sxD2yW7*_(mhd4z<_xt>6{L zBHF6a5YT?7(V3wAUL%AUak=2I9|T1X5e|gC=dd3Iufp3_OZ@|NeiCGxpMg!YO(W-2 z^)9l17G$oUN(Yoi&S1oY0_+z-7TFO%I|RSDnI8tUQ}8j({7|4@1&5V-Fwic+FQM3D zfc+*YUVQ-2?}DP}`vd(UD1O}==uh1q(KTCS0FnG%r4h;BIE&+4nGU;YyoH_H%x?vp zVDYN}Zw9>D;^P2s1e|E;@ca#clPnz+zYYytqZ=U7$(FXOCIen;Y3phd;1mNV0$yin zb87jmjm8p>45B|fHxa>3E(Z3jy8`0yw$*q0dKQ7 z*>O#Pw;LD-oMvDQaJqp}z!{b{_Zk6b8rT4Mho$YmI>0*(tOcB9@f*?Zg@CgStO2~s z;$$X<0q-{O0>FDLZ8r`Byw||<0q?W4AvqLqj)CU_-f!`H(85`Ob1fYuF9dwRzyiPr zEj|YXLjdO)cqZU{i_b;wAi#$#ZJUMwAGY|z$UPl!fyEa9o(hP7#X`W702f-?&_5Ay zk%1=wK5A*p|2V+K1|AFen8hDMwSIt0EWQNrNWi6*zC$?z@NrAq!-oPcGw=|=+p8~Ena1-D&27Us# z#?ry{jeu(n+yMBjfgb@rXX$Wz0`PeQTL51$a6RCQ7N_{46`;-OW*gr1Ne%i zZ++eZeAUu-KW_lOW(eK{eBI&{GJXZ{4Qvaj;9S5r4eSs27WM^l&j5VeKw6=9u$sv2 z4G4$!e!zVJ-^0QJ?gRKf78bB4;5tJ~xgS{Cw(kbG-oU*8TP%HF)&($OU}wM&4eSK? zk%1inH(1&yps4;v1NQ*@7_x)jf`FeG*bZ=$f!TncLZU#B1^AhP67X|N-`iM#Ul=F= zzl6wvmH}=y@K3<64EzIdi-Erber;)2;61=^EKY$En)Poj{sAD(`c_NdlhCYxXX(qp z*8sma)o1~Ju=Hio%YZ)`_!8hxmcChe0dSjv&jbE!;B$c64SW{x7fbseYXEl`NRIwa zOJ6-b1^BChs{nTyxDxO;i<1wr0uT{ly8T-Y_=lyhPag;T(-15JY_|37)zN@g8Av;8 zoPkFHjyI4t8G;s{p)uNIR~vXZ;6wut1Ds^w{{UWN^JO^j%K<0boMOtQfY;jkuCxGf zip|OV$^%4rh2UVo>uvrF;6T6|3?v0I)#lG3mn8K@n?DbD8sJSfe;<(8x!FKs=N6k& z;EZ@c2$bNVfQW?BjqyQ%w;OmM;4}mO0XW^j0{~~(`eJ#1z?lXrz&i}2eQ~FO`vJ}} zkhaKdTVF-fX1L41y#enwkao*Gw!WtB4tTGDv|H{okao))1G@s=k68!5?E&XvQUPfP zJYXR0fCp{oK528hX8ZzhrGcLVuCn#LBWc^G3?yy)w1K2;SKIt&RNDynjDZ^f*Vudq za!IeQHIVe`vo_y_T-w&p8Tc;X^9Irmf5FyY56}*O(LmbEFBwRi{bgHUO}_^Cih-{J zzG@(8+t&r*=j_v8|w&+H(ak}*J^+w^e&1^U0RgU8WFF0h0(A}@HeMilb@N~4Q_w%9?qCuF~W zZ3p3$kp2FRO`jK#{r;^TgabnM`&Nxc0DY%XHPH7OQGoLYJ9tVn9}e`R9Yna9?Dn5* z`a*-kn%nH)8O@x+nm^mYoMuj8&Fyxuf3x;bf6;V95%Sn!2M4Jj+>{^;{vb?!iSh2V zgL#M%WU*iE;1EO`v)C>>n6HD4zuCdUW*$OozuQ507bgS#VF%$){1fO;jZOq=mO=Ou zOM$M^XbI3bNu7{mI9^g$bZId`2H{nZpL?|o!mFUr=0r{R2tv%0BzP zbel#u0Nt+9^+3}keTXszXu3w%0?p8fyuF!{zN;7ybcaUcfbNt*I45-BG)tpPu`sh` za16peS?n$u9IGgpcDD>(s@?;*M+Prb@8Gkrd!^G8S1Sno@6v&P#My1zc?c0UlPr+- zJ_wxLC-t2iJaXI;A+FYe&5?9NhwCE!9E;fL{nF{HoYMuadg;2C&p_T>=^$u#rohcF z-Tq=Lv||rQ_*u^Bd=>D663&%#CYGlon^Px|v^xqvTQj)<`$YZ{c;Zbm|dWqg#v@5TSoeI%AddK5=*( ziOzCL=r+@tjQY*!Zi%M2k{^rimP+SR$HNuD+WB^)E=UxI;U z(n0);wvlt_7K`#Dalg@Z**@7 zU$FyQCGjDW!v4TTH|03&DM{Wq0xj5?4trWUTk-ZAZawj~S~}mEw|;ngM&iR7U3Mhi z)<}HHrQeP~Y-_D_e!|;!wEGKsLw)BD>a_!VR+3kbsiA9ATv&8q&q;g-rLa8(HXL$} zWY0_O;Ug@BD?}|!`s#?TkCN9z@S1T8MYoI48@cQS>C8tP>(B;*9(XLexYrLt9NyJG z!WFp4!$)WC^E>F_b>p$NV+?2oUN*IRB;tfGO5Dwp*b4_?6>4iWM)s1#2U`kyL_jl; zD#1OM1#Np6ds*VT5VMOM>f7`y^d|?VKY^e#T^b^i+l9R%9em#4>;yG@eB29KPhu`! zmCi!s?g0OY8k`5Z*Ca0c6mH(k^%$ZZ=YiALCEBH21U|a6HzWl;^yM~fHTZV8*n`II zz~016qGX9BpuKSRcV}-&3VOKLaJWbWExd<2(B|8w1P;%IsQFGB-KF@r@m;JpYW|M4 zVB_iy45O8<{q#ed*S}8Zh|ka!FI^;Z^YHoLHPPN5G^zgpK2XB}GE|KmW`=l=lH-3-G3 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/v_stdio.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/v_stdio.crf new file mode 100644 index 0000000000000000000000000000000000000000..b19bf738e36d51d48c3459a3beb29f9b016ec548 GIT binary patch literal 202753 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%0DT80}% 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 bKAG%ixvX;Tc4%iu{&N3@D~gKB6ea%+LOXII literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/board.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/board.c new file mode 100644 index 0000000000..55d92f951f --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/board.c @@ -0,0 +1,91 @@ +/* + * Copyright (c) 2006-2019, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2017-07-24 Tanek the first version + * 2018-11-12 Ernest Chen modify copyright + */ + +#include +#include +#include + +#define _SCB_BASE (0xE000E010UL) +#define _SYSTICK_CTRL (*(rt_uint32_t *)(_SCB_BASE + 0x0)) +#define _SYSTICK_LOAD (*(rt_uint32_t *)(_SCB_BASE + 0x4)) +#define _SYSTICK_VAL (*(rt_uint32_t *)(_SCB_BASE + 0x8)) +#define _SYSTICK_CALIB (*(rt_uint32_t *)(_SCB_BASE + 0xC)) +#define _SYSTICK_PRI (*(rt_uint8_t *)(0xE000ED23UL)) + +// Updates the variable SystemCoreClock and must be called +// whenever the core clock is changed during program execution. +extern void SystemCoreClockUpdate(void); + +// Holds the system core clock, which is the system clock +// frequency supplied to the SysTick timer and the processor +// core clock. +extern uint32_t SystemCoreClock; + +static uint32_t _SysTick_Config(rt_uint32_t ticks) +{ + if ((ticks - 1) > 0xFFFFFF) + { + return 1; + } + + _SYSTICK_LOAD = ticks - 1; + _SYSTICK_PRI = 0xFF; + _SYSTICK_VAL = 0; + _SYSTICK_CTRL = 0x07; + + return 0; +} + +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) +#define RT_HEAP_SIZE 1024 +static uint32_t rt_heap[RT_HEAP_SIZE]; // heap default size: 4K(1024 * 4) +RT_WEAK void *rt_heap_begin_get(void) +{ + return rt_heap; +} + +RT_WEAK void *rt_heap_end_get(void) +{ + return rt_heap + RT_HEAP_SIZE; +} +#endif + +/** + * This function will initial your board. + */ +void rt_hw_board_init() +{ + /* System Clock Update */ + SystemCoreClockUpdate(); + + /* System Tick Configuration */ + _SysTick_Config(SystemCoreClock / RT_TICK_PER_SECOND); + + /* Call components board initial (use INIT_BOARD_EXPORT()) */ +#ifdef RT_USING_COMPONENTS_INIT + rt_components_board_init(); +#endif + +#if defined(RT_USING_USER_MAIN) && defined(RT_USING_HEAP) + rt_system_heap_init(rt_heap_begin_get(), rt_heap_end_get()); +#endif +} + +void SysTick_Handler(void) +{ + /* enter interrupt */ + rt_interrupt_enter(); + + rt_tick_increase(); + + /* leave interrupt */ + rt_interrupt_leave(); +} diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/rtconfig.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/rtconfig.h new file mode 100644 index 0000000000..cc77b2edd3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/RTOS/rtconfig.h @@ -0,0 +1,154 @@ +/* RT-Thread config file */ + +#ifndef __RTTHREAD_CFG_H__ +#define __RTTHREAD_CFG_H__ + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +#include "RTE_Components.h" + +#if defined(RTE_USING_FINSH) +#define RT_USING_FINSH +#endif //RTE_USING_FINSH + +#endif //(__CC_ARM) || (__CLANG_ARM) + +// <<< Use Configuration Wizard in Context Menu >>> +// Basic Configuration +// Maximal level of thread priority <8-256> +// Default: 32 +#define RT_THREAD_PRIORITY_MAX 8 +// OS tick per second +// Default: 1000 (1ms) +#define RT_TICK_PER_SECOND 1000 +// Alignment size for CPU architecture data access +// Default: 4 +#define RT_ALIGN_SIZE 4 +// the max length of object name<2-16> +// Default: 8 +#define RT_NAME_MAX 8 +// Using RT-Thread components initialization +// Using RT-Thread components initialization +#define RT_USING_COMPONENTS_INIT +// + +#define RT_USING_USER_MAIN + +// the stack size of main thread<1-4086> +// Default: 512 +#define RT_MAIN_THREAD_STACK_SIZE 256 + +// + +// Debug Configuration +// enable kernel debug configuration +// Default: enable kernel debug configuration +//#define RT_DEBUG +// +// enable components initialization debug configuration<0-1> +// Default: 0 +#define RT_DEBUG_INIT 0 +// thread stack over flow detect +// Diable Thread stack over flow detect +//#define RT_USING_OVERFLOW_CHECK +// +// + +// Hook Configuration +// using hook +// using hook +#define RT_USING_HOOK +// +// using idle hook +// using idle hook +//#define RT_USING_IDLE_HOOK +// +// + +// Software timers Configuration +// Enables user timers +#define RT_USING_TIMER_SOFT 0 +#if RT_USING_TIMER_SOFT == 0 + #undef RT_USING_TIMER_SOFT +#endif +// The priority level of timer thread <0-31> +// Default: 4 +#define RT_TIMER_THREAD_PRIO 4 +// The stack size of timer thread <0-8192> +// Default: 512 +#define RT_TIMER_THREAD_STACK_SIZE 512 +// + +// IPC(Inter-process communication) Configuration +// Using Semaphore +// Using Semaphore +#define RT_USING_SEMAPHORE +// +// Using Mutex +// Using Mutex +//#define RT_USING_MUTEX +// +// Using Event +// Using Event +//#define RT_USING_EVENT +// +// Using MailBox +// Using MailBox +#define RT_USING_MAILBOX +// +// Using Message Queue +// Using Message Queue +//#define RT_USING_MESSAGEQUEUE +// +// + +// Memory Management Configuration +// Dynamic Heap Management +// Dynamic Heap Management +#define RT_USING_HEAP +// +// using small memory +// using small memory +#define RT_USING_SMALL_MEM +// +// using tiny size of memory +// using tiny size of memory +//#define RT_USING_TINY_SIZE +// +// + +// Console Configuration +// Using console +// Using console +#define RT_USING_CONSOLE +// +// the buffer size of console <1-1024> +// the buffer size of console +// Default: 128 (128Byte) +#define RT_CONSOLEBUF_SIZE 128 +// + +#if defined(RT_USING_FINSH) + #define FINSH_USING_MSH + #define FINSH_USING_MSH_ONLY + // Finsh Configuration + // the priority of finsh thread <1-7> + // the priority of finsh thread + // Default: 6 + #define __FINSH_THREAD_PRIORITY 5 + #define FINSH_THREAD_PRIORITY (RT_THREAD_PRIORITY_MAX / 8 * __FINSH_THREAD_PRIORITY + 1) + // the stack of finsh thread <1-4096> + // the stack of finsh thread + // Default: 4096 (4096Byte) + #define FINSH_THREAD_STACK_SIZE 512 + // the history lines of finsh thread <1-32> + // the history lines of finsh thread + // Default: 5 + #define FINSH_HISTORY_LINES 1 + + #define FINSH_USING_SYMTAB + // +#endif + +// <<< end of configuration section >>> + +#endif diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/_template/RTE_Components.h b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/_template/RTE_Components.h new file mode 100644 index 0000000000..a05068b37c --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/RTE/_template/RTE_Components.h @@ -0,0 +1,21 @@ + +/* + * Auto generated Run-Time-Environment Configuration File + * *** Do not modify ! *** + * + * Project: 'template' + * Target: 'template' + */ + +#ifndef RTE_COMPONENTS_H +#define RTE_COMPONENTS_H + + +/* + * Define the Device Header File: + */ +#define CMSIS_device_header "target.h" + + + +#endif /* RTE_COMPONENTS_H */ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/startup_target.s new file mode 100644 index 0000000000..cda8ff1a5b --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 0 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvguix.zhuxw b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvguix.zhuxw new file mode 100644 index 0000000000..82988f6928 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvguix.zhuxw @@ -0,0 +1,3691 @@ + + + + -6.1 + +
### uVision Project, (C) Keil Software
+ + + + + + + + + + 38003 + Registers + 135 87 + + + 346 + Code Coverage + 972 160 + + + 204 + Performance Analyzer + 1132 + + + + + + 35141 + Event Statistics + + 200 50 700 + + + 1506 + Symbols + + 77 77 77 + + + 1936 + Watch 1 + + 200 133 133 + + + 1937 + Watch 2 + + 200 133 133 + + + 1935 + Call Stack + Locals + + 200 133 133 + + + 2506 + Trace Data + + 75 135 130 95 70 230 200 150 + + + 466 + Source Browser + 500 + 300 + + + + + + + + 1 + 1 + 0 + 0 + -1 + + + + + + + 44 + 0 + 2 + + -32062 + -32000 + + + -1 + -1 + + + 15 + 245 + 1510 + 860 + + + + 0 + + 1151 + 01000000040000000100000001000000010000000100000000000000020000000000000001000000010000000000000028000000280000000100000009000000000000000100000076443A5C313049435C303249435F535056445C44726976654C6962726172795C7472756E6B5C50726F6A6563745C50756D615F5365726965735C50756D61415C5638355833505F4C69625F56312E315C50726F6A6563745F52545C74656D706C6174655C74656D706C6174655C5372635C6D61696E2E6300000000066D61696E2E6300000000C5D4F200FFFFFFFF87443A5C313049435C303249435F535056445C44726976654C6962726172795C7472756E6B5C50726F6A6563745C50756D615F5365726965735C50756D61415C5638355833505F4C69625F56312E315C50726F6A6563745F52545C74656D706C6174655C74656D706C6174655C4D444B2D41524D5C5254455C52544F535C7274636F6E6669672E68000000000A7274636F6E6669672E6800000000FFDC7800FFFFFFFF3E433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C696E636C7564655C72746465662E68000000000772746465662E6800000000BECEA100FFFFFFFF39433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C7372635C69646C652E63000000000669646C652E6300000000F0A0A100FFFFFFFF3B433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C7372635C6F626A6563742E6300000000086F626A6563742E6300000000BCA8E100FFFFFFFF3F433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C7372635C636F6D706F6E656E74732E63000000000C636F6D706F6E656E74732E63000000009CC1B600FFFFFFFF40433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C696E636C7564655C727464656275672E680000000009727464656275672E6800000000F7B88600FFFFFFFF3D433A5C4B65696C5F76355C41524D5C5041434B5C5265616C5468726561645C52542D5468726561645C332E312E335C7372635C6B736572766963652E63000000000A6B736572766963652E6300000000D9ADC200FFFFFFFF79443A5C313049435C303249435F535056445C44726976654C6962726172795C7472756E6B5C50726F6A6563745C50756D615F5365726965735C50756D61415C5638355833505F4C69625F56312E315C50726F6A6563745F52545C74656D706C6174655C74656D706C6174655C5372635C765F737464696F2E630000000009765F737464696F2E6300000000A5C2D700FFFFFFFF0100000010000000C5D4F200FFDC7800BECEA100F0A0A100BCA8E1009CC1B600F7B88600D9ADC200A5C2D700B3A6BE00EAD6A300F6FA7D00B5E99D005FC3CF00C1838300CACAD500010000000000000002000000EC83FFFF4F83FFFFE187FFFFFC84FFFF + + + + 0 + Build + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EC0000004F00000062050000E5000000 + + + 16 + 270200007C0000009D06000012010000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000E3010000 + + + 16 + 5F00000037000000470100000A010000 + + + + 109 + 109 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000E3010000 + + + 16 + 5F000000370000007201000091020000 + + + + 1465 + 1465 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1935 + 1935 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 1936 + 1936 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 195 + 195 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000E3010000 + + + 16 + 5F000000370000007201000091020000 + + + + 196 + 196 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000E3010000 + + + 16 + 5F000000370000007201000091020000 + + + + 197 + 197 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 0300000017020000DE040000FB020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 198 + 198 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 000000003302000062050000DD020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 199 + 199 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000017020000DE040000FB020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 5F0000003700000010030000CD000000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 38003 + 38003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E50000005C030000 + + + 16 + 78000000500000008B010000AA020000 + + + + 38007 + 38007 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000690300007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000690300007D070000CF030000 + + + 16 + 78000000500000008B010000AA020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 78000000500000006001000023010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000690300007D070000CF030000 + + + 16 + 78000000500000008B010000AA020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 03000000690300007D070000CF030000 + + + 16 + 78000000500000008B010000AA020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000005F050000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000F0400008007000022040000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 1 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 0 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 00000000380000006F02000054000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000004A0200005F050000C4020000 + + + 16 + 5F00000037000000470100000A010000 + + + + 3312 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFEC000000E500000062050000E9000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E650020000000000000270200007C0000009D06000012010000EC0000004F00000062050000E50000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF760400004F0000007A04000043020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000B50500007C0000009D060000700200007A0400004F000000620500004302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE80000004F000000EC000000FC010000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C400000073940000018000100000010000003B0100007C0000002302000024030000000000004F000000E8000000FC0100000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73010000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7301000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657301000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273000000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000000000000FFFFFFFFFFFFFFFF000000002F020000620500003302000000000000010000000400000001000000000000000000000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB090000018000800000000000003B010000600200009D0600000A030000000000003302000062050000DD02000000000000404100460F0000001343616C6C20537461636B202B204C6F63616C73000000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031000000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203100000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFFFFFFFFFF0000000001000000000000000000000001000000FFFFFFFFB102000033020000B5020000DD02000000000000020000000400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000001000000FFFFFFFFFFFFFFFF00000000FC010000E10400000002000001000000010000100400000001000000DFFCFFFF94000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF01000077940000018000800000010000003B010000280300007D0800003C0400000000000000020000E1040000140300000000000040820056060000000C4275696C64204F757470757401000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657301000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0742726F77736572010000007794000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2583 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000004000900000000000000000000000000000000010000000100000001807B8A0000000004000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000B6D61696E5F746872656164960000000000000002000B6D61696E5F7468726561640E52545F5448524541445F494E49540000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 976 + 00200000010000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000000000000100000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000004002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050000000000874656D706C617465960000000000000001000874656D706C617465000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000400240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2373 + 00200000000000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000000002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000000000002D0000000000000000000000000000000001000000010000000180F07F0000000000002E0000000000000000000000000000000001000000010000000180E8880000000000003700000000000000000000000000000000010000000100000001803B010000000000002F0000000000000000000000000000000001000000010000000180BB8A00000000000030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000000000000310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720000000000000000010000000000000001000000000000000000000001000000000013800F01000000000000320000000E4D656D6F72792057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000000000000330000000E53657269616C2057696E646F77730000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7200000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720000000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720000000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000000000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730000000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72000000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + 1 + Debug + + -1 + -1 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EC0000004F00000080070000E5000000 + + + 16 + 6C08000065000000000F0000FB000000 + + + + 1005 + 1005 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000C4020000 + + + 16 + 78000000500000006001000023010000 + + + + 109 + 109 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 1465 + 1465 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1466 + 1466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1467 + 1467 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1468 + 1468 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1506 + 1506 + 0 + 0 + 0 + 0 + 32767 + 0 + 16384 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 1913 + 1913 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 1935 + 1935 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 1936 + 1936 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 1937 + 1937 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 1939 + 1939 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1940 + 1940 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1941 + 1941 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 1942 + 1942 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 195 + 195 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 196 + 196 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 197 + 197 + 0 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 780000005000000029030000E6000000 + + + + 198 + 198 + 1 + 0 + 0 + 0 + 32767 + 0 + 32768 + 0 + + 16 + 00000000E1020000C00300000F040000 + + + 16 + 780000005000000029030000E6000000 + + + + 199 + 199 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 780000005000000029030000E6000000 + + + + 203 + 203 + 0 + 0 + 0 + 0 + 32767 + 0 + 8192 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 204 + 204 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 221 + 221 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 00000000000000000000000000000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 2506 + 2506 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 2507 + 2507 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 780000005000000029030000E6000000 + + + + 343 + 343 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 346 + 346 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 35141 + 35141 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 78000000500000006001000023010000 + + + + 35824 + 35824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 35885 + 35885 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35886 + 35886 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35887 + 35887 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35888 + 35888 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35889 + 35889 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35890 + 35890 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35891 + 35891 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35892 + 35892 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35893 + 35893 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35894 + 35894 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35895 + 35895 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35896 + 35896 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35897 + 35897 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35898 + 35898 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35899 + 35899 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35900 + 35900 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35901 + 35901 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35902 + 35902 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35903 + 35903 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35904 + 35904 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 35905 + 35905 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 38003 + 38003 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 0300000066000000E5000000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 38007 + 38007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 780000005000000029030000E6000000 + + + + 436 + 436 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 437 + 437 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 440 + 440 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 463 + 463 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 466 + 466 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 030000005E0200005F050000C4020000 + + + 16 + 78000000500000008B010000AA020000 + + + + 470 + 470 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + EF000000660000007D070000CC000000 + + + 16 + 780000005000000029030000E6000000 + + + + 50000 + 50000 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50001 + 50001 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50002 + 50002 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50003 + 50003 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50004 + 50004 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50005 + 50005 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50006 + 50006 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50007 + 50007 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50008 + 50008 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50009 + 50009 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50010 + 50010 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50011 + 50011 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50012 + 50012 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50013 + 50013 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50014 + 50014 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50015 + 50015 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50016 + 50016 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50017 + 50017 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50018 + 50018 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 50019 + 50019 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 7D040000660000005F0500002A020000 + + + 16 + 78000000500000006001000023010000 + + + + 59392 + 59392 + 1 + 0 + 0 + 0 + 966 + 0 + 8192 + 0 + + 16 + 0000000000000000D10300001C000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59393 + 0 + 1 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + 000000000F0400008007000022040000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59399 + 59399 + 0 + 0 + 0 + 0 + 476 + 0 + 8192 + 1 + + 16 + 000000001C000000E701000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 59400 + 59400 + 1 + 0 + 0 + 0 + 612 + 0 + 8192 + 2 + + 16 + 000000001C0000006F02000038000000 + + + 16 + 0A0000000A0000006E0000006E000000 + + + + 824 + 824 + 0 + 0 + 0 + 0 + 32767 + 0 + 4096 + 0 + + 16 + C7030000F80200007D070000F6030000 + + + 16 + 78000000500000006001000023010000 + + + + 3311 + 000000000B000000000000000020000000000000FFFFFFFFFFFFFFFFEC000000E500000080070000E9000000000000000100000004000000010000000000000000000000FFFFFFFF08000000CB00000057010000CC000000F08B00005A01000079070000D601000045890000FFFF02000B004354616262656450616E6500200000000000006C08000065000000000F0000FB000000EC0000004F00000080070000E50000000000000040280046080000000B446973617373656D626C7900000000CB00000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A6572000000005701000001000000FFFFFFFFFFFFFFFF14506572666F726D616E636520416E616C797A657200000000CC00000001000000FFFFFFFFFFFFFFFF0E4C6F67696320416E616C797A657200000000F08B000001000000FFFFFFFFFFFFFFFF0D436F646520436F766572616765000000005A01000001000000FFFFFFFFFFFFFFFF11496E737472756374696F6E205472616365000000007907000001000000FFFFFFFFFFFFFFFF0F53797374656D20416E616C797A657200000000D601000001000000FFFFFFFFFFFFFFFF104576656E742053746174697374696373000000004589000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFCB00000001000000FFFFFFFFCB000000000000000040000000000000FFFFFFFFFFFFFFFF760400004F0000007A04000043020000000000000200000004000000010000000000000000000000FFFFFFFF2B000000E2050000CA0900002D8C00002E8C00002F8C0000308C0000318C0000328C0000338C0000348C0000358C0000368C0000378C0000388C0000398C00003A8C00003B8C00003C8C00003D8C00003E8C00003F8C0000408C0000418C000050C3000051C3000052C3000053C3000054C3000055C3000056C3000057C3000058C3000059C300005AC300005BC300005CC300005DC300005EC300005FC3000060C3000061C3000062C3000063C3000001800040000000000000FA0B000065000000E20C0000590200007A0400004F000000620500004302000000000000404100462B0000000753796D626F6C7300000000E205000001000000FFFFFFFFFFFFFFFF0A5472616365204461746100000000CA09000001000000FFFFFFFFFFFFFFFF00000000002D8C000001000000FFFFFFFFFFFFFFFF00000000002E8C000001000000FFFFFFFFFFFFFFFF00000000002F8C000001000000FFFFFFFFFFFFFFFF0000000000308C000001000000FFFFFFFFFFFFFFFF0000000000318C000001000000FFFFFFFFFFFFFFFF0000000000328C000001000000FFFFFFFFFFFFFFFF0000000000338C000001000000FFFFFFFFFFFFFFFF0000000000348C000001000000FFFFFFFFFFFFFFFF0000000000358C000001000000FFFFFFFFFFFFFFFF0000000000368C000001000000FFFFFFFFFFFFFFFF0000000000378C000001000000FFFFFFFFFFFFFFFF0000000000388C000001000000FFFFFFFFFFFFFFFF0000000000398C000001000000FFFFFFFFFFFFFFFF00000000003A8C000001000000FFFFFFFFFFFFFFFF00000000003B8C000001000000FFFFFFFFFFFFFFFF00000000003C8C000001000000FFFFFFFFFFFFFFFF00000000003D8C000001000000FFFFFFFFFFFFFFFF00000000003E8C000001000000FFFFFFFFFFFFFFFF00000000003F8C000001000000FFFFFFFFFFFFFFFF0000000000408C000001000000FFFFFFFFFFFFFFFF0000000000418C000001000000FFFFFFFFFFFFFFFF000000000050C3000001000000FFFFFFFFFFFFFFFF000000000051C3000001000000FFFFFFFFFFFFFFFF000000000052C3000001000000FFFFFFFFFFFFFFFF000000000053C3000001000000FFFFFFFFFFFFFFFF000000000054C3000001000000FFFFFFFFFFFFFFFF000000000055C3000001000000FFFFFFFFFFFFFFFF000000000056C3000001000000FFFFFFFFFFFFFFFF000000000057C3000001000000FFFFFFFFFFFFFFFF000000000058C3000001000000FFFFFFFFFFFFFFFF000000000059C3000001000000FFFFFFFFFFFFFFFF00000000005AC3000001000000FFFFFFFFFFFFFFFF00000000005BC3000001000000FFFFFFFFFFFFFFFF00000000005CC3000001000000FFFFFFFFFFFFFFFF00000000005DC3000001000000FFFFFFFFFFFFFFFF00000000005EC3000001000000FFFFFFFFFFFFFFFF00000000005FC3000001000000FFFFFFFFFFFFFFFF000000000060C3000001000000FFFFFFFFFFFFFFFF000000000061C3000001000000FFFFFFFFFFFFFFFF000000000062C3000001000000FFFFFFFFFFFFFFFF000000000063C3000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFE205000001000000FFFFFFFFE2050000000000000010000001000000FFFFFFFFFFFFFFFFE80000004F000000EC000000DD020000010000000200001004000000010000000000000000000000FFFFFFFF05000000ED0300006D000000C3000000C40000007394000001800010000001000000800700006500000068080000F3020000000000004F000000E8000000DD0200000000000040410056050000000750726F6A65637401000000ED03000001000000FFFFFFFFFFFFFFFF05426F6F6B73000000006D00000001000000FFFFFFFFFFFFFFFF0946756E6374696F6E7300000000C300000001000000FFFFFFFFFFFFFFFF0954656D706C6174657300000000C400000001000000FFFFFFFFFFFFFFFF09526567697374657273010000007394000001000000FFFFFFFFFFFFFFFF00000000000000000000000000000000000000000000000001000000FFFFFFFFED03000001000000FFFFFFFFED030000000000000080000001000000FFFFFFFFFFFFFFFF00000000DD02000080070000E10200000100000001000010040000000100000034FDFFFF8600000000000000000000000000000001000000C6000000FFFFFFFF0F0000008F070000930700009407000095070000960700009007000091070000B5010000B801000038030000B9050000BA050000BB050000BC050000CB09000001800080000001000000440B0000F7020000000F000025040000C4030000E1020000800700000F04000000000000404100560F0000001343616C6C20537461636B202B204C6F63616C73010000008F07000001000000FFFFFFFFFFFFFFFF0755415254202331000000009307000001000000FFFFFFFFFFFFFFFF0755415254202332000000009407000001000000FFFFFFFFFFFFFFFF0755415254202333000000009507000001000000FFFFFFFFFFFFFFFF15446562756720287072696E74662920566965776572000000009607000001000000FFFFFFFFFFFFFFFF0757617463682031010000009007000001000000FFFFFFFFFFFFFFFF0757617463682032000000009107000001000000FFFFFFFFFFFFFFFF10547261636520457863657074696F6E7300000000B501000001000000FFFFFFFFFFFFFFFF0E4576656E7420436F756E7465727300000000B801000001000000FFFFFFFFFFFFFFFF09554C494E4B706C7573000000003803000001000000FFFFFFFFFFFFFFFF084D656D6F7279203101000000B905000001000000FFFFFFFFFFFFFFFF084D656D6F7279203200000000BA05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203300000000BB05000001000000FFFFFFFFFFFFFFFF084D656D6F7279203400000000BC05000001000000FFFFFFFFFFFFFFFF105472616365204E617669676174696F6E00000000CB09000001000000FFFFFFFFFFFFFFFF0A0000000000000001000000000000000100000001000000FFFFFFFFC0030000E1020000C40300000F04000001000000020000100400000000000000000000000000000000000000000000000000000002000000C6000000FFFFFFFF8F07000001000000FFFFFFFF8F07000001000000C6000000000000000080000000000000FFFFFFFFFFFFFFFF00000000430200006205000047020000000000000100000004000000010000000000000000000000FFFFFFFF06000000C5000000C7000000B4010000D2010000CF0100007794000001800080000000000000800700005D020000E20C0000F3020000000000004702000062050000DD0200000000000040820046060000000C4275696C64204F757470757400000000C500000001000000FFFFFFFFFFFFFFFF0D46696E6420496E2046696C657300000000C700000001000000FFFFFFFFFFFFFFFF0A4572726F72204C69737400000000B401000001000000FFFFFFFFFFFFFFFF0E536F757263652042726F7773657200000000D201000001000000FFFFFFFFFFFFFFFF0E416C6C205265666572656E63657300000000CF01000001000000FFFFFFFFFFFFFFFF0642726F777365000000007794000001000000FFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000000000000000000001000000FFFFFFFFC500000001000000FFFFFFFFC5000000000000000000000000000000 + + + 59392 + File + + 2583 + 00200000010000002800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000040004000000000000000000000000000000000100000001000000018022E100000000040005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000004000700000000000000000000000000000000010000000100000001802CE10000000004000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000004000C0000000000000000000000000000000001000000010000000180F4B00000000004000D000000000000000000000000000000000100000001000000018036B10000000004000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF88000000000400460000000000000000000000000000000001000000010000000180FE880000000004004500000000000000000000000000000000010000000100000001800B810000000004001300000000000000000000000000000000010000000100000001800C810000000004001400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F0880000020000000F000000000000000000000000000000000100000001000000FFFF0100120043555646696E64436F6D626F427574746F6EE803000000000000000000000000000000000000000000000001000000010000009600000002002050000000000B6D61696E5F746872656164960000000000000002000B6D61696E5F7468726561640E52545F5448524541445F494E49540000000000000000018024E10000000000001100000000000000000000000000000000010000000100000001800A810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E2280000002000100150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B46350000000000000000000000000100000001000000000000000000000001000000020021802280000000000000150000002153746172742F53746F70202644656275672053657373696F6E094374726C2B4635000000000000000000000000010000000100000000000000000000000100000000002180E0010000000000007500000021456E65726779204D6561737572656D656E742026776974686F75742044656275670000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000160000000000000000000000000000000001000000010000000180C988000000000400180000000000000000000000000000000001000000010000000180C788000000000000190000000000000000000000000000000001000000010000002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000003002180C8880000000000001700000027264B696C6C20416C6C20427265616B706F696E747320696E2043757272656E7420546172676574000000000000000000000000010000000100000000000000000000000100000000002180E50100000000000078000000264B696C6C20416C6C20427265616B706F696E747320696E204163746976652050726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180E601000000000000790000002F4B696C6C20416C6C20427265616B706F696E747320696E204D756C74692D50726F6A65637420576F726B73706163650000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000021804C010000020001001A0000000F2650726F6A6563742057696E646F77000000000000000000000000010000000100000000000000000000000100000008002180DD880000000000001A0000000750726F6A656374000000000000000000000000010000000100000000000000000000000100000000002180DC8B0000000000003A00000005426F6F6B73000000000000000000000000010000000100000000000000000000000100000000002180E18B0000000000003B0000000946756E6374696F6E73000000000000000000000000010000000100000000000000000000000100000000002180E28B000000000000400000000954656D706C6174657300000000000000000000000001000000010000000000000000000000010000000000218018890000000000003D0000000E536F757263652042726F777365720000000000000000000000000100000001000000000000000000000001000000000021800000000000000400FFFFFFFF00000000000000000001000000000000000100000000000000000000000100000000002180D988000000000000390000000C4275696C64204F7574707574000000000000000000000000010000000100000000000000000000000100000000002180E38B000000000000410000000B46696E64204F75747075740000000000000000000000000100000001000000000000000000000001000000000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001B000000000000000000000000000000000100000001000000000000000446696C65C6030000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E1000000000000FFFFFFFF000100000000000000010000000000000001000000018001E1000000000000FFFFFFFF000100000000000000010000000000000001000000018003E1000000000000FFFFFFFF0001000000000000000100000000000000010000000180CD7F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF000000000000000000010000000000000001000000018023E1000000000000FFFFFFFF000100000000000000010000000000000001000000018022E1000000000000FFFFFFFF000100000000000000010000000000000001000000018025E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802BE1000000000000FFFFFFFF00010000000000000001000000000000000100000001802CE1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001807A8A000000000000FFFFFFFF00010000000000000001000000000000000100000001807B8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180D3B0000000000000FFFFFFFF000100000000000000010000000000000001000000018015B1000000000000FFFFFFFF0001000000000000000100000000000000010000000180F4B0000000000000FFFFFFFF000100000000000000010000000000000001000000018036B1000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FF88000000000000FFFFFFFF0001000000000000000100000000000000010000000180FE88000000000000FFFFFFFF00010000000000000001000000000000000100000001800B81000000000000FFFFFFFF00010000000000000001000000000000000100000001800C81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180F088000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE7F000000000000FFFFFFFF000100000000000000010000000000000001000000018024E1000000000000FFFFFFFF00010000000000000001000000000000000100000001800A81000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001802280000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C488000000000000FFFFFFFF0001000000000000000100000000000000010000000180C988000000000000FFFFFFFF0001000000000000000100000000000000010000000180C788000000000000FFFFFFFF0001000000000000000100000000000000010000000180C888000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180DD88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180FB7F000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 1423 + 2800FFFF01001100434D4643546F6F6C426172427574746F6E00E100000000000000000000000000000000000000000000000100000001000000018001E100000000000001000000000000000000000000000000000100000001000000018003E1000000000000020000000000000000000000000000000001000000010000000180CD7F0000000000000300000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018023E100000000000004000000000000000000000000000000000100000001000000018022E100000000000005000000000000000000000000000000000100000001000000018025E10000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001802BE10000000000000700000000000000000000000000000000010000000100000001802CE10000000000000800000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001807A8A0000000000000900000000000000000000000000000000010000000100000001807B8A0000000000000A00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180D3B00000000000000B000000000000000000000000000000000100000001000000018015B10000000000000C0000000000000000000000000000000001000000010000000180F4B00000000000000D000000000000000000000000000000000100000001000000018036B10000000000000E00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FF880000000000000F0000000000000000000000000000000001000000010000000180FE880000000000001000000000000000000000000000000000010000000100000001800B810000000000001100000000000000000000000000000000010000000100000001800C810000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180F088000000000000130000000000000000000000000000000001000000010000000180EE7F00000000000014000000000000000000000000000000000100000001000000018024E10000000000001500000000000000000000000000000000010000000100000001800A810000000000001600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018022800000000000001700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C488000000000000180000000000000000000000000000000001000000010000000180C988000000000000190000000000000000000000000000000001000000010000000180C7880000000000001A0000000000000000000000000000000001000000010000000180C8880000000000001B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180DD880000000000001C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180FB7F0000000000001D000000000000000000000000000000000100000001000000 + + + + 59399 + Build + + 955 + 00200000000000001000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F0000000000001C0000000000000000000000000000000001000000010000000180D07F0000000000001D000000000000000000000000000000000100000001000000018030800000000000001E000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6EC7040000000000006A0000000C4261746368204275696C2664000000000000000000000000010000000100000000000000000000000100000004000580C7040000000000006A0000000C4261746368204275696C266400000000000000000000000001000000010000000000000000000000010000000000058046070000000000006B0000000D42617463682052656275696C640000000000000000000000000100000001000000000000000000000001000000000005804707000000000000FFFFFFFF0B426174636820436C65616E0100000000000000010000000000000001000000000000000000000001000000000005809E8A0000000000001F0000000F4261746326682053657475702E2E2E000000000000000000000000010000000100000000000000000000000100000000000180D17F0000000000002000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000002100000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000FFFF01001900434D4643546F6F6C426172436F6D626F426F78427574746F6EBA00000000000000000000000000000000000000000000000001000000010000009600000003002050FFFFFFFF00960000000000000000000180EB880000000000002200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000230000000000000000000000000000000001000000010000000180B08A000000000000240000000000000000000000000000000001000000010000000180A8010000000000004E00000000000000000000000000000000010000000100000001807202000000000000530000000000000000000000000000000001000000010000000180BE010000000000005000000000000000000000000000000000010000000100000000000000054275696C64DC010000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000FFFFFFFF0001000000000000000100000000000000010000000180D07F000000000000FFFFFFFF00010000000000000001000000000000000100000001803080000000000000FFFFFFFF00010000000000000001000000000000000100000001809E8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D17F000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001804C8A000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001806680000000000000FFFFFFFF0001000000000000000100000000000000010000000180EB88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180C07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180B08A000000000000FFFFFFFF0001000000000000000100000000000000010000000180A801000000000000FFFFFFFF00010000000000000001000000000000000100000001807202000000000000FFFFFFFF0001000000000000000100000000000000010000000180BE01000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 583 + 1000FFFF01001100434D4643546F6F6C426172427574746F6ECF7F000000000000000000000000000000000000000000000001000000010000000180D07F00000000000001000000000000000000000000000000000100000001000000018030800000000000000200000000000000000000000000000000010000000100000001809E8A000000000000030000000000000000000000000000000001000000010000000180D17F0000000000000400000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001804C8A0000000000000500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001806680000000000000060000000000000000000000000000000001000000010000000180EB880000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180C07F000000000000080000000000000000000000000000000001000000010000000180B08A000000000000090000000000000000000000000000000001000000010000000180A8010000000000000A000000000000000000000000000000000100000001000000018072020000000000000B0000000000000000000000000000000001000000010000000180BE010000000000000C000000000000000000000000000000000100000001000000 + + + + 59400 + Debug + + 2362 + 00200000010000001900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000002500000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000002600000000000000000000000000000000010000000100000001801D800000000004002700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000002800000000000000000000000000000000010000000100000001801B80000000000000290000000000000000000000000000000001000000010000000180E57F0000000000002A00000000000000000000000000000000010000000100000001801C800000000000002B00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000002C00000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B0000020001002D0000000000000000000000000000000001000000010000000180F07F0000020000002E0000000000000000000000000000000001000000010000000180E8880000020000003700000000000000000000000000000000010000000100000001803B010000020001002F0000000000000000000000000000000001000000010000000180BB8A00000200010030000000000000000000000000000000000100000001000000FFFF01001500434D4643546F6F6C4261724D656E75427574746F6E0E01000002000100310000000D57617463682057696E646F7773000000000000000000000000010000000100000000000000000000000100000003001380D88B00000000000031000000085761746368202631000000000000000000000000010000000100000000000000000000000100000000001380D98B00000000000031000000085761746368202632000000000000000000000000010000000100000000000000000000000100000000001380CE01000000000000FFFFFFFF0C576174636820416E63686F720100000000000000010000000000000001000000000000000000000001000000000013800F0100000200010032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000004001380D28B00000000000032000000094D656D6F7279202631000000000000000000000000010000000100000000000000000000000100000000001380D38B00000000000032000000094D656D6F7279202632000000000000000000000000010000000100000000000000000000000100000000001380D48B00000000000032000000094D656D6F7279202633000000000000000000000000010000000100000000000000000000000100000000001380D58B00000000000032000000094D656D6F72792026340000000000000000000000000100000001000000000000000000000001000000000013801001000002000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000040013809307000000000000330000000855415254202326310000000000000000000000000100000001000000000000000000000001000000000013809407000000000000330000000855415254202326320000000000000000000000000100000001000000000000000000000001000000000013809507000000000000330000000855415254202326330000000000000000000000000100000001000000000000000000000001000000000013809607000000000000330000001626446562756720287072696E746629205669657765720000000000000000000000000100000001000000000000000000000001000000000013803C010000000000007200000010416E616C797369732057696E646F7773000000000000000000000000010000000100000000000000000000000100000004001380658A000000000000340000000F264C6F67696320416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380DC7F0000000000003E0000001526506572666F726D616E636520416E616C797A6572000000000000000000000000010000000100000000000000000000000100000000001380E788000000000000380000000E26436F646520436F766572616765000000000000000000000000010000000100000000000000000000000100000000001380CD01000000000000FFFFFFFF0F416E616C7973697320416E63686F7201000000000000000100000000000000010000000000000000000000010000000000138053010000000000003F0000000D54726163652057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013805401000000000000FFFFFFFF115472616365204D656E7520416E63686F720100000000000000010000000000000001000000000000000000000001000000000013802901000000000000350000001553797374656D205669657765722057696E646F77730000000000000000000000000100000001000000000000000000000001000000010013804B01000000000000FFFFFFFF1453797374656D2056696577657220416E63686F720100000000000000010000000000000001000000000000000000000001000000000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000013800189000002000000360000000F26546F6F6C626F782057696E646F7700000000000000000000000001000000010000000000000000000000010000000300138044C5000000000000FFFFFFFF0E5570646174652057696E646F77730100000000000000010000000000000001000000000000000000000001000000000013800000000000000400FFFFFFFF000000000000000000010000000000000001000000000000000000000001000000000013805B01000000000000FFFFFFFF12546F6F6C626F78204D656E75416E63686F72010000000000000001000000000000000100000000000000000000000100000000000000000005446562756764020000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC88000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801780000000000000FFFFFFFF00010000000000000001000000000000000100000001801D80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001801A80000000000000FFFFFFFF00010000000000000001000000000000000100000001801B80000000000000FFFFFFFF0001000000000000000100000000000000010000000180E57F000000000000FFFFFFFF00010000000000000001000000000000000100000001801C80000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800089000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF0000000000000000000100000000000000010000000180E48B000000000000FFFFFFFF0001000000000000000100000000000000010000000180F07F000000000000FFFFFFFF0001000000000000000100000000000000010000000180E888000000000000FFFFFFFF00010000000000000001000000000000000100000001803B01000000000000FFFFFFFF0001000000000000000100000000000000010000000180BB8A000000000000FFFFFFFF0001000000000000000100000000000000010000000180D88B000000000000FFFFFFFF0001000000000000000100000000000000010000000180D28B000000000000FFFFFFFF00010000000000000001000000000000000100000001809307000000000000FFFFFFFF0001000000000000000100000000000000010000000180658A000000000000FFFFFFFF0001000000000000000100000000000000010000000180C18A000000000000FFFFFFFF0001000000000000000100000000000000010000000180EE8B000000000000FFFFFFFF00010000000000000001000000000000000100000001800000000000000000FFFFFFFF00000000000000000001000000000000000100000001800189000000000000FFFFFFFF000100000000000000010000000000000001000000 + + + 898 + 1900FFFF01001100434D4643546F6F6C426172427574746F6ECC880000000000000000000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018017800000000000000100000000000000000000000000000000010000000100000001801D800000000000000200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF00000000000000000000000000010000000100000001801A800000000000000300000000000000000000000000000000010000000100000001801B80000000000000040000000000000000000000000000000001000000010000000180E57F0000000000000500000000000000000000000000000000010000000100000001801C800000000000000600000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF000000000000000000000000000100000001000000018000890000000000000700000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180E48B000000000000080000000000000000000000000000000001000000010000000180F07F000000000000090000000000000000000000000000000001000000010000000180E8880000000000000A00000000000000000000000000000000010000000100000001803B010000000000000B0000000000000000000000000000000001000000010000000180BB8A0000000000000C0000000000000000000000000000000001000000010000000180D88B0000000000000D0000000000000000000000000000000001000000010000000180D28B0000000000000E000000000000000000000000000000000100000001000000018093070000000000000F0000000000000000000000000000000001000000010000000180658A000000000000100000000000000000000000000000000001000000010000000180C18A000000000000110000000000000000000000000000000001000000010000000180EE8B0000000000001200000000000000000000000000000000010000000100000001800000000001000000FFFFFFFF0000000000000000000000000001000000010000000180018900000000000013000000000000000000000000000000000100000001000000 + + + + 0 + 1920 + 1080 + + + + + + 1 + 0 + + 100 + 0 + + ..\Src\main.c + 1 + 100 + 117 + 1 + + 0 + + + RTE\RTOS\rtconfig.h + 28 + 42 + 63 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\include\rtdef.h + 0 + 46 + 62 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\src\idle.c + 20 + 17 + 40 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\src\object.c + 29 + 239 + 262 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\src\components.c + 11 + 161 + 184 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\include\rtdebug.h + 0 + 112 + 135 + 1 + + 0 + + + C:\Keil_v5\ARM\PACK\RealThread\RT-Thread\3.1.3\src\kservice.c + 19 + 998 + 1021 + 1 + 1197 + 0 + + + ..\Src\v_stdio.c + 0 + 14 + 27 + 1 + + 0 + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvoptx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvoptx new file mode 100644 index 0000000000..d68f6d4cc8 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvoptx @@ -0,0 +1,629 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj; *.o + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + 0 + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 0 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\Listings\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 255 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 12 + + + + + ..\..\..\test.ini + + + + + ..\..\..\test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + UL2CM3 + UL2CM3(-S0 -C0 -P0 ) -FN1 -FC1000 -FD20000000 -FF0Vango_V85X3P -FL080000 -FS00 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + CMSIS_AGDI + -X"" -O206 -S0 -C0 -P00000000 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -TO65554 -TC10000000 -TT10000000 -TP20 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO15 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P.FLM -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM) + + + 0 + DLGUARM + + + + 0 + DLGDARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMRTXEVENTFLAGS + -L70 -Z18 -C0 -M0 -T1 + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + -T0 + + + + + + 0 + 1 + SystemCoreClock,0x0A + + + + 0 + + + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + 0 + 0 + 0 + + + + + + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK-ARM + 0 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 0 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + + + ::CMSIS + 0 + 0 + 0 + 1 + + + + ::RTOS + 1 + 0 + 0 + 1 + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvprojx b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvprojx new file mode 100644 index 0000000000..3d8f763374 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/template.uvprojx @@ -0,0 +1,659 @@ + + + + 2.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + 5060750::V5.06 update 6 (build 750)::ARMCC + 0 + + + V85X3P + Generic + Vango.V85X3P.1.1.0 + IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M0") CLOCK(6553600) ELITTLE + + + UL2CM3(-S0 -C0 -P0 -FD20000000 -FC1000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 -FP0($$Device:V85X3P$FLASH\Vango_V85X3P.FLM)) + 0 + $$Device:V85X3P$Device\Include\target.h + + + + + + + + + + $$Device:V85X3P$SVD\V85X3P.svd + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 1 + 1 + 1 + .\Listings\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + $tool\..\..\ARM\ARMCC\bin\fromelf.exe --bin --output ../template.bin Objects/template.axf + + 0 + 0 + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 0 + 0 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK-ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + 2 + 9 + 4 + 4 + 0 + 2 + 2 + 2 + 2 + 2 + 11 + + + 1 + + + + 2 + 0 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 2 + 0 + 0 + 2 + 2 + 2 + 2 + 2 + + + + + + + + + + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + ::CMSIS + + + ::RTOS + + + + + + + + + + + + + + + + + + + + + + + + RTE\File_System\FS_Config.c + + + + + + RTE\RTOS\board.c + + + + + + + + RTE\RTOS\rtconfig.h + + + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/startup_target.s b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/startup_target.s new file mode 100644 index 0000000000..f945da4501 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/startup_target.s @@ -0,0 +1,451 @@ +;/** +;* @file startup_target.s +;* @author Application Team +;* @version V1.1.0 +;* @date 2019-10-28 +;* @brief Target Devices vector table. +;******************************************************************************/ + + +; Stack Configuration +; Stack Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +__CHIPINITIAL EQU 1 + +Stack_Size EQU 0x000001000 + + AREA STACK, NOINIT, READWRITE, ALIGN=3 +Stack_Mem SPACE Stack_Size +__initial_sp + + +; Heap Configuration +; Heap Size (in Bytes) <0x0-0xFFFFFFFF:8> +; + +Heap_Size EQU 0x00000400 + + AREA HEAP, NOINIT, READWRITE, ALIGN=3 +__heap_base +Heap_Mem SPACE Heap_Size +__heap_limit + + + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; External Interrupts + DCD PMU_IRQHandler ; 0: PMU + DCD RTC_IRQHandler ; 1: RTC + DCD U32K0_IRQHandler ; 2: U32K0 + DCD U32K1_IRQHandler ; 3: U32K1 + DCD I2C_IRQHandler ; 4: I2C + DCD SPI1_IRQHandler ; 5: SPI1 + DCD UART0_IRQHandler ; 6: UART0 + DCD UART1_IRQHandler ; 7: UART1 + DCD UART2_IRQHandler ; 8: UART2 + DCD UART3_IRQHandler ; 9: UART3 + DCD UART4_IRQHandler ; 10: UART4 + DCD UART5_IRQHandler ; 11: UART5 + DCD ISO78160_IRQHandler ; 12: ISO78160 + DCD ISO78161_IRQHandler ; 13: ISO78161 + DCD TMR0_IRQHandler ; 14: TMR0 + DCD TMR1_IRQHandler ; 15: TMR1 + DCD TMR2_IRQHandler ; 16: TMR2 + DCD TMR3_IRQHandler ; 17: TMR3 + DCD PWM0_IRQHandler ; 18: PWM0 + DCD PWM1_IRQHandler ; 19: PWM1 + DCD PWM2_IRQHandler ; 20: PWM2 + DCD PWM3_IRQHandler ; 21: PWM3 + DCD DMA_IRQHandler ; 22: DMA + DCD FLASH_IRQHandler ; 23: FLASH + DCD ANA_IRQHandler ; 24: ANA + DCD 0 ; 25: Reserved + DCD 0 ; 26: Reserved + DCD SPI2_IRQHandler ; 27: SPI2 + DCD SPI3_IRQHandler ; 28: SPI3 + DCD 0 ; 29: Reserved + DCD 0 ; 30: Reserved + DCD 0 ; 31: Reserved +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + ELSE + AREA |.text|, CODE, READONLY + ENDIF + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT __main + IF (__CHIPINITIAL != 0) + IMPORT SystemInit + LDR R0, =__CHIP_INIT + BLX R0 + LDR R0, =SystemInit + BLX R0 + ENDIF + LDR R0, =__main + BX R0 + ENDP + + + AREA |.text|, CODE, READONLY + +; Dummy Exception Handlers (infinite loops which can be modified) + +NMI_Handler PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP + +Default_Handler PROC + + EXPORT PMU_IRQHandler [WEAK] + EXPORT RTC_IRQHandler [WEAK] + EXPORT U32K0_IRQHandler [WEAK] + EXPORT U32K1_IRQHandler [WEAK] + EXPORT I2C_IRQHandler [WEAK] + EXPORT SPI1_IRQHandler [WEAK] + EXPORT UART0_IRQHandler [WEAK] + EXPORT UART1_IRQHandler [WEAK] + EXPORT UART2_IRQHandler [WEAK] + EXPORT UART3_IRQHandler [WEAK] + EXPORT UART4_IRQHandler [WEAK] + EXPORT UART5_IRQHandler [WEAK] + EXPORT ISO78160_IRQHandler [WEAK] + EXPORT ISO78161_IRQHandler [WEAK] + EXPORT TMR0_IRQHandler [WEAK] + EXPORT TMR1_IRQHandler [WEAK] + EXPORT TMR2_IRQHandler [WEAK] + EXPORT TMR3_IRQHandler [WEAK] + EXPORT PWM0_IRQHandler [WEAK] + EXPORT PWM1_IRQHandler [WEAK] + EXPORT PWM2_IRQHandler [WEAK] + EXPORT PWM3_IRQHandler [WEAK] + EXPORT DMA_IRQHandler [WEAK] + EXPORT FLASH_IRQHandler [WEAK] + EXPORT ANA_IRQHandler [WEAK] + EXPORT SPI2_IRQHandler [WEAK] + EXPORT SPI3_IRQHandler [WEAK] + +PMU_IRQHandler +RTC_IRQHandler +U32K0_IRQHandler +U32K1_IRQHandler +I2C_IRQHandler +SPI1_IRQHandler +UART0_IRQHandler +UART1_IRQHandler +UART2_IRQHandler +UART3_IRQHandler +UART4_IRQHandler +UART5_IRQHandler +ISO78160_IRQHandler +ISO78161_IRQHandler +TMR0_IRQHandler +TMR1_IRQHandler +TMR2_IRQHandler +TMR3_IRQHandler +PWM0_IRQHandler +PWM1_IRQHandler +PWM2_IRQHandler +PWM3_IRQHandler +DMA_IRQHandler +FLASH_IRQHandler +ANA_IRQHandler +SPI2_IRQHandler +SPI3_IRQHandler + B . + + ENDP + + + ALIGN + + +; User Initial Stack & Heap + + IF :DEF:__MICROLIB + + EXPORT __initial_sp + EXPORT __heap_base + EXPORT __heap_limit + + ELSE + + IMPORT __use_two_region_memory + EXPORT __user_initial_stackheap + +__user_initial_stackheap PROC + LDR R0, = Heap_Mem + LDR R1, =(Stack_Mem + Stack_Size) + LDR R2, = (Heap_Mem + Heap_Size) + LDR R3, = Stack_Mem + BX LR + ENDP + + ALIGN + + ENDIF + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Chip init. +;; 1. Load flash configuration +;; 2. Load ANA_REG(B/C/D/E) information +;; 3. Load ANA_REG10 information + IF (__CHIPINITIAL != 0) + AREA |.ARM.__AT_0xC0|, CODE, READONLY + +__CHIP_INIT PROC +CONFIG1_START + ;-------------------------------; + ;; 1. Load flash configuration + ; Unlock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x55AAAA55 + STR R1, [R0] + ; Load configure word 0 to 7 + ; Compare bit[7:0] + LDR R0, =0x00080E00 + LDR R1, =0x20 + LDR R2, =0x000FFFE8 + LDR R3, =0x000FFFF0 + LDR R4, =0x0 + LDR R7, =0x0FF +FLASH_CONF_START_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_AGAIN_1 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_1 + BNE FLASH_CONF_WHILELOOP_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_1 + B FLASH_CONF_START_1 +FLASH_CONF_END_1 + ; Load configure word 8 to 11 + ; Compare bit 31,24,23:16,8,7:0 + LDR R1, =0x30 + LDR R7, =0x81FF81FF +FLASH_CONF_START_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 + BNE FLASH_CONF_AGAIN_1 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_AGAIN_2 + LDR R5, [R0] + STR R4, [R2] + STR R5, [R3] + LDR R6, [R3] + ANDS R5, R7 + ANDS R6, R7 + CMP R5, R6 +FLASH_CONF_WHILELOOP_2 + BNE FLASH_CONF_WHILELOOP_2 + ADDS R4, #4 + ADDS R0, #4 + CMP R1, R4 + BEQ FLASH_CONF_END_2 + B FLASH_CONF_START_2 +FLASH_CONF_END_2 + ; Lock flash + LDR R0, =0x000FFFE0 + LDR R1, =0x0 + STR R1, [R0] + ;-------------------------------; + ;; 2. Load ANA_REG(B/C/D/E) information +CONFIG2_START + LDR R4, =0x4001422C + LDR R5, =0x40014230 + LDR R6, =0x40014234 + LDR R7, =0x40014238 + LDR R0, =0x80DC0 + LDR R0, [R0] + LDR R1, =0x80DC4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DCC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM1_OK + B ANADAT_CHECKSUM1_ERR +ANADAT_CHECKSUM1_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM1_ERR + LDR R0, =0x80DD0 + LDR R0, [R0] + LDR R1, =0x80DD4 + LDR R1, [R1] + ADDS R2, R0, R1 + ADDS R2, #0x0FFFFFFFF + MVNS R2, R2 + LDR R3, =0x80DDC + LDR R3, [R3] + CMP R3, R2 + BEQ ANADAT_CHECKSUM2_OK + B ANADAT_CHECKSUM2_ERR +ANADAT_CHECKSUM2_OK + ; ANA_REGB + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R4] + ; ANA_REGC + LDR R1, =0x0FF00 + ANDS R1, R0 + LSRS R1, R1, #8 + STR R1, [R5] + ; ANA_REGD + LDR R1, =0x0FF0000 + ANDS R1, R0 + LSRS R1, R1, #16 + STR R1, [R6] + ; ANA_REGE + LDR R1, =0x0FF000000 + ANDS R1, R0 + LSRS R1, R1, #24 + STR R1, [R7] + B CONFIG3_START +ANADAT_CHECKSUM2_ERR + B ANADAT_CHECKSUM2_ERR + ;-------------------------------; + ;; 2. Load ANA_REG10 information +CONFIG3_START + LDR R7, =0x40014240 + LDR R0, =0x80DE0 + LDR R0, [R0] + LDR R1, =0x80DE4 + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM1_OK + B ANADAT10_CHECKSUM1_ERR +ANADAT10_CHECKSUM1_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM1_ERR + LDR R0, =0x80DE8 + LDR R0, [R0] + LDR R1, =0x80DEC + LDR R1, [R1] + MVNS R1, R1 + CMP R1, R0 + BEQ ANADAT10_CHECKSUM2_OK + B ANADAT10_CHECKSUM2_ERR +ANADAT10_CHECKSUM2_OK + ; ANA_REG10 + LDR R1, =0x0FF + ANDS R1, R0 + STR R1, [R7] + BX LR +ANADAT10_CHECKSUM2_ERR + B ANADAT10_CHECKSUM2_ERR + + NOP + ENDP + ENDIF + + END + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvopt b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvopt new file mode 100644 index 0000000000..69cf2a9460 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvopt @@ -0,0 +1,705 @@ + + + + 1.0 + +
### uVision Project, (C) Keil Software
+ + + *.c + *.s*; *.src; *.a* + *.obj + *.lib + *.txt; *.h; *.inc + *.plm + *.cpp + + + + 0 + 0 + + + + template + 0x4 + ARM-ADS + + 6553600 + + 1 + 1 + 1 + 0 + + + 1 + 65535 + 0 + 0 + 0 + + + 79 + 66 + 8 + .\ + + + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 1 + 0 + 0 + 0 + 0 + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + + + 1 + 0 + 1 + + 0 + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 1 + 0 + 0 + 0 + 12 + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + 0 + DLGTARM + (1010=-1,-1,-1,-1,0)(1007=-1,-1,-1,-1,0)(1008=-1,-1,-1,-1,0) + + + 0 + ARMDBGFLAGS + + + + 0 + DLGUARM + + + + 0 + CMSIS_AGDI + -X"CMSIS-DAP" -U000014A8F3A5 -O207 -S0 -C0 -P00 -N00("ARM CoreSight SW-DP") -D00(0BB11477) -L00(0) -FO15 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00 -FL080000 + + + 0 + UL2CM3 + -O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + + + + + 0 + + + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + Template/User + 1 + 0 + 0 + 0 + + 1 + 1 + 1 + 0 + 0 + 0 + 0 + 59 + 59 + 0 + ..\Src\main.c + main.c + 0 + 0 + + + 1 + 2 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\target_isr.c + target_isr.c + 0 + 0 + + + 1 + 3 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Src\v_stdio.c + v_stdio.c + 0 + 0 + + + 1 + 4 + 5 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\Inc\lib_conf.h + lib_conf.h + 0 + 0 + + + + + Template/MDK_ARM + 1 + 0 + 0 + 0 + + 2 + 5 + 2 + 0 + 0 + 0 + 0 + 106 + 113 + 0 + .\startup_target.s + startup_target.s + 0 + 0 + + + 2 + 6 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + system_target.c + 0 + 0 + + + + + FWLib + 1 + 0 + 0 + 0 + + 3 + 7 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + lib_adc.c + 0 + 0 + + + 3 + 8 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + lib_adc_tiny.c + 0 + 0 + + + 3 + 9 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + lib_ana.c + 0 + 0 + + + 3 + 10 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + lib_clk.c + 0 + 0 + + + 3 + 11 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + lib_crypt.c + 0 + 0 + + + 3 + 12 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + lib_dma.c + 0 + 0 + + + 3 + 13 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + lib_flash.c + 0 + 0 + + + 3 + 14 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + lib_gpio.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + lib_i2c.c + 0 + 0 + + + 3 + 16 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + lib_iso7816.c + 0 + 0 + + + 3 + 17 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + lib_lcd.c + 0 + 0 + + + 3 + 18 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + lib_misc.c + 0 + 0 + + + 3 + 19 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + lib_pmu.c + 0 + 0 + + + 3 + 20 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + lib_pwm.c + 0 + 0 + + + 3 + 21 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + lib_rtc.c + 0 + 0 + + + 3 + 22 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + lib_spi.c + 0 + 0 + + + 3 + 23 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + lib_tmr.c + 0 + 0 + + + 3 + 24 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + lib_u32k.c + 0 + 0 + + + 3 + 25 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + lib_uart.c + 0 + 0 + + + 3 + 26 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + lib_version.c + 0 + 0 + + + 3 + 27 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + lib_wdt.c + 0 + 0 + + + 3 + 28 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + lib_cmp.c + 0 + 0 + + + + + FWLib/Device + 1 + 0 + 0 + 0 + + 4 + 29 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + lib_CodeRAM.c + 0 + 0 + + + 4 + 30 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + lib_cortex.c + 0 + 0 + + + 4 + 31 + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + lib_LoadNVR.c + 0 + 0 + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvproj b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvproj new file mode 100644 index 0000000000..f673bbea5e --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARMv4/template.uvproj @@ -0,0 +1,584 @@ + + + + 1.1 + +
### uVision Project, (C) Keil Software
+ + + + template + 0x4 + ARM-ADS + + + V85X3P + Vango + IRAM(0x20000000-0x2000FFFF) IROM(0x0-0x7FFFF) CLOCK(6553600) CPUTYPE("Cortex-M0") ESEL ELITTLE + + + UL2CM3(-O207 -S0 -C0 -FO7 -FD20000000 -FC8000 -FN1 -FF0Vango_V85X3P -FS00000000 -FL040000) + 0 + + + + + + + + + + + SFD\Vango\V85X3P\V85X3P.SFR + 0 + 0 + + + + + + + 0 + 0 + 0 + 0 + 1 + + .\Objects\ + template + 1 + 0 + 0 + 1 + 1 + .\ + 1 + 0 + 0 + + 0 + 0 + + + 0 + 0 + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + + 0 + 0 + + 0 + + + + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 3 + + + 1 + + + SARMCM3.DLL + -REMAP + DARMCM1.DLL + -pCM0 + SARMCM3.DLL + + TARMCM1.DLL + -pCM0 + + + + 1 + 0 + 0 + 0 + 16 + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 1 + 0 + + 0 + 12 + + + + + + + + + + + + + ../../../test.ini + BIN\CMSIS_AGDI.dll + + + + + 1 + 0 + 0 + 1 + 1 + 4096 + + 1 + BIN\UL2CM3.DLL + "" () + + + + + 0 + + + + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 0 + 0 + "Cortex-M0" + + 0 + 0 + 0 + 1 + 1 + 0 + 0 + 0 + 0 + 0 + 8 + 1 + 1 + 0 + 3 + 3 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 1 + 0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 1 + 0x0 + 0x80000 + + + 0 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x0 + + + 1 + 0x0 + 0x80000 + + + 1 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x0 + 0x0 + + + 0 + 0x20000000 + 0x10000 + + + 0 + 0x0 + 0x0 + + + + + + 1 + 1 + 0 + 0 + 1 + 0 + 0 + 0 + 0 + 0 + 2 + 0 + 0 + 0 + 0 + + + USE_TARGET_DRIVER + + ..\Inc;..\Src;..\..\..\..\Libraries\Lib_Driver\inc;..\..\..\..\Libraries\Lib_Driver\src;..\..\..\..\Libraries\CMSIS\device;..\..\..\..\Libraries\CMSIS\include + + + + 1 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + 0 + + + + + + + + + 1 + 0 + 0 + 0 + 1 + 0 + 0x00000000 + 0x20000000 + + + + + + + + + + + + + Template/User + + + main.c + 1 + ..\Src\main.c + + + target_isr.c + 1 + ..\Src\target_isr.c + + + v_stdio.c + 1 + ..\Src\v_stdio.c + + + lib_conf.h + 5 + ..\Inc\lib_conf.h + + + + + Template/MDK_ARM + + + startup_target.s + 2 + .\startup_target.s + + + system_target.c + 1 + ..\..\..\..\Libraries\CMSIS\device\system_target.c + + + + + FWLib + + + lib_adc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc.c + + + lib_adc_tiny.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_adc_tiny.c + + + lib_ana.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_ana.c + + + lib_clk.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_clk.c + + + lib_crypt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_crypt.c + + + lib_dma.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_dma.c + + + lib_flash.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_flash.c + + + lib_gpio.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_gpio.c + + + lib_i2c.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_i2c.c + + + lib_iso7816.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_iso7816.c + + + lib_lcd.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_lcd.c + + + lib_misc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_misc.c + + + lib_pmu.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pmu.c + + + lib_pwm.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_pwm.c + + + lib_rtc.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_rtc.c + + + lib_spi.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_spi.c + + + lib_tmr.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_tmr.c + + + lib_u32k.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_u32k.c + + + lib_uart.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_uart.c + + + lib_version.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_version.c + + + lib_wdt.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_wdt.c + + + lib_cmp.c + 1 + ..\..\..\..\Libraries\Lib_Driver\src\lib_cmp.c + + + + + FWLib/Device + + + lib_CodeRAM.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_CodeRAM.c + + + lib_cortex.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_cortex.c + + + lib_LoadNVR.c + 1 + ..\..\..\..\Libraries\CMSIS\device\lib_LoadNVR.c + + + + + + + +
diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/main.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/main.c new file mode 100644 index 0000000000..b953255528 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/main.c @@ -0,0 +1,185 @@ +/** + * @file main.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main program body. +******************************************************************************/ + +/* Includes ------------------------------------------------------------------*/ +#include "main.h" +#include "rtthread.h" + +/* Private functions ---------------------------------------------------------*/ + +volatile unsigned char test_success; + +/** + * @brief Clock_Init: + - PLLL input clock : External 32K crystal + - PLLL frequency : 26M + - AHB Clock source : PLLL + - AHB Clock frequency : 26M (PLLL divided by 1) + - APB Clock frequency : 13M (AHB Clock divided by 2) + * @param None + * @retval None + */ +void Clock_Init(void) +{ +// <<< Use Configuration Wizard in Context Menu >>> + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; +//the buffer size of console <1-1024> +//the buffer size of console +// +//AHBSource +CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; +// + + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +// <<< end of configuration section >>> +} +uint32_t SystemCoreClock=26214400; +void SystemCoreClockUpdate(void) +{ + CLK_InitTypeDef CLK_Struct; + + CLK_Struct.ClockType = CLK_TYPE_AHBSRC \ + |CLK_TYPE_PLLL \ + |CLK_TYPE_HCLK \ + |CLK_TYPE_PCLK; + CLK_Struct.AHBSource = CLK_AHBSEL_LSPLL; + CLK_Struct.PLLL.Frequency = CLK_PLLL_26_2144MHz; + CLK_Struct.PLLL.Source = CLK_PLLLSRC_XTALL; + CLK_Struct.PLLL.State = CLK_PLLL_ON; + CLK_Struct.HCLK.Divider = 1; + CLK_Struct.PCLK.Divider = 2; + CLK_ClockConfig(&CLK_Struct); +} + + +ALIGN(RT_ALIGN_SIZE) +static char thread1_stack[512]; +static struct rt_thread thread1; +static char thread2_stack[512]; +static struct rt_thread thread2; + + +/** + * @brief Main program. + * @param None + * @retval None + */ + + +static void main1_entry(void *parameter) +{ + GPIO_InitType GPIOInitStruct; + + GPIOInitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIOInitStruct.GPIO_Pin = GPIO_Pin_5; + GPIOBToF_Init(GPIOD,&GPIOInitStruct); + + while (1) + { + GPIO_WriteBit(GPIO_D,5,1); + rt_thread_mdelay(1000); + GPIO_WriteBit(GPIO_D,5,0); +// CORTEX_Delay_nSysClock(26214400/10); + rt_thread_mdelay(1000); + } +} +static void main2_entry(void *parameter) +{ + GPIO_InitType GPIOInitStruct; + + GPIOInitStruct.GPIO_Mode = GPIO_MODE_OUTPUT_CMOS; + GPIOInitStruct.GPIO_Pin = GPIO_Pin_2; + GPIOBToF_Init(GPIOD,&GPIOInitStruct); + + while (1) + { + GPIO_WriteBit(GPIO_D,2,1); + rt_thread_mdelay(250); + GPIO_WriteBit(GPIO_D,2,0); +// CORTEX_Delay_nSysClock(26214400/10); + rt_thread_mdelay(250); + } +} + +static void hook_of_scheduler(struct rt_thread* from, struct rt_thread* to) +{ + rt_kprintf("from: %s --> to: %s \n", from->name , to->name); +} + +int main(void) +{ + GPIO_InitType GPIOInitStruct; + + test_success = 0; + + Clock_Init(); + Stdio_Init(); + LCD->CTRL = 0X84; + + /* ÉèÖõ÷¶ÈÆ÷¹³×Ó */ + rt_scheduler_sethook(hook_of_scheduler); + + rt_thread_init(&thread1, + "thread1", + main1_entry, + RT_NULL, + &thread1_stack[0], + sizeof(thread1_stack), + 4, 5); + rt_thread_startup(&thread1); + + rt_thread_init(&thread2, + "thread2", + main2_entry, + RT_NULL, + &thread2_stack[0], + sizeof(thread2_stack), + 4, 5); + rt_thread_startup(&thread2); + + +// test_success = 1; +// while (1) +// { +// WDT_Clear(); +// } +} + + + +#ifndef ASSERT_NDEBUG +/** + * @brief Reports the name of the source file and the source line number + * where the assert_errhandler error has occurred. + * @param file: pointer to the source file name + * @param line: assert_errhandler error line source number + * @retval None + */ +void assert_errhandler(uint8_t* file, uint32_t line) +{ + /* User can add his own implementation to report the file name and line number, + ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */ + + /* Infinite loop */ + while (1) + { + } +} +#endif + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/target_isr.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/target_isr.c new file mode 100644 index 0000000000..cfbf5c945d --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/target_isr.c @@ -0,0 +1,305 @@ +/** + * @file target_isr.c + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief Main Interrupt Service Routines. +******************************************************************************/ + +#include "target_isr.h" +#include "main.h" + +/** + * @brief This function handles NMI exception. + * @param None + * @retval None + */ +void NMI_Handler(void) +{ + while(1) + {} +} + +/** + * @brief This function handles Hard Fault exception. + * @param None + * @retval None + */ +//void HardFault_Handler(void) +//{ +// while(1) +// {} +//} + +/** + * @brief This function handles SVCall exception. + * @param None + * @retval None + */ +void SVC_Handler(void) +{ +} + +/** + * @brief This function handles PendSVC exception. + * @param None + * @retval None + */ +//void PendSV_Handler(void) +//{ +//} + +/** + * @brief This function handles SysTick Handler. + * @param None + * @retval None + */ +//void SysTick_Handler(void) +//{ +//} + +/** + * @brief This function handles PMU interrupt request. + * @param None + * @retval None + */ +void PMU_IRQHandler(void) +{ +} + +/** + * @brief This function handles RTC interrupt request. + * @param None + * @retval None + */ +void RTC_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K0 interrupt request. + * @param None + * @retval None + */ +void U32K0_IRQHandler(void) +{ +} + +/** + * @brief This function handles U32K1 interrupt request. + * @param None + * @retval None + */ +void U32K1_IRQHandler(void) +{ +} + +/** + * @brief This function handles I2C interrupt request. + * @param None + * @retval None + */ +void I2C_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI1 interrupt request. + * @param None + * @retval None + */ +void SPI1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART0 interrupt request. + * @param None + * @retval None + */ +void UART0_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART1 interrupt request. + * @param None + * @retval None + */ +void UART1_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART2 interrupt request. + * @param None + * @retval None + */ +void UART2_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART3 interrupt request. + * @param None + * @retval None + */ +void UART3_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART4 interrupt request. + * @param None + * @retval None + */ +void UART4_IRQHandler(void) +{ +} + +/** + * @brief This function handles UART5 interrupt request. + * @param None + * @retval None + */ +void UART5_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78160 interrupt request. + * @param None + * @retval None + */ +void ISO78160_IRQHandler(void) +{ +} + +/** + * @brief This function handles ISO78161 interrupt request. + * @param None + * @retval None + */ +void ISO78161_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR0 interrupt request. + * @param None + * @retval None + */ +void TMR0_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR1 interrupt request. + * @param None + * @retval None + */ +void TMR1_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR2 interrupt request. + * @param None + * @retval None + */ +void TMR2_IRQHandler(void) +{ +} + +/** + * @brief This function handles TMR3 interrupt request. + * @param None + * @retval None + */ +void TMR3_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM0 interrupt request. + * @param None + * @retval None + */ +void PWM0_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM1 interrupt request. + * @param None + * @retval None + */ +void PWM1_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM2 interrupt request. + * @param None + * @retval None + */ +void PWM2_IRQHandler(void) +{ +} + +/** + * @brief This function handles PWM3 interrupt request. + * @param None + * @retval None + */ +void PWM3_IRQHandler(void) +{ +} + +/** + * @brief This function handles DMA interrupt request. + * @param None + * @retval None + */ +void DMA_IRQHandler(void) +{ +} + +/** + * @brief This function handles FLASH interrupt request. + * @param None + * @retval None + */ +void FLASH_IRQHandler(void) +{ +} + +/** + * @brief This function handles ANA interrupt request. + * @param None + * @retval None + */ +void ANA_IRQHandler(void) +{ +} + +/** + * @brief This function handles SPI2 interrupt request. + * @param None + * @retval None + */ +void SPI2_IRQHandler(void) +{ +} + + +/** + * @brief This function handles SPI3 interrupt request. + * @param None + * @retval None + */ +void SPI3_IRQHandler(void) +{ +} + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/v_stdio.c b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/v_stdio.c new file mode 100644 index 0000000000..7d100843d3 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/Src/v_stdio.c @@ -0,0 +1,54 @@ +/** + * @file v_stdio.h + * @author Application Team + * @version V1.1.0 + * @date 2019-10-28 + * @brief standard printf. +******************************************************************************/ + +#include "v_stdio.h" +#include "target.h" +#include +#ifdef __GNUC__ + #include +#endif /* __GNUC__ */ + +/** + * @brief printf init. + * @param None + * @retval None + */ +void Stdio_Init(void) +{ + UART5->BAUDDIV = CLK_GetPCLKFreq()/115200; + UART5->CTRL = UART_CTRL_TXEN; +} + +#ifdef __GNUC__ +int _write(int32_t fd, char* ptr, int32_t len) +{ + uint32_t i; + + if (fd == STDOUT_FILENO || fd == STDERR_FILENO) + { + i = 0UL; + while (i < len) + { + UART5->DATA = ptr[i++]; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + } + } + return len; +} +#else +int fputc(int ch, FILE *f) +{ + UART5->DATA = ch; + while (!(UART5->STATE&UART_STATE_TXDONE)); + UART5->STATE = UART_STATE_TXDONE; + return ch; +} +#endif /* __GNUC__ */ + +/*********************************** END OF FILE ******************************/ diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Tmp_Kill.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Tmp_Kill.bat new file mode 100644 index 0000000000..111e1291a2 --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Tmp_Kill.bat @@ -0,0 +1,3 @@ +@echo off +del /s /a "*.TMP" 2>nul +exit diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/keil_Kill.bat b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/keil_Kill.bat new file mode 100644 index 0000000000..ba17d320fe --- /dev/null +++ b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/keil_Kill.bat @@ -0,0 +1,37 @@ +@echo off +set n=%USERNAME% +del *.%n% /s + +del *.hex /s +del *.bak /s +del *.ddk /s +del *.edk /s +del *.lst /s +del *.lnp /s +del *.mpf /s +del *.mpj /s +del *.obj /s +del *.omf /s +del *.plg /s +del *.rpt /s +del *.tmp /s +del *.__i /s +del *.crf /s +del *.o /s +del *.d /s +del *.axf /s +del *.tra /s +del *.dep /s +del JLinkLog.txt /s +del *.iex /s +del *.htm /s +rem del *.sct /s +del *.map /s +del *.ini /s +del *.scvd /s + +for /r %%d in (.) do rd /s /q "%%d\Listings" 2>nul +for /r %%d in (.) do rd /s /q "%%d\RTE" 2>nul +for /r %%d in (.) do rd /s /q "%%d\Objects" 2>nul + +exit -- Gitee

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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc_tiny.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_adc_tiny.crf new file mode 100644 index 0000000000000000000000000000000000000000..906280ec42ef50bc2aef2199adbcbd3feed154fd GIT binary patch literal 199266 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 z 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 literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_ana.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_ana.crf new file mode 100644 index 0000000000000000000000000000000000000000..7d03d6ee0399245c206cf2489e75e5bccc8a776a GIT binary patch literal 199624 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 S`^7jc%O2ePrBdk&CHfysF#6^I literal 0 HcmV?d00001 diff --git a/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_clk.crf b/bsp/Vango-V85xxp/V85X3P_Lib_V1.1/Project_RT/template/template/MDK-ARM/Objects/lib_clk.crf new file mode 100644 index 0000000000000000000000000000000000000000..422e58f57988e8e087a0fd9ec902a5874e7e7b30 GIT binary patch literal 203765 zcmbq+34G*5mH%&!%+1Vj4Z|VgfhS^j=a`HF(&_F@+DW>b?oKj;U>jxvL}rp9$#8k> zx*WQztnMM={=E;@WmQmF7j(q~55xnHU025YS^*UmSub4uf4^1rtK;{p`gLa4kCTvk z?|t8^yXw`e`h9(E6fIvCoqFq&qf_pCcC`GNr=NbF{{QIA1@lw$Gt&#_;lDcN`I*b6 z=g*s&-E-bP{JCe}C8u8;z3q=*`R|?x|2yNp?a}gQXi@x!kuHt3sx1ocJGgiHyv3>c zi>4PL`_@>tbYCr6K2&AaztS!OUcW?^yf%q)$$@f|<;sgNDLuN5ud zk&s=oG5Z&07CI=Vg_*fo+oCVu*N&Et{GU+w%(bE4&y{}b%g{QfHVE_h2}GwQlc?jd0@J;cltsYpqs;G_njOqKMDq*ie*!q zny|qFe`=|R)kmiGvShX9T1LtG?B2Vlvp6$*r48}8 z!^?WAlOC4&d-fl&br0NkX0$x-Zx|l)_sm~;fIUlR|LnuFeeZs!+RBHg{la}y3m4nk z_uh9#v^=+D>n}PmGiQr`>hO%8DL6HM#eL6-miI1M`OL!Hw!!>>t$*zB^zYlV*Oo3F zUgr1DEI8)heR#?b>_2ELf8t?EU%ua#e*ED{&o4TbKjZME7Y@wWx}SD<(u?~!IP3QQ zgu^TJgS`c3Mt$aCicifuz3ukHYjS4J()M3`c)7oPucQCT_nj3jFZi3hI|uB;YGQP5 zYHw|#iQ;=pyejyY!vZMH?VWBG$83NvWsDeU3$Tt@oW26`dLDWm^1rP6f@ophEQt1) z+V4AbOw@>?Wl^-D(;2M}bxNZbTOl@vsSEZ^S7#OZU5AcSE|KXMz)*>@wlOv? z(}ql1vt5#DJB{(vIkF~^$&9(ylq?@XE z?{ZTMQq?Ei)LxnTaW}P3rhd##?U$(^J+ws`wz1l(bC_0UY)=uCC4(j_?Xjlf-sB`I z&W%o@GWiH6QCYmfBsM0;6s9GPM1^UIBT-?x;tF%UsfO}cQRemnQwGDM#ny;S{e~zK&;}EX2Dz$d> zGMg}L5ngfVF-qcC7*TIlge4=L9hF+8SuI8XfYOkN>pLB}b?96iz2VRaD)p#Nhr0~+ z_K8ZfRjt>eedv!3k=ae1PPNt^=QejKPNz|9wJU|FW`l^d=r8P&lp0IXO55`BIQ2b;wkqQ`OUp~z?&Y??XuY=`Bb@88PvR zP9n@_;**?2n9jtF1wd!Cf&oMp!KGppV5i=!DXJjO_K;L@40%YZP|ozLLN?|+LMkt3c}OZl zJ}XqNo^7O9E;?J#wbe`>hNP7J*hf>^9`MnWx*wtut0{%rhIJX<>1LS(RfN~4DXIit zou;S){41{-nZLp6Nuf#`yuM&qGq020SFCDsS2( z3a-&^ir({g=~QU=8?i(dD`%P|n34P}hZ&thK)gMj3f{N65P})W&o#+FEmwz!1;!pv zGPtKq@wBQtI>mN<3@Z@!`u%%+t1Xp3%|fSWUE5M{ZSq7jo-;>pBc+KVQ!8;h47Vv}@=%FR|T2JwG5kTrd*h+?_e zUjC(6TH`~}JMG0(k|X-{p~oo|$IJDmN5{Y+$BbOU4k}r|ZcLW@F&>zRTN6pff)NYK zb_K0Ay24K7`g6QhDMv3AMaS(PmUpERSCXiFYe6V2EY-&v)zL~5#kAJ+H!5ct2`4v5 zD}^Azu#!|e%3`xL(iv#MfK9d_L?A}e7#5iiAKIuaUWFxLYYY>Yo;0~89j(?Xku_Fx z8CYziUntUAdkL*b!}VsVqUf(NeGNf%hv2s+`rN|A4=dn0|h5lqd!u0wb5!u z6|_mI_an=&`-EPR{M96Lk<4S7`J;+iB;S{0zJknKH1o$5^DZWT3|31sppIrVP}+Zc z=n2Y-yOv>0f)$PVxjoYh3$4YeJ(o1*u-=`XkG9#OED4HUhb4jMd>uFW5w3a=t5nuUr_bhn4h5sEGpX~qEwW~xv)=`%)QIj98lbAG|s&VoFUYg ztQdIbsCu~3Dm5{bSjmK!$-lweDZ#(GY}JJa7WT|XAGe3kTD^f5V2!7f!`0|9ZbAiH z2#ccyug9@=LbWv%ooXkPk?=GpVQdIp%EF-MWQ&+yIsU^Zfnl~XHdHB>G01U9zZ!PS zT*C7J?)*UX?>Z~rUbgD8seK2hqkm0swML@1kZS`v=<@HzT>s)|t~aC2_P9N?v(b(? zl1p`~p$^WQ=yzJ%4`ZD7VQ^m~I`R*ft)8D=fZGy2g$+7w`9kz^TUBZF+~@=wxYa7Q z;V{}5owkM}$OFq(A{)`Gm>^)0urRe4U5kV@F$cDV(R-YPnc3(T8+DwhKhvlWNmN=Q zQISB@KPQM#g9M`9Bt~17KRhdPYL1;qM>#7O<76sV8kJhP2>(=se9Pf=CC20EPW#V# zbo-$r6txG`Iu@h$-(%QgS%25Zq8ZpG(J-S|k#I8l#NY|EZQU6MXJ@DOPwzcTY+46T zN+h0xiQyEHtw)!w$B48rJ%8Es-duDKEQ-^YPecdpKTFXo>_5+qF17!xVG9r0lUPN+ zU$*>$XqTqq&&$PjT)H#XaafhU!Q0JrClYI&#@s?wN~MlrBzSHj^<2TbEtN{%vl6Lr zF9NrgN+s`jB6ULWK0B34-l4-N;Ek#vuV22hikV?pm-zL|?GoRnOYK$5QEH#krG`H* zk3Io~s?<1h$x^%3%<3W$@WSTTdD3b1oBkJ8-yp3%Q(Jw5WA*9U%o~<3Z%5zovgL84 z5jQ8WO<I3LS`d6}s+ktmzf zhEysG<>*AJY)(-smAuxfOyJ7qbX_8O1>DW6ej$=(>6@>+0>guJGsO zm|V0^R;})2b$!O{6ytQEMwG&lAtE!km6=PAX`7-`&fxfS`|_S@3oGNdVRjcOFTQ>G zIvx=;Co1J!bQk6U!&n02`+bag^gf%h)o4bq^D!2%IItN@VEjiPV=vZ+C_viy=gTdV z`oz#L(oea4`HE^o_zzXT7pEiQB;`(juH#zzJ+wxp zSOqbqYZ$V{Y7+~hS71(wIahLp#5IdfC?VlgA67nk0r{A-HJ@C*vNh6(zG;KEMrg)m zSPIBot!g@b50Cu&cKkA*1Xt{#CRASPmvS7ve$ z<8Ol;rBPYMH)L`UnH7XWM!-&OZ8dV zEJP^=SWq|B+73}S&1@E;>^8e{U47h~vwmWj4PAJMbF@blaf+pObwW1#$!r#)Jm2kL zVnl&+uhiaI*)4MPP!AP7B zMEJ3XVYE_dl<`j>JetKogynAW2^)w|uT^$cWlf!x%|et)VjN^n+B=0mOqj7FgHHLH zs{%6=e1THD-IO_bb~X!9hTJh-OjjKQ(-cQXS)|xrbFfT|{2nf1{h5E7j_2f;t>`JW zo1@VhJxe2Hv<}B29SCx&ec6hY6Gghs;<^20D^|gl>QMAuvzCgZcf{J@WGe$Is)t(O zP8+Ya5#S+5l$*M8F$3=jagFY5)yLuS6@~Gpu3W@=r#1N4cEPc{6JA+?w5d`jv5>5DHO7Jb+maU&+zZiz5_FRGaN_7uXhWHud(igp zQgap%%Q3nS1|j4s+L55rZbN;x8B2w13E?sG7X8KMfLze6Tt|PMpjo*^^puX~l5*nu zfCz2Gii?p~EazioIg4cl!l+b9TSwKg&WY(gi*xe`=5osp8WrXGL_ToJ)@1xzr#?K4 zc{$o^N};l=q)wtbBgI-7$7|8k&BSI=+ao-c5nk?-vKZ)~= z*@ss2hyYW1?>CF%8F25P-aj{gWoOUDQ?nOM@5NE>NeT(aouVS3&w!n-!9JqEu0#8k zs_BPj1fSJNf27$zs@ShVl}Oz3t?`peBR62KgxeY3rX@bDBwm7%Qc583Q0Pc@kRNE7yOqp~ zkS{5Nd);;6e#E^o8a}vd>?P!@s`GP{Z%+!|9S()8~ zDCu~Fie8Q3Ln^s<#l|>QG@9rFR9j5i+?b!9-hV)kZ0O@#G;u@g;03WLj+#zXUhsQY z92uty!1n$FQ62q7`pEBHaZCbpXl8K%?wS)c!)6Ot5WkwpOL^MK%juFoj?pJRu*8dInUaTl+)XJU5W`LBmF_(Yr%(Fv ztdxG~u(MJI;F)uAwnZOJqzvM`#^u=_eI$`mjQ%B&GKA%#D^-dC^&zWS$xv5TSi>DQ;Bi+9TzBCx>e*TXg|jq~1;;I>S%u zltyq0tv$KCCm=?EQ&3obr@YAjKdhAd-iLHOAqByDMGRwcs53-DNRgv#VwSFWg5&`IK*_FGr3WW#+TOH+8S-@4ND znwM&&Z-vqv8|f$Aq*k+paU$-7f~(wWn=BmSa-Tf#QLzCM6Ay^ zNd;nk!c8L9N8BW0eaKBB7Q+N()1dXe#QM0KL@YN$y~Mi1a3-C^YFQ#!bXFdAx#75chCoveYWc)SGnIxC7m%*lI;zuv5g?ey?pz zV~0>tbJN7&TGyk6m6zV=BAXRkEAG(Gw9{~8##$eqg<)tD~haAH_T{7;1 z_pV%7N8{Ou4Z3WI_liEcSC>2(U~Y7roq(V-aV#54tgY6IlRL+ObG6OJzWr;R%X?R@ z1DmRyC&gWU!@X7;8g-;`Vt{I9bUnE&6~3C!sOP^3-`sa|UTs9$^B3V(pEQir<;S^d|zMArPk zDv>iFFH2dlRs`#9aWB~X1G`krd?|Pl=8S3hec+W=Z4iYrEbZ#^+Z7M|53cMHZS)S^ z$dDph^6hqtXzy>*1@WNlq~FjvdCv=F@z&03vE@`9pht_8ngaeY5* zA@0$w0I5U8@p8F3F)E^fWr>;8k?6(R?1xp>%n}bN)!J|!%c8hbJiKycX?REUKTg8v zPPno3S-QHUD2;xy-)O*bkbTRtM^~;G9>SF@HO;-?Q7adp*Ooo1=IHBnNj(~u)NY+s zh_)&_SbjO2=*GojQu7EKN~abgMwP3w9xaun*^lv?9k;k^de*cM&59n2l~Ig&P0w1H zhS5`cp4B*Atu&hmAdlP7H9c^AU`SY}vvW<)s`7Yy_h|HvWYP$hi}BhESa6t( zqR(AqYmIw9;@&LIk*a8wudve^GVRYHEpxn{Js~gi{OasHzouu67&|9Rh$V^jyryS0 zZW*(az7W!~ae)zOXmKNmG)yJZOJzxqfE6XNV5c=?+9j@)1!?79`>l*C;l`e|hvQ=G3`P#cvJb_!MkZ>c<8_oiEV zdPZ>k6WwdGl#9Egyv;IMsqDlS$won7{;4+0?h4B5n|4aOI#$6FKW?wLpelF5sarxZ zyJ@uOblo&==~)9lVboU=jMyi_`D$5#gOlhvb^jbZ8WV=$#?C1aDq?SwL zXlgsLDz|~lr7=|0D27Tm6$2JhdFx)yjC^K63`48^-8C-0?_!X_42(Flc&PYp&#Lw= z4yb)@5|@tSc2ZMt4Y*0N3Irc(^?#==@sFnqRc+z$+Zmjt7u2dD^&^UKw#RdMR3*OjBMGk^0YulUr?(HfK2H z=1rvDYf|NwMx zt~Ht9;$5U&jUx=nY98?rgy9q+FC{7lh09XG%yqKLh+Mdd)bF~f1#O;xZ~ zOC*BA{i4g;Ckw!8pXBYAsaE@xPuGZyt+5c$m6Q#uO+*3u5>E2;T?^rC#KkooaX`oI zuMAyu9$dT70;1pG&Wn>Ugk`FeP{KKylTb!%laoM?i<2-Mjbd<;!W8s)bUPpVcLU& zm3&eO?yZkC3W#-zm001*3c+EalDDOl*eqE3c$MTWC2z=Pp^~@zl_(UP-RQT395dr= zyflMO_-k=$D=Xv3q&$3_UhI5~ZAF#avVu-*-WT;?la5n(eWP8;_I7sFM;c`rPX3NC znaKZ)!yt*gIUx<-aMI}BPGfXbBTr?}34L+OXe|#Prx$xPw)*@GIh!jVS#h9MTP=S9CAZ ziJWd2nvRCy#m>jrf1W`n_RBqG4BIG=^}P;~Q{~j(DNdA1qZ8#yTb0T7ET$-DyoRG3WQ&-;NPjg^0LtQx>7rH!esj0si@ z>@Uw|p@P3o>9V8-ucumg}mC9?ImP zj_;*9wuJ$|Yg)rZx!jn*MI1Sa-6)~v_&|)C^6H?V|7~nujn!a7kAF=7XGw1|=LCSP3kAj;AT!T14EdkM)BmvnCM~F{Rma`hEDie zDg&C1%LGYm1k092H1=~d=)^uJg{|eIAEacl#oyVO#CeRcdnAKS?0O1Y%cHL)ht6Rv zSaBa`xHqoX>$6#?;qOxgZ=>KSw z76u+%NNULE5m#Ru8Xs2E*7q|xsNsQ>1`8v4kxw4o%xHKxlY<(5=hF~lV0Y`Rmg!{e zparxFq8@%4q!O900m-GwCJuc@7F#T5U=tLsmdlkPfjgf;C-Rl<;A6{2>;1B*SBbrl zK_~WAer(Dk*u?2jLN5p89r9MuwP7-mU*&cvOByH1&MHojSj?g{P6-hS`efrbbqX2r zU;Z+Vhn2*vt;;YTR}!~>XXsM!VntkT*5hlN**sLT+?z#> zgPGBp`m~<1I0_RPd0sXPwOo*BtuiZEHwqLy;_S9{NoFq<3f>SV6a4Lowr-^1p9uix z1@IfgWCFh<1e`|@wXfxj)=N9(5`J3-ozQ1_TaJ)NNJ$8LL|AQI-4fkU=9jV~VwN5X zVvpbnD5pBn(#6SG2j`R>H5Dynv(Wmh+;U5xVCZrtBTZ&Rha9~UyQ~BUReabT?p+Qz zzx~+&Tbzv-WwTJnUj(utQ4nUNpQB(oYZLT;(BXQ2Hzq3jx!ct>K>QzA_&fQLho5{& z9EZ3C*;dcVW}%v0ZhjIdcmXg&Nlr8^>zM&&*+s~S*0noJNe;`Du#!CXVkolbX0tFS z=VU0!Z^worL&=~}vNM~7N}5?p2H_~rP_j)Z8O>&)l2(?IZPAai5C(*jL|b?2gzo}F zNjpo)076GHa?&r9SXbv$6`$`HO2)I4^y8XdhLS#^q@K;foJ?dX=|gYJPy$aeT2~{R zg-Rx~l=Na9oS{U{NLigRk7vK3B&###3z?k}%Wmc*t22UyO0qg*KA+tgWsm1mjdJ0< zHC^$t$Df;3TsZ_BIitPPK4o8gX(k8rajiSryBIhL32TrY@y{|jsNuQ{4cp-M4r`Fj z>gr4mYWS-R4ZR2+3u};V>Y7XrYDjF5oKh;_$%wE9*`Th?e#Gv*0K|CK3gqNM{t4-rPYS~iAi_2XFK4*K@rPZsa(;Vq7``7n+#tN1+a8z2z`}V-7`_jev4Ze&_<4L5 z1L2<ajayOo;9!rcn9SVp&!z4p{__T&t9TDWj> zxM$~Vx2%RCdsQQY&XS*Ww_CP6mJ%Us*`?0Opc8vn5PKU|5Fu>YWD>_2mR-GKtVtYa z*mN9cgs^3MnaH5i?(>6o7qA%$Var)6ae8IhCD%O94`Sz|Uj(sbOWBn{r`??(b}q6W z&r#b!`l8Ula7H4ZRQi%T`(bxya}fVO-PzCOz$3m+H`UZuTRC(#Wib$6z6j07bHoX) zgMdpdPQhzpQEmLM&Y%{FND%QtXtinx(8-BcYDBaHATLK?d-=Fd!vKSpaxO#l%NgjT@1W&fd z9+$5yjg^}3Gf&&4a$->Np_M>}@!2~&!{1*5AJsk(%CN!1IY%JF;4!9&2KLpZu~PG) zP=*~;d`M2e445nzHnZBeJm`H)cQz`0qPw?K4Oi5iLc^lZ*GB{k-W!N(c5hcMs=LJ7 zlPoM;Va&`Pdl7rk6T7of-_x_R2Q(}l0t)k@+s5U2a(6Z=JT;_HqhXaBC{JAYGvztm zm5b{3g~~I=!u^=c?8W7IYIip3J1skVEYCY#7EA%Wm`m5F_|3}uP&Nw{ecW{@#M0_F zTxRY$pm^z{gG)Z5aeO;SCG?LH=YU!^y4+RD$YpWT)0R&4L^P>QChkAEM*$WYVM~s= z%tgJ`;Xf9~BS9)*A9c+&ve+jl*8+TSq{AO_!*NCy1F=i)qLJl~W_E|kOrE_g3lt|H%@K_~c4 zsfCi3$BQ#hR&)4cIl`+p&x<$eKRf(yww!-j5-0WD>JBGEJ?SfAn#Y&KNzLb_ znv2YhgNZGmU$eHa5a+qIBu;8RH=xNfJ zm&8fU&kJaFF!2PaU$eGPYo1&ZCpAAmpxMF1mf5da+n0;;9BN@MCpCv!n8O)tVcI^e zc~`(jmy?=1-SSLKY~_Lb1LVSx(|3l-rs$;Fkd-l6f9e7S#f76TO> zms(sI1T1TuLnJ$Ic(0vVdL)yB3LZ@@s-*&gHL-N|YcSy_U(Dp7hW`j?5Eyt0##u_) zd58x~epb&qS52}|Mgd&C+jh;cm>(uk$ZghnL7p{lCl7 zZ*Xzi8_VG&(zrjU>V}^cRPjWl? zz!G_>{});M4KAX?GW2UZrT(8Tk(c^^m8IX{A|~RQs{cRP?f+Pz*!7RuKz)298I<2NH+-&n}6R7931%*F2bbxFTCKHg4+XBCZHztHnN6s=a3^j8yyOE^3L0w@b3s@@Plo_H#>Nq}s1^QA8+zh#B^0uy2uA@cM%J3(W~nl1%7J%@Iz5j7!b>2*)Dfl{QiHcLb?~{g^qzab@lJa!KI} z=NQ&5^_?n1U>5$oUYFkXNQ5g(PkZrXcegav?+{^4Z5NrSZ^D1>Ow-8u8xf!Gj#`fT!`$Nd?~P0yN^i$%6;EDCdzu4;6Sf257{4 zvj-1y2p&t@hwdrxULBwj?*zl0_w`6?f%Q(Y?}!^1XUd zoTrC~#O(JNN=dvDo;I|tcP&2-QVIHyTkj$pLKf~Ay;j#*z<bY{1vM%%( zP!frGx~H}%iT#{@+)zuYHuY6MiExL^v&5DZh9_qbEg=@Z!++eDTppki?xpS^8p}nS z6EgVHPKW>GKF8G+(};IP0#DJf%W=z{oxG$+k3R&d#9Wc66)lU0jy$M(0C_k_CF<{d zsA33trQ4$AH>End30W_7vIcB2ac_3(&LSh;!7*2nDm7V6iGjqT5;ifA7%B#mBr3jZ z)!{!@);EGwqJG~k1fVKe>|S&@iF}w_ecP%N|0ejY-I%Dux{v2Y!iPTf3ASXAU(D*@ zR~@gNQ_<71S*Rv&YR!X!@17-;$WL%}@GDlbGMj};)+d!XC|I)VQ9|0l%>(~255El& z3H&EBN;s0y-2+R^=e!gBYn?i4OummHbUrAMD0NRo1P* zI9Co5UX9aHqA`Q~ZW?r{|Ddwdy0cMTZ?Y9?koZ5~qS8(-sgNJ4>5SL-GK*+x-^*g4 zlKYcw(L#U|NQbqk{Lpt>YRL<7%*yLCIjG<*X4pw%M1`b%!aH0t)AS=*48*rw2@XC- zX^e=8zAisU*NJ~22QSWMp^B@MeLWVJ-?lq8jljbOD3QOQ_^`vZ)Oz_v5Ni{*nTVXneUc5%%;d_1f3|{K{icVbB^_KHIGOlJYoj(qW&H23+y^!;bt({GWH>p^jfCZE$fA50xk%&UfI6 zCsOOZa%qP}C%)zINYd>a3_1^LMpeISsYJQTZKixvSdbc5Pwm1(4Y_2SKzp!o@HHbnywCzQ2<(anfrT)c=vSHHB_VAedl0d}bo z;IU>Jb%_Lhl3CI@M7$v3+A6#EuDJVKQ-YAQ$b_{XTuhMB@Lgcpw|B*Te>zMi@V-PL z7-{UbU0~Va_(>-*sFcEF0zWqaY^34C(o+vJQyfM=m-njC+GTs5%4VU0i(UN*6pX|f zN@Q5wbT*4D9;XakB?S~wh7uXOdSNyTmF&;TNglg|v=Z@cR5PfYpUpxgdp$}F3WjIB za@KVsKC0Tmw_W&wC616^@5V$$-!ZE=FA`2n_0^;V13%@!D^}EHUGfNUQQ4lvXw0T0 z%~n{5N7lPDe!2<$swjU@$;BZevFA)zb|mqwcI^rwfgk1Uv_|FG$=d@o0^V%gB(@x; z6zvnz={sbJKk6qDjUS(r!|w)53NLCp#>q7{zL&)8zAZo_+&{U-#d5fR>KG@|mBZ@m zeiG5X;~J-=?5E#pvq;7Zk;1r_d5j~CaIf$f2U>K3S4M^tECgu8yUL4K$GD%)Y^y5F zyVp-5+SfdpZB@~@(qKiI*9ZJ0g8jk+RxD!r_f@MLViIjmRh@j!B+=$#8rqx>PllVn zBS52h|LiHb625tKrkf*<_VGmVZa;}=A8<3Pq;NY|kGgR)Dad!aL{)qsOeW}uTz$;4 zlEz1@bX-*YP2>1m%6OSuepFeg_{mZjsqA4hBnA-?YaUWN604O_V82=lBh~&ssMa82 z(V#sBv2E_~cYYQF)mUfgDFjRzdK{05{IoQ07`J!nt4r3C1pzK9vc5^-=fcB_+TY@E zw0AYzyWth94vUH#=*~ucXPOB!fQFCH>S@JAP>c0ds#uGSV{grEy683Wn-@>_>(M;aQ%F|}^~5}p z_1Pm^&uB|}dVZMh1{5cm=s&TBY}HE?8IkI#9zs%ayj?f7vAP=*m26D6ZwCqP%hZ5I z20g+^2heM~a#7hE((S{=!VzJrjgdnP3{sQzO$ED56$iCg&V)1vg7Ca;OpPs4$Md@I zP|F3Oy5}HYt-ukWT{o^3YQy}>3_9_xc$uU;9_#Uz61rg=F>qui2l2P2d!nd#fq_+d zYCw_oz;R0!(i^f_sKYuRbn_rk>@WG*WDGYAF`T^7UqpgVcza1^br90=SiJV(*w|{3 z-WQ}2_u0mWE$=SwmS^Jv+&eoA7m}RZ4xo9<+nw`^4kFu%V<>&clk*KyT>eV38tj5wbffv zo!s87f}b{rhy*;&Y)KtS?B4WpUK7eqxs$d&QRC1EIA@mgHqGAR>h$=%r%OD#NF(07 z2ahj1tu$2?`x z6xJYH@V{nqP{W;}Jiy9P?8pKd@M@9l*VZD)wNP+S!`nj|$bnf?ul;O!d=Qfrt|sSu zyD?FZ^QlH@ACRVaSYO>1pVlVpNh z-wjHTu@uycHc2Xvw|9?rIg5edUpLE-6ap?}c;H6_y!2n)m&HK%@A}{s0u~SY zJ=Qp5=ZxZbyjCA6Hp|1s@lko4ZN0}D#PA`@+)lQ1SRI2Etn( zeN4g^Q02}d5|GmR@!rBtdAjwdOb#kom25UP25xYLHOTX>D3gO4R%d9)VKhzDuF}s} z5Lml28FZo_NY<{Aw?Clh6dpd_F0if7N2KV)wmu(`q+|H-+uax&7uZ%1og+&+v8^Dw zBpnmIztj~YO65N@If!q)#q8jVKTv964YK8YJ(GhPz7wcdYRKcX+OMHq9mDIWtXbEpp~1xXtZH8Q;$$|??8Zbr2eZs*^BEfYu*M2&ki+VyGdZZ?3mF=E z@s?;ybcgp7tY$fk97CI>a#n~{e+VvNHYWQ+Q2CI>ZqDMLdJ zXAi;IO=jVQEC%8~&fRk883yxX9svmcA&_AQ?BFlTpcC8*%Wx_H^7z1~A3L7(FUp`3 zdp0mFaMF*AEJx#VYqV0~1{X28!tN6@=)``!!A{C!P}3uYp;=c2gn}EpF;UB#P2G5r zaD7KVf=344XKdDS!L;5i;gJow_QqGKg~q8R@>21|W+$12YX=G1e2vNR2DTVN?Pjyy z_pwmhab~^mVZq{0do3OEC_KsBT(F&eq6-hzeAcbgxUdlDCUEfbN=VO$*7NBuJk;}r zpdNvPfy-$hu^sfo4vfVQlwQ$|iJJb*Z67HlyeX@9=XTLi71oEbu4-2ithH~FmH&7jq`R&S1xLMvR|9Qf{R`s5YZk+TIsuu zI|DQ#H_d^LEr-w7Y8O_Vjj+-;Hgfu?%>I2@@#w*k8DAprEmZTsP*m@)= zLB=CNK49)M1n_K_OyGlFiz#hy4lJGV;{TmydP`6V`)+f#3gAxI_a+r6leg`YlEv}_4Yb#-_&OeStCU9?IX-&;wU+Zt}i zxYkEk<3dnW!d{;?S5mRxO`%SfHR?4%Dp6mVMwPPoKxzt=S6NjVSQpe|TNRb4uS=s! zs{P@`Sk8c2FDbZ0Vt&h<6+1*Y8&ZZ=cIoU}_e^3jMJ4E8rVW+UD6!(;08`mjMeZ>t zux$)zME|l`1f~!WM4l=THJQ=yHwUQ%zA0TG zQWl?LNp%WRVv`Sq$;7=p-6@nb-fq;3ZsrBeFS$6gKJDb;ApC-xDHj9JU+I;rlIPO0 z+>Tc(M`X~6evDg}kks-hFsE2F4IC`(7lg?~zQ`>WOBxN#X(S-=$$tJqsT11zj;P9& z#X#`8+(zOcB&RGKJa_nyz*c}WfnyROtpI0>ge|nbI@OpQLtw~grz)M8fACTWwc^mx zD&Bv+kwH{v3TaF(T&<@LVt!DF6s3{IN_G@h%&#ka%&Jgjub>gFZLJV28a@lJLuO*U z_!|m0`AI~3j|rKvq~N2+21K(-^f>lqVC` z4p?V`G$I~MG&@mR#RgVmW_*e9pb0AqVWxErN<%6#Q7`cnv?Sw&xO9o4KxKrW^$B1N zD~JT`^^_=yh?!339omGU&kfKBc#bFUkV8;i8n0BBQDEl=XvCZH;6V;|#M3nn!&P_r zevnGc2Rt<{WZ_duSlL7)Ys!ymSvQeoIVu_vcO;=iP;&T6ikgmFg zOb%+eDnmmKm#2(hK$TLJWt|gGPUmGoeWx1}_57DLmHUwJ;83P2Sz_Pq#za*=&Q_I2 zsb;E@MfbgKOjLD$wyGS8H%nDc7GQR+z|=igxk8s*p~g6*XXgq`-E)=8cgvM5Kq;@m0zA}>iK?t; zTYN_6u~yGiB@56BP4l710<=QYyi9gznunnv3otuZVCtT$LZM5p3bFvRa|I@<%Fb0G z-z`_N0Kb`8$^}_~Kgetrg`DjsqN}D=k^k76K5CX0Hiva z>^*)G!ESTGl$8BRQi6@t$D8s8;jBy2E|GwLFv}N*h_^i*`^v@L2(gzBklo=Y5$zDc#3PEmPBlUW8YXE<%fR+e5;>CxOchsDJeJ}9s71y zu+A4h2)8LjB;Xd;J}n7N4kQnaJK_f+j}8$Dd4db6C9xINn_y9jJIC1s;hE(x!dkCL zr5OlqJ*Amqz^P~wp3RGnU;HBc2eKFl{~u*BUOYz3_9_xC!CY=@D({jN3}iC;Xj)GYCnmH zH@L;Dq;O3`Z%L`B#dQ8qJ7?>xBuOTybykufWAW+?AR1WM`J)h#pg(m75G{$<%N)qY zB(}|yWo7A_5Rs6ZTu3d6u~z$TL^)SFL+VqH%e)kVtuekEBNP3DtAc05vZ}4e=M_5$ z#5r*2DCIO;rwJG!oIH-=5iVRPzz-(y&Vj19Ut zlY<(p1B{f0eq3D(Yml))GnpLJaKIhkVs=i||V_ zIjCViLqh=<^1>SA+S@urNR_f&cw2`EX$~ABgf++>u|Jc8d05QILk@AD&Qyz9!Z;;< zsxG%7i-GuwMV5mQz0;jPETZge+cM|`Kg;;JRPn^-4I=2tnY%1(+0CpM`x3GPVqCNQ zWJx++>)9D}Vh;te`|#SVAG=wTo$8qxbYc$#upy6N z3qN+HCcD#_8FXTo1K5y9WMv3jcBHd1=)|rBvGWL}3}MSI^qdSjv4?}$Is2*)+fW0a zCs#i(4L-r01`Uy@Pjjb1O~kUvnOX6Pt7=F5;LQ5W5Rs4rE~J)3%{hywVrjSlcaZo& z(CuL|Vb69KYnC*+iL=BjmKrEhS*pMElL+`*cZsK@uog{%q3&h%|J+X^*soJyl)`IQ zNiZ~0*-n4vClTzC6d0xO7Gn|&y-9W`>(vc50OUoG2=;Iaj3hi{lmtV!mp$LQQ?I}T ziD1^9dW&S=saMGupX3nr7=*@0-iKW$VJP_y1+0fjsj5Rvqr>y4pWO7i&ZSI`yVqicDYmlw-y_p=;V11fH zm8h|@7so_l4YCv6lF300AI!)@AsWe$mwo=$Ob%+W4pUQk$m4N*eeq3DM~lrd;p8dm z|Ki|xYIip3I?Zht21EZBZhC7UvsOr#k>H4ZN7ffF{Y+H$b$89B0pkC_CDODix{m}y z>_@V$3u{#l6IEH)g}qF0pr(sac#?!J?NeIaosH@?dWz9S!=*`mgH>BZ|A(kMx_Q(_ z`lcoDQRRDFH;FJifrrqDr>XJf@s3WxjOB2#R2pv<+j65ku~cSiKi|AYmx*lO0QWGe zJip&l@63y|6HHWjho|+}OwrCniIhv@@Mi7o@MmYI96_w7g@rju9xAe)7WVPj0ofk9 z?B&+GSzaFMvEI${@xa;WwwQ8h3~L{hN*P~esSIo9-lI$4qrT;-@=4*r1M1h=+F5OM zTE#JZ4@Jx;_bh>rI=>vyY2hKp?kTF3o}$V@*)@ST<#*sATB9~v8Y?v?d#)}$2Nf6e z{24APw$g}3yepFhy*;| zta%(sTn^SjA({}!&RUyBhep7v2@0`k_$rCsHt6(HOJC=;qA!zVqFT|H2{K|q^cF{x zT9YbZ>5m~IL3=!TrzE0((|M2Mm7W)%5%2;}-XVvbKsxWO($2<+jPkawr<)u|GEuFk zt`cO#b^3vEWrxd=nJ}5a2Ru!XX4OaSBO6<1d?MqkEl83~U|(%XGHOdlFcG*dUN3Ls zy-H#5D}z+R{;ly&yRvwc&M60ts%E+~!eru>+;Xs_afG8iTDD58!Q1j&_1Y{3g1^db zfibv1u%C*z;fHY)%=&w}-)@o#UGUotGG;ODrf`5qD-#0Qx@nxE6Z#i!E03+lr@|)C z9`(k@$l?y1^~UVhY!+&GtS@gG#lGckl(csZcr}pCvI-wtOTZk=hf2+_odRRq1THgpul8HR%HyYA7)$to0 zH|w8e&>)ZyVGo)MG?O6;&|ESw;90dFEMVV=~o2F`URw%1WBR7&r24{WVnvjM_$Rk`xO|`xJD9Jjfv$$b+Z8Z9E;I5pSOl58pQaqp8RC7=m{BVKI5)!CA+8^d&(h z<{hS%T`G2hdJ@(Y+(qJ5O~UR8lZpF6)9Vw`ht4&fv;JbrV!hXPGE{wt_YAZg4 zGHB-QeiHF+HVbfLOAW90J9(F1rZZo-vle2MvdILs7Geo97Ginde&W(ywy#+53@TjeBk`@ux%W>`8FqzO(rVAvbaS6c>tY-J;hRFmzCjgAu z{RdvjHlFtvr9BcR6S(dLrnDW=>tseRcC4vA%|LK#YELoPZ-)w^7*Ay_sM{!iX57yn z4l1y&&Zar=V76ZO7%Hn$;cv;H6a6t}l1R$q)6iaQd{aR-6zknxTUOACeS{yIbSx)4 z*sKzTy)uJN?DaluDUU}P-LXZKI@a6L>RWB2(|Ury9Q0tYj(fNDbEeysiepK@Gb?8pwgOK(7YTmZXMyCI>Z4_%%oj+$M3` zy3V1>!S6HZM7KU-<>nC9|6QUM)u(adZ`Fw5@u)65)Ny>mh6E0rer_Jvr*K5a+y6qx z85wlqmpuJd$-|YB?ytC-puR`()gYC)hdg~i$YP0W>XkRSX>m>jK*u)UlgUB!FI&1( z7-;=wnl{vOWhi!rZO>vL{@KJjDpOm+Xhv^S<@gmXkNZ zKzQq|trP?HMrI)wS21;~DKvvjXzQz94m2jwQEMn7aAKGdLrJv@4^>!iDGC({99%SV z+cz8|*0%($S4D)hp%VK^iT16jcDTQg<7%H(D$L%Hs4q<<=Fy2Z7!%QD+-5BaY9)SB zh)BpMcp)1V#9a6w)m-!V5Rs5i^+IBnu{@@oPHT4yK^(k2zoXLbj3BP-Sap1MM5iM@ zj#0*G=m_3~+@#W1S8Bzf(Fzu;n^nr1aRB=lo+cM=A0 zqtZ#(hTEJ@!XR#vItklxH`h+UojBJp+{beb!(BkvutIObutHzLutI;ru);vXu)?;4 zVTHk@VcT(TWLw&sOBmLhhhcnkWBIZuTHonZOC^NibUN^2=$AM;;-=h&JN-osyk{t2F3zUM~218LzNxX8je#e1+{v$Hd=+7?~S6_(wMcK&W_r6 z38q+Ii>Xb}Ujy;sdZ|8MYv=L0wq9OY#G&F&Or7|~7~15~(dLtTn7h`M3yahHtFtqU z=$6N-)FWi-_<_Asi_=(eas;6Iqi~xn?y2Qw6)s>L{aM|0v^vC-ZFbj(O;;;dMsYcC ztcAl6t2D^Vr?N(Hvq_IIOkh{V``*O~Jia!8y3<*)h!f>fwN`G{8wi=ybBjYSi|7*A zu1~)$a%l|lkxvbg^7aKGONy_#kD`jSk2FCWLCC6;6RgZT;|+Ylpwk}d#Z%5H;%I$R z5wA=WW61)VYf!R)=ARdk0yI*-}KbH5qOSI;7Fx%ZEgB;0#D-; z7mj_9FU`$fICBxAYIHewI%4cVdmF)t&r#9fNgSKjopEq>c546h-m~B*+Z3I$?(xX_ zw~pxZCAPmo6iaGySow~kt$;^S))cyne zrg8sst4`loyli@Y>Y`~y;=SS+Xk&YR=Aw(H=ar5tVPi~MQ@VI+c6NFn8pv@v@rdU1 zLV4!0%IwqyP;#1$q?9Pqzrn7pVkAC--HoGm`^p2;IQ#dOLY#^Fk6GUyDaV>mVU|~+ zbe7$J%-Zn-2d3viMD(VWIy!f`O#Ox~2x6#Q!TOJ*He{CWKV}`oRZe-fBJJA@`;cx- zyvfubO&2@;atU9<)YYn!izRp|b^p-G4E4qJ8O_hOu8?r`Om_~Z@xE!Z)WHL?c6`1? z;nS(;(prhal5%(l)l3=^jbAw%sqPrTb&#YYk}xvj#*zn(UqJgjN>+ZZdp#`>v2i)L z)YGYb2y9KK4k9E`XIdlV3wQxcCoB7j4S&2ggxqmx8oycZCG^?%{B4Or9O*c@jiK@b z_9b9jq_=>_YP~W8eV945er2x&M2LXiUJ*%4#Cio`uG;gGpyDPi@2}dQ zs7P=iyd6t1Ts|_32v>nzCH#{atrGw^YRchQ)T}XFagg(N)Kyx#U>{?o$-P)8>A6&u zipf7#&}Oj#&83lItp;~O4WHjct$ArXYULbub6(m|5sSkox}_asf`)KKY=_*ouQZmh zfU!;wnUPqqG}4EeJs{POt{ET=;Fvr>+6H%9fHY{o)a9D79cR1VY>ScO*M3@QB%enU z^U9U61jXYYp+Z~7(>45rOaaA08m=O7V-`MXR%Nl1zs_;1q-6J+?^Abx8W9lAf@ zZxcKq{ev;fuB6sTb-0ZkwbOmoD2B(yCHX|RyzuQOyn~>rJ6)xmM`d~Cuvc~3s3GOC zKn{=!Sakf$7Zrnee_tK>ynyLpW7xxSRTXmJKVy)(rpux z2>&8!zw!x!CYr=;X7R&p2*IK8)^2>sLz}NG0i9%wwVI+unk8n;3PEsXN(dEm8Ya5C zP$jCP*FGI3WK0#6(TkZiEL%vEYk`KFc00-QilKeuOa zJ83T=xy#eSOLzeMr){NQVG~oC)>@oDxMvYhpdF_i0D>Y@h0LomWR6raYhyG7k!(>K zHVP{-ok;~x$FM3L5*rjjpl=KFpP=}Ua)5*spCXoE+^cpH-(ts0a09-Nn1#bu33Jb78%3WjRFt7=?%(=8iIClJQ6IP0Ln_Os^hxbigBmh3^ z79$js1doKqwOEZihMA&IM=%fj>@w~mnI8_t(p_X_-(_n1yBz^$4}?8VMiyT9meW;Yh@uh%&q0%2DRM=ixsE`zJ}$^c#pw0#I^j&1g* z5alo^nQ(MbZo?g=^AEj(Leo3B&UQO=EJ53bkTpHAS)g&ot%sQ{$wDXJ8H9h;r;)S) z>`23?1w6v$lkDvjI@@q5Dn#o?KEkNI_KTFUt?dyOZw`-K>s6LZ%G(!*Tv7qfw}4bH zZs=+&tx^-}@QR_H0>p`fnv_lenrzdXMKYU)nlv73`k5eE)6zhe)KRK;uG4^Udill} zJ%I^EcI~Per9>Krsrtdi1L($Y;jAIX?p4SSdc?8Fs~iQ6RC+L?DVKN7t4`0cl3$PX zJP?#fN5x9b`1@~I@<`$_f|zj5{}QDtU6dPS|Hcssy7sgDUHeGo`n_|@>hkmj%mv?e zlvIA(Z6fUT0y8C+>hv|Q( zX`IcwbvAE>(NgE#Th_@Mr74Uhl6g6b*pd+E==px|80hm`)}fYQA%Si{g-iU;Z&}?s zD2n!aJFPv^WM)2s_9Yc=qCx<~+SZwaZBp_$3ehLsOei4KMTb$Kb0H1&qdPv&ZE#js zV0vEm?rSrsdFEZAO*R{F$}RgXYI={M%Fp6u+R zD=;1V6W*RF*q7~M8AYS7GbBe>r#`okt%~XpDx*KEMl>}i<6x%IK$t|k-kHEGiW7W& zN8isiw4*`3WkED-ax~hFK{Ums(5w&4xms(sZGRO)i@6lqilA)@jr>?fgvvwNCb(`e z<*dq57aW?W-qX_Rp=zrKu{-)lBV*C>SkGxC3QLONvQ(15sbhQ$ zv!hdBrIDS~lE(#cUwQ$1abJ3Gbdoo{4<7^b@%Q6U!k0b(m#8m&8)Ex>>4P{J@uhFK zpW0>##reu%WYQ&J6Y@BK@e&HyYIzC0_^^qW(1!(tm(Y)AdcA}JeCI+F;zl59!oJ!; zbMbAL20jbJ!F1ehw~7Ln6==5^nu3#L(*DIbGk|yn+`-zbLk(&Hz01QT7u4&mwe&l% z7?I1!wUiZplpbz|g+IvU)az7oT8r+*0KZ6ENQ5n36^DmNEBz-LYSwku8% zVYpD6jao`rZ%k+`wlLsT-kjg3c(p5syot@lGgI6?v$Us1AYc>q@|2kNXefj5td?|= z{bh>PsaRo;X1+7U>=>{2Y7+WCO-EHbqvq}g!<4TvVdW)}B(8;t8DngGv|VkC?v9Q! zj^-p!v0S#lOPVBeqIkb~+agJBij&JcT-@5(Y_W`1YCGB^_}*Z2V-_6|8JY6i2N2n+ z&tB5_c|_K}Ad_Jr2X}ZD!uA5bDV)JjKmf3HEhcS4p?|>sG=YaCeIQ@${h zp}&Ajs#yqweONPPF!Ui_CbOXW`Ude0=PZQ5Ty{bABOGXtwHOgC(zF9QI^^i(YqjWumuOmp#FVHyEH4%5mqv!O zzNmAID@`0lXc9e`8B%&8(H!W)lFB4$nVW=Na0i;*5XxNmXhz`iTd zFP8%0GXO3i91|=>+Du`_fM)CBnF|;5aJ4-_mC=c^jMQPk=+weu9nqii%*%=~loK7E zIlweGV%iuJ;xMHgLId>*)+Xf98@+@A?#Fovy$G-KI{jid-gR5omZujM+2nBRA$A2` zw{=Zxeve4J3ac#{&+ze>B_uG_l0IejVg;WfQDZ1=jYN5p0c?yHf#7eI#>pwJQ8Km>&F z>9qtU+s$IFC6F0Kgxgl{FdK1~-oQh@2(Y%t6`KKDJWXPHvvLk&b6a&pW-$m_&P$st z5{?S6`qM5vi^BWLx%MtRC?2FXcVS8kQS*?so(f4I=OLR5$`&B|j4&0lVXJx}dsezht|>_zOfPZCd2(PAr}%#tJ#*8YW=;VmLB zaON<-X%}gNmbYC}77bgOJRbG&^$?H>2t^3k$tGpR+F6jWlPxNk2{vRa*3OkIK=Nf~ zpjKmq?6YtsI739af=eq{Z-`N1xVj4;0njT5qB`^j@4a1>!7xk)%j>UHTOgRGb>I&1 zF^o9stp`MsWTD-9t1w9y%D-sJS}8Xg@C71gP!Yppt9mXzX|%gt!TGXdnW2tM)|+L- zcm;$7b*pJLO0Skjk?J=P6;0eCtdyDaju8Kh*@=2sqyaDSPqFbenY*{jK$r9MRCV{( zb>*4)={+JIW`GmnR@@j_dH2@UJEyONn?%HJtE(O?%wnabXE5tkD@775gxdz|GXf3? zJA?<@deZYqx2{ZUJ99{XmWRI= zSGu3!NiQJ%bWeI7>Cg0}=a8N=Uh!BjqZ2n_ktJvK^{PRlLtli^^#=4dP%Zuy(C$@UXm0yCn1RnG<^=Jj?ix+$l=Z9)HTBGB(J!l-g9_s+PV} z7zbu;MN^XdyY;k8Ijb*3s?X)@5!e1|kuj{XaoFS+)*CQ#T8>~2KGKAZq+sMxR=hj_ zq&>olUHE4EOx{p}ONrwX25a~1c|LjVp(U^5pbvfo&alnc`mql)U{8nj=%dn$nNfi$g6x zr4JW@{FHwCu-nlyU>~eGlx?_n2^F^;w=NbrV+>~p4GU`%nP<2&L-A3 zscaJOtexpBkR`P_DLR~R$S4;ArV~pNcd+y_M2S?2T#Dwo5DajRT>{@x6iS9@<6-OtFyIXh>XMQrfmvU#i=`N*x=yKu&o%0F zEdmmrIM=HL$v=q=Wk;+!{$%PykyuTg;cBhg8nHhpX9+6eOFXTGyQNC26@AOJS#3$N z+-y!p7a3a|%E%;QAoR9YlSB|oYkZ8rxS^tbv?vL_H*h=Jo?5r4lHk%~!AwHtjRoH% zt4}(WuwDl6>%-}evFnZ?%S6V{*w`AO^8zzoImKL7ZWS9d&QN0*(#5d zcr6^;Fow5vaDQ`Z_M++NE>j4Cuz;}FH<*KrlvHVM{{eYo&sWZz7SAIgg^l+Wv@NCw zCfb&>kiOU_pwFbF8HuIz8_j4ZmyF`uGb334Y3CqcI>TdLe18mg&oF}g(eIy$4=a9u z{95?|o0(a>!yU&C|Ni)OB2|nye}mDJWpPe~t(Qy$p~7GqYHwFL+Y(_;PZZw}A7)bShs%NT>24 zgmfz3KuD+Z`Ga&SUp`2u^3j8ID&ITM#ia9wb@B*PBDtav3iqyDJ=xfG7HL=mlBHY-vkCOy?y z*BBeG*0(9sdF%F&5fiilWk#WnPt)j32~w{m_HC0XK_iKK5$oF%qAr`2F?{E%S|~-Y zHoM|DQ-X+{n%*u85tON{<-7fa0v1nRi9XzM@)8E|>XK8|tT&-!01y6YN^F)SBCbfE z*~Ap*Jo$Rltw2|$U_VusGgs#n01C;0SZ)eGRv~auokw$FB35{-SSnZGpv3Qe(>^w` z4YlWnWpL@#Qswn>oAUBB9piRNIhJE0fW=Iw)-7DEn#;QCEbeQSanqMEB)2aO>9K0z zahxA#t{+ucBHUjN##MW1U*_Xxu*DidDbp7C(kmLG|qJY(xCLJ*qGzuRMI$( zjLx+Yi_T5U=tY-L4`xEdzKVv{gEh+)c=!-IlU0aSTDH0|Gs{a;S0CD-QdVAuJGO5` zCzH!Wxn2^haMtyfv}y>7RwD%e9$ifeZqkJ(gyF|am3=}|yM|>Rq}XrMVtUs=J`74% z-~}tBiTs#L-+YTlt#q{|#bFg0#Yh>oj*o}7E8rgVp*Z=0hdYK4eO2x#g&oc5{Zj`J z5#+;g8f6DXE|`@qpD>GPJaad*7dyvwuI*|lQ~bwKMXI0r)H(&g^MM`vW)}BcOmFjd z%*sP9!!dlrZ+o79IUKL4A30%NYv0sm(_$mpi>X6~^gMFHrXAC>h?UxhcLMemu^pVi zf*__HRa{t@o?k@r?A+!1ruT~dOB@aK$O+DagCm%7C(Z}#7gy> zenK9O7(Gqc5(P|#UP3RN;9f!>9{=+a`te}0moN~0%}>~d$2IhHORIPU#ecaga=GZ= zgS0^$r($ZgBvTsuS?#Ns1BLjY^Aju3=vJ&Ws>^>$vW z3}9{_6gy6D9TjsKv_U*%8o(UN;l0EVZ4g(L1GG{O>#GoL5KF=UZFmqqfBj)|=6y${ z2FLLzzDqrd(6~4_-VQlpD6amqGEd32ye;qn@_Z+hpR9K$_Ue&Puzf5 zUCtRIgp(I5<=g=N2HuF3KCM?^=#P`vD}F>v!wrr|RS{lu^NDK?D0k(_m;+Zq)UETF3!2NVGV zs7R0`f*1&*U`7!{5insy9YHW*#;h2>=Q-8!-kw?Z{oWsaZrwVSy243yy6O?Uj$YCA zpboI1IB%;}QDl!EICCTBE;?m!0PFU2-Qg?oHULOjk(wVApHfB)N>kcyJ67bC_2@J$ zB}u0RoA>k?&T=7$WFfXY;RV31&q^Qp7cjl-^dCmyMH&!GYKc>gC0%6CAA=XwjS~)) zGCj6~9aq<+;VOjcQSdez7as;G#-RuGBp_%9!|>y#os4Xzq} zh9p~+S$QNLvQ#a=jjzHUQzbvQ%^IeH(V)b~3^-^0mzeUp;-9?*N_*m2{jc`QPc^pfA+)*Cbe+X5HieCtHY6GohW1{(x7 zh|mpwd)wTQVU<0;gLR{~@xR@PgRbHk9@iSpq5O-nh&INc}2@kn7wN8T$36tQ2+5}o>AJhYTe5dl0 z=Yb#%u@NiC8lWrioVXv0H9fUsIM!&DX%SGH+)x~z(s>9S)tVy%@sZUajb0K zSXc+P6e}rfvV_@jfKdV+_M9vrl-&g*RR_8hqg4kwj}c3(pu{@`3c|{{# zAX)d$e9vfrqO&NsfZFMS##WUk9B7c7j@e|ti-?8Fpa^M<6w)iRkjQeMsFPoEhAy%Y z?r@24*5F1i90fUpF~*T8@Mi)`i}YeG%Jwhs2{HD>Y%vxekci^?P&vs&}o0iTJv)og<3v@hmKev3riaK(=9`2wtu6Ev)=ugfsY* zL6wOk)Hb&BdY{1kV^}6axf*dN^y}RhE`@Ye3(T-=S7e5rklnOU2!FiY0fVc~Djz>~ zR2O(Q6vvig0|v2TD~QwbOqoz%f4p4|oggk7V?bT?de8qngNfE#D`xjFo^GhsZm%^ zKxVeZg0y51e-_9BWq8wQ$3BJWT5v#EgoMhK6g3&266fAWhiZ0IpSVD5t3oxJ&ubb3 zkxL6`*fEVnJ*H2HZ4*$E&XYdTDYA7jy+~(G6DecrwU_Lt$O0DGia~?YJ~51Bvex1pyfcS3`jzC!9kfgjD}fK~c;hwI`fI;vB4e zNjx9`*v&|B~>jp$AkjrQW8lW6US@u}rS1oDlgUEk&9f%6rQ*(?;t{(#C?_u6R2fZ&1g#VCe#oHdq2iTwUU<^JvjXb%SvW zskR|qWs=JK zR|`&ORRzehMU2gM9bQztlI zfH?gmTdWMXiS9nQ9)0Ep@!CCfVLCdmqj~bRmUWSuhdAr#wIIP^^Z_`HRL2_0#JoaN zNAoJ}FmWS&e`Xb(*UuY^jknNxeD}c(aC>IY5W#Or!aU7;^f`gYERQ)Go)A4pj+6Te zm!%R6Do(H%9j4{nrtA%j>L9&!#lx3Z$LlnZ;Ev+uor8wT9Y$TSuNX`j>+8gKgMw36{_e)QI`Kz>JSVw2`zJ-Fo=EH(i+diN`1JbGJ zlcXtjW0oLu>6FUh_}pk%EVQODI3x9-7zGL`*a}Xo@?`ev@)8DZmKR}AUc)$3P+owAjv8?lX5y^ZrCk$eNg_~KWt=4_Oy|N8 zc&VnzTG53i4C*W_!l1MUai*ZO0Gl-VGLv3o@b(WjPQQ<5Lkb=4ohB~%3JMNONM87? zv%>K>Dt9($w4MOX63DRB#34>msmzUo!Xg=;*+BF;uOOQjMdJ%uoMBfKjjb?Td>L`z zun-=VlDwoojF1}d7LAe6<>zqlhOmyM-ShK z;%E-v*#)H_wb*P9C{7Ns8z01_n~&sje3)F(8;FPO35u+6xrNA8Fq??LsW?zHB26z$ z-<<~$r`pcMlneL9iG!&M49>DiEmB0${;ms8wKBj+`B_v-dXZ-I?Yo?_K&*bs!kJW~@VKn|)PZenJ}o*H>AjDnn9GLeIO3o@Tx@j;c; zFPSxQaciQreEZMRT^Z!#s!x2AA$fY?rg*$#@_5B$JY0z?@!fE=^+H_F!To#n8pKOi z(Kljy>rzL8VMFkFPP;l1aJgU)HDa(uRX`%ZNny3)`Mv7sI`Ejc$?Nrs%4dfiQN*B= zZwY#mn#bY1{9QbcSt_G3DKCo?2UCxe3wyy)8FXF`$@bK^3`Pg%m#;}D4v#LchGeT( z66v!0sYa!YI0w$pPoQP9s>tlw-?+nv#Jd*5~inw?gf#ff<|!`d{@*z8j0^jqkiXW;voN0Y}%zL z9^#M~X13^^f-cqw40n0*>Q5FEUSB`FD{hFx*Bw#L0%U$DMl>5)HvH(JXkBf{?zI<- zyMl(oI+L9<&tj+5ibSzj*NQA-vC*suIw5*hoKTr2E& z(x}qp?aR?i1{twtqJ^fj^$f}@kXWb#v7%B?nCQ);(gX+6*g2T4?SitT)ja*acV#bJ zL?BlC{oCCO11=oZN{PWgr?CT^f$>jJi2!28C{%Fpv9MVEs+;0qNg9r^0!) z|8U$wF<>aZ#i=y`OwdR$CLW0BEzxJgbtyPDA=;bdJMYJaUU(f1-O1ad)OgE%%Tf3)$+w5e^%ce0YF+E=h0 zd2syEyqJpmVMgn>X%Q4&KK7z<<8i^7zH0B?cq==syrKs_#iVGYQ@qC}Xe$dMrO;vN z?q!QBdc-*n$jT9Y#?ESVqmy}l9k&~0U5GD1TLgxphNp};r|SGM!+Tv&HF`WwOiqm~ zaVL+#)?v`SH-naD8KXM}ogh;>F&)IbAa;~#wd9OGK4QBir%Z-8ws1cRV2eg_c*J&BU&zI9k~^4lq89`K(s6%C&k&^3D?gYa-^E!H*3ii0 z$k%|bPh%eM*9tZ!riITv?)7k(UZHkw>vzgEEt*C>oQ-z8`BcGo%`%`Cn+oV=aG5cOzP?(**5p zlv!qq)@ZgF7zSD7N`7T0W9S8R`de^C-7QV{h6zT1QwJl@i>Svy;d_ofZ%ojHb#Zaz zE4UGj$5!d$8Zi$zPJoyhlTk=fFh!n@>uRIXO>}sw&LHX8BgUQ;ZYSND<{ao1@{FKC z{o^^RV}w|)O-~GD5$kG@=i!*{1@t;a-H}?1%Y)^9JZwQmcXnh^cOk3E^v#Q=9Y}jJ z!TO>CQ$2v{_2MDP(M`B1O^}cRMHVKS9BUncUHg;)uxs<~&ZFAlGfSi1vFDE-jia~E z__a91YK!qz9U7JM@DzUa$2)EDrBmpzaa9L>5sdN2luA|3!AGvXtYy8?#oC4kvf*%0{j4etp<@WaUxn+I8ac9reFbS z?Vx!A!Sl2G4m`OR_R}H(DSMQS9<_lNe@v&DM}pg-~^nsps@`) zzAKEXS?Q00fj5@Y5vOgjO2x-dM&T%;04!lPKi99kPsY9B=RHB#=!H56;;Gn`EISdvU}so4vz@Oy&W2q zj~Fxl{IOcxzc^iZ-?;E?=`o5gGe~^RDlgur$H0M9UGOz)YE;7Ium+1 zHQvFx!>Gb6H#g2D?;Wqnqho*F1SYi{69@DslEf>qUz+{|73(5!zFk(U^!i(vUZAOr zva0H(iD{4^UUmKA*P`ym5tTRVh28n6n;2a_ATn-URM4{nLi^T|qAa0_YfQ|8g2Kdf z)jQ4*)L!0WkSv9>({(_f0rlzI`$V`UL1<0Tc#<|*1 zsW0A8SQmCl7hFaXeH#}>mSUr;C^8QUl#DFZ+0!W{vNS7Y9;f9bv*&g8beR%anw2t- z&-0Vn%XId1nG#u=l`>y&FCqI9Z%;cxLX42u{(T4bf-QyTj%ym(AdW7@*(Dj#c^nRr z5nYB|tJGSpkg_>`e<+$DXbrLO5lofTH)zgjS<$7q1u7$TKD8~z$s~o8;Sk5DInk_< zO6jzqU-kgJY$;}69!BcIxKezIS{T;_R+3~~7s;DW$GFmrbX{PAN#-q+yrYWZN^vYz zVY)5_?aNEvbUMbBW~A$a_lS6G)DfHu@5RHyLGO?6zWQssbyeJTF^1ObnK2?LiX%C+ zKh8XgEUp2f93S&u9kbUUHnq3DH5OeodceuU();RLDNO5AMbMB7F_W^55s_CAn;S~1 z=#1>tu|5!_PWayKi1Q@4;uoOaS`88zqM|&JqmDMFN{AI=)T%L9U~vm$Hu-J3w!X>Q zw$;%i$r4hvX%>w2Q`nnX3R|r9hJ6{C+U_YTAXZP27@CXpePrl5y(oRG3n9HISLqyc zigH9B5QIX`L0BGv5h0;wrWz6?1(yhn1>^Ro*r=xXWWv}~rC%>DI8Zh_{4WcRPQK=Z zm3}BHdPq^xsX3@K@fvlwEZtU=HhP)3+h8gXlUXPk(giTo?b(X*%AmIf#HJ+(j4%TP zexdKipLSRDA33@TrzXb629zL?K^ecpt<2M`?zhPf_LpxoBLug**mq>(f zxvL;Shq}dDKX*!1)j2&!Tm=7%M9x02T#Uo9Fo|>nMvgw8pSXXUjKpEL=Z!vN9F*no z8EJr-5^s8f z(IqpH4<8kCNuu=jE!9cx-gLo1IgyT9jOP9Hb)b1eeI01tQ6HH_Sok1(*{VSok~4o;?{M);;N#3>qm;K3OB7^k5^<^6{X&j`w+DYcZW`=u77?wV-C6Xhm)C#%}HgCZp~ky-aqs!sim zTp%zICGS&Zwg8#$f?Ga+pB}>i#d|yxo|uVDw69#9UbcY=Ds}TZb3~@8wy{>uczv8> zaB|Newy$el3Hr-7ZV{1aVizSXJN_<}UXm%!X zr}XO8k6pDjyIl6};N|#+29pwo&}e-G&E@ohA6Rs{<2VWmI4LcX;d-2Y`uTEF z45Yq)B3g^J4Ok+iK1uy_oc%0`cxJz{L-LZ;HJMsRB#}!^pyc>#TE*puz z&FqXwyI~nf8t4-8sk#1+Ch@IPYIb21kv>p6KZy%Zq)&CF=!bERL)k+89nI)qXMn3- zFO(M2_n;|STn`#0S6=<6EPLc(vMyPXwSg{u~XeLv7sJQEw8Tgf7;)($e=x$?mS2cLK5c(`1IS|{old`gc&_|hvn5rA!r_L|R*xi{nG zpuoX6Ls68Y3u;G}CLI$CbLR2YM8uki95Rd&_>f_}$&I0P-Cq~F6w{-Q+WexMKf=^0;-7|dGq z?dQdjrEtkFNLhiD9~MWJ;v474l+H2(T_JC@$&BxcPrS0y9|e*Y2~3G{u)Uq|eMlh6 z^2v+k5{T|yA=O99RRTeUXJxv_x$aT^;@uH;jcbE zO$Ug;CpSZe$?;PoiYuxdhKgQHcO5ffshkYWjUQv`xzi|Y0x;O2yf7xCA>xF=r^4Yl zqOM_dB|cLt%ZSFV*Ad0hLk9MS!KJ8>A-F^~pKd)!lwMFqW_+o*F6y>7WLtvtc^GR` zb1{f7GrrG^?+TCmtn}Sr;LD2dZhVs&ePCiZrtMjE!N}9~{b&n{QpS5<@u?WxoYi8?0n9I_TUWRY%hK2}R{aB5ELySD^QFtA$=bS_}~4UZ^)PgYGHL8ttL5RuS8S%*~7H zO`k3nNx94zoy0n!C|9b2 zXM9$tMZ!Ca8GJ63S2|u%OWv_x`6HEw`717{8Y`M}SVp&)LTG6o_eMgRKMXQUhBO~K zg>CK>ZvBnHeAOcP=1wW6&rwj3LWGNtD^DC^^ab73TOkcuOC*<%hy@77gQC&T4GXMS z6ugbH&RbT zsg5aXW;73(Fl9s7Q}GXO>~}hOJ*!R|2jkxvSd4o9A}%<>`Ii`hFfKmqIrfWur&F%S`Qy*S z#UeO&A(1pZfD*Q_P=Q5KZVS^h-oX;m%c7AqGFle{;%xyzP+{$YFS_6xs*hIwYivy| zO2EUFx5aXM5xxtEZ=_`vVN3BDW2C_)u=*o0C^g5`g)YT0T6N^kW6PlqbQx}@i$3*> z>Mo_02u-~b2O+Jg6JMG(Ol$}htObCHxK`J=aPoQ)`jK`1jv9v*?2h%)&4 zMLPmgNAk#QZf0x2yGatqA^l}Rc|o==NwqGSrxYJvWL7k=0{X*iG3}I0;hEmUdF=PX z+K@amd_h4Idz?I^0%sZXV3D2$6-FrNF?K=o#lwz6`aw3L6!%A_J21$>gBUXrWy#yw z<)x@P%IU&)7Ua+fTtx6l%mfoT;3F3Cfhd}Ljjt5EAj;7iAJn=#Yr{!3k%AqTr}Lqv z^neE?>dMlYU_1l?zzg9b$xO_kavW3;&2KO&sVl{)61TgDcs<3FXW4}qJ;U%#PSnH@ zb4o>J&;Hn}t>(UI?VJW^pE^cA|Is0E1D z+hO#$D`;JSE5~#!YMt(1D$CI(5j*fgoLw3121$r>9OZ6(mQM6 z=#iK$NfRu6KyhW+3Q3VkH_~u)?Gc|pY`;p3HY_A}iupgcUj;3PT1Qs0zD^D~!rWcmhTum~J$LkUte?ga|L&Esl73RbWDCnNL%0 zMh2BmDb5>>9VZ=cpEwyTS!Zu1bq4W43DaVF6v#B#3x`beYPL)hn#DIBqD}8ZBZ+3? zA)!P=8C6R(8xM&knia{|uB`|X0uwfd@ zI(1}@We8R-OkA>WE6yHqHuQLGCaps%VTni^aJrB8tHf9;VeXVvGJn4ch=qjcg}A`< z*&5Fj7m+raMwS!l%gAc_i{gB-G{bt5(oDvSM#GjV&9H!w?gyR4llrv<$qk1-5=um> zsEnsVrgS4O59#Ko#RWwZHeeK^&pZzw&c;Ftv!df;HUbkzM1QrAG8D&{^{v41FVOKK z!qc;|FXD#>IGD;JABiFSqJKOK?Ku`VhYf|J4L>*kGG61lSe&eeA`b_b)6~8`Bl2{M z9E{JRQ?Xrj>@Dfoqjcv=piBAQD~21m2NvE~!-W1YV_5z^E0orX4YC3G^~Dg7&Y z^c*;p2HfxJ7CBaRZp0%a2EbXeY8+0~#iwGSGy+u56pF`-YZ-A>=Y}|cBhIuYiK#5_ zA7hrMF@0jpD)7O;2+Wr9fW;F>;ChL7vl|@R%kJ)sZ<9xk>D#jlPE{|8qOxGP3XQTz^Q_xnnBMJab&tcv#C)EgOQ3VhTpk1TzZ>&+vV) zb3MEr&RN7MRyZ)BD0=95qp-8sJb38_Y#kCy$+K%MxdE@J+|aom9B|meLA*H^B^O4Q z;$mDx=lC*-)cNexU2$kbMj_qgK<=WlyMqyCq&^aN#}-HT>w=qyGonjz?{G$R9y{h4 z(PgmpXGC|!Mm~l-c=;Uqq(}LXzGz4I3CD)c^(C?&`$|jCL6^{Ni;+F6MvWhV4HlFx z*O2JW>QUaCw>tlRHK(z{*V2 zjnk)xR`iF+)&o}6=yV6RstkVE!5$0FAA^$_yoV#7?7{^2f}AOyi-p-B1HQ(UWb|-J?a_HZe;e ziX^QUjxHUVR9h1Woc4DYMpJVq-k+*7z$+mVFLf`l^U=(~z3A4?%fRcx^G@&-zT41( z{4dvu&&xX1jS6Rb>F_~a@r^{Z8^C6vR~XF$=y;dV;h4zjOnGKHttb2fdl1Erw){ux&ew^5N0|wk_c|7332{ zX+{$SkalAC&DL?ARlDCzbI>f3A0X2 zPqA)8LCMPdT&O8|DNJ((L?l3KGFl3aFf~Kd+4B(A>dKzS=_sk}Wd*f=kj@^V!`c_r zl|7Fwp;YY!+4IKySkUKibQ?+@0NE$9!=!$U6;bNp6XL7MjG)lWG`J_LzV}% zNXK_d$3rR7@d>|PslU9Bj&GkPMm&f$Bps#j5lz(|HY=YzyNacS%_4KpYE~XsOs3+4 zX6236h4Ip?JTCW5(a2=8^4JPYHH*3y&OU)=me{LhvqA*PO{(`bB79GLEn8F`&LBZ~ zi7no+JR(X#e~QY>NBsu#aH_mYXlG(d`bZF;MzAr9fA zlaxO6?^G~YZ6i2{<-tbK7gic67un@X^}o`0M(Z1@GTO4$KO@jI&Tfj0}NThw9R{F86 z9$83&!~r648lN_Sl=Iwt+^W(Cr}0G{!xJat!(U;v9Cvn4+<$J2i|Iv}yK+dcVaR-3 zd`2Ba_wovf9yqjbInGH2#AiUb<8Ie0hX+L9kb*>zP%w#x(C#$|Usm!qbZmuV6gnyF z$T-M68iyl9roP0HviV>Teiqb8V^DD5thOHw!o{y6N1qi~p4f~diwcfrShC^TRK*ON zi!wy!w`7LEip3nK7UhV}9ZBZE&aJ@yIMDF(^3wHaiJUa;`d8&hwP>pY-}WV93bR&lxxH{Bt3NM$0W| z;9$wY1j7T%?nAMqF#4vgaHL?_7;(|?(a5a7db>fW6=s>ys0U8%hJAJ*d^=7)5yv}3 zBz?rVaaCi-4<8d+62=*qurIXt>X{=)RlyV-QH)VMpXC?GtQTw3Aam8&v1gAMjf1&) zW=y8hBJ`j8qQnbGRX*|w{i4LBnY{{Ekc1|gFG}jgC-%M%kwsf64#f9r{iQ>~Q!`rC zUEMcPb^jAp_f1&c^-*=-B&&NnRb8J{b#1e&3%y%^42zx%{XjRlNhP>DhcImMn7WIY zcxccWEz!%mh^D+zBVEYm>_Wm`o^)u~%RJ>#Te&73n&Ww`XJCx_f+y*sn}I8Ud!!n8 zNp{&`IaA|udc{4}r?8Zt)?LaKaVaOnr3@-8rDJv};WU|kXg!(evR^$u8csyxMzdg^ zZQ>_^?O+sbF#S-6^9Ngm>6kuXrx-z|v8NyEN^i@t!xEL7eyFE=2@^lah-41m7$R08 zhOLJj5RE)vCiIKo*)vtKszS9Edf(Cf0JA?m8S}VCp#rDX$PCXH-zMftlA?=}D@ zlhvL8w?7Pk-)!v(N_msX*g6s%)ul^6xI@=oLRTiZsg4A&ul6%;iS@bUTl8Ts49mk! zBeQ}4jTXVt4eNS9x(VEDBs2L*q_HJME02|JxK!YJ@R7- zK0*muSdxwCgX=3J6*J1AiNuhMYJ#_Fl2MwFjJq-rLOE8(Jek$7xfm8MY_$6Bc+?A! za@|rR&`_;`9+*J)8H^W$#vk$e1TJXi^_dy_OGX}arVDMtj6$mLEe7;Oe1V!OGeog1 z9IVJb9Ok1daR2mJG0$*1dNoMDn#AY356_o&?K+^(-;(E8MWvON;r@{$^F;qD)~_No z`m9@7cVf@Tz=9GU+5ISD6K3uxFUVloQBv_)8F{-5KdSU-sdr>1wriK8rQSbhVtL3A z>*d)S>5lEgk6a)rV0IREtf2ICOME68w6_mCc2H5rA{rgrq^M*23{Ui2kD@jL-FAjjyVajRUZwCu=?s=MZgcRN}S`Y*E3-G(1^WH)J9myDKmJ$iVl z#*Ru4gbW%7===1N58^RGi7(^XR=p-U74$;dk)8}OnoDp}dJ<_Q_T6y2b>d3Qf1KecmScSj;|(@N%u-*>x1a`vo_}+j2z(=!*ueI!YkcOy-oosX;btr(FK^Z{&S*I9Ku_BT|6+W5`?<;6y)!v*!!qEMIIt_ zWUeo2FAOuV4%Lpw6o>R!J09W~Hn(bT0llcZ;OgAEQ*5@#R3PvH6#I5)CxNTB-11@LweML=?!blAG7k1J%N#Cl-37LuLZ->PK)VR&;p^0%#@Iw0u+Xx^{gm* zQ6T7Ra7R%CC~FaOK@o<+7BQn^QXkZkq=pd0BRM-nCnyPaa57%Ge?>VjMr{+APnvQl z%150;B~ZI(8s&KFz|g6YxJD%~@Kiw8)rO&Z^!Sp?xZx=r*`X5ddXXa-%V4X+^!yUo z`rnp=*Gra@xbuhAz*@#WrCA26EcF&Nq=l&aict{sB-g6CJ0@}@3~Ce2KIogDg74~X zYZhSjWYON4XJ%si2fmx9CHe!(w$3sFD^wTQA}Ek61A`IZ$71x4IEWU3s}9Q;#y`V5 zGAGVMR~=@Lho8}N7^gu7Eo}!3$HxG;Y-Kp8cOp(cRU3}0UwBFz%bjspVwidCLl_+& zzO*??JS&;_#3=Es!{Wq`Lio^4ntfRP5oez^{Pa=hj2nBpOouQ&$M`cwUVsDAnnj5Z z7&B_r*~8Bq`xop%r(;J+>^;eX$BsW8il;_T{$nS zD~Crfc|Be-8la168XBhAu-Y^m`Hk`OKusTXZwsyFK=Wr1Xn{bBg$T4npye$Hv_fDci)wWV{vCvW2US#?t?}FXT@=vs399(U7#&74t@rH+>JKjcrm`|cY13hM`rig0hH^9$|8pp8Jq5kvub<|=0v-ow@ zPyB88_0&)Or|_FoKl7icsb?IZ4)?7k=(O30tf&6Re+<9%)zAG$@!LTC!rzGBhN_Fd z0l$q@ss9ju8>_tkAby*uGJh?84^&`FG&A zr8?SQh2K`{m;Orp9;A-(m*cm!I@Z4xzirg7{G0LHR{h#vir;qXIDZL#4_3$fH{iFu z>fv9H-wx^oe*u1dRqoHjZ%5VBzYf2hR4T5Vp7Y7SK= z`IBpU8;7Y%-`dSG-X_>b@IAo{7AfFbh6LQkkbqST3E(*FsA+8cL=E<>Y4{`HL{#xp zHN>A#)7to%I@$NW#+Yj`)k28ixS9iu!>ta;;rsOwKEketHB#TtBk%v%4KRwX@pHRT zwfV=Ij>a$SX1;w4@ICPS2G1Zo!|?nO&uVr21IX0HZtmZU-%`7!3}xPKB|}+eA0$KB z)ozWUY-Dt^+n@=Untb-v9B6d6+xhmNQP4Sf)~Mq*p*2U^=sx=p|Erpuag<$hynTd! z1j;_zKFYrw{q{@yXy5ymuR_pp0bWmoMF@2|8qY8B9E;~yc(8mr9f#+5Ja~alC*Ucs zHs7jgYW%WOPyFeHXCNM|$-`;}8OPYa^gRxP1{2WRo`8uA%_5k`5%`4j;}QPIzG5(|)9O`cW+OLm3tUn69aVVa{@GNH6+(>W}!EFSq2<`xA)C*4^5Vm!o7)>4p zIPeeE=5Ns6Up2)vZrTygH;8RI0g0PV1ZZ|8{x-XsU=~30y9w?gc!1zRf`=nOdf9w4 zz;A0Rj9)c>oPVDNXmKi@-{ZNAe`XWRA(#iyQV1t0bIU~pHxMi#SV};mchCvd=5sYC z8NWJc00`)6G^_Pp1osd;K=2^J69mr^Y$te)U>Cvb1aAYhc^{><`G{a2z)x6aTXsX+ zO$1vB*xt6=2uRx7K1c98!7Bjm_`>Zr5b&+r@max1};1mqhfI|ybl`#gf%2{`5@I|z0Xe1Z8}aw#U=b2SZ6C?|2rT!53&=3m># z`3L?M6XJJxFjUR1KzWJbzL$URBZvo{v#9w)1RDt+Az=5d!HWHL3y_Nz?1vW90a}3u zv;tc?2*iX>>$}k)J%INzw1HqFK%38y+HY5FcEoHx9W(Pd`*`2u^zb+{yyXNd2{;Qq zw#Z}c9*5Cm?HYczX!mC1BCj=+EQ4FZlOI0?u@g;(~W2!EA!-2)-nkOp^0K z1a3eFdIFX(bRz*5>>w#r2!(*TSi0VgT*O=g))NFADT^azv5^)VX|Yw-djua4d`m#F z!1^Abl!aP9@Go0xRii-`n`?1lT9*)TwOdOFxa2J^d5a6e;)1Z&5j;e&o`8LPgcSNP z|FXBOM+hDz;F_^sB6ykL6@nUqR|zfPTd3~EX1PHH=$tyz_OQ8}c zgth=&$ssEM(-|k=Du%8mh`BXGyQI*VZx@7SGshf)TQa~h#tB%?&0<4-ua47+4k|H@$Bu5{ym5NkdT~0uvp-2W5SH9xPS62~`gD4V2HG|+2!BixeinKtHRVWe!wU~hXLfuF}rlH6*6e*=5rBtMp zx=>OvMVg`RCs<2BdZxHe71ycaI#pb!itAL76DTfL^(+C|fg(FlF919&Eq#%Hw-dZX z@G=3Jg(3}7uM&_DshtF`5$qx$HBz4wkQ%8k3BCg8B!zy>zxxQjAs}f`Bn^tBL6Isb zQUyh-phy)Ise-zgfTTfDRZ*7`%mnByh0fw%k~lSofOJmHB_PXC^9dFZEF`#|fbxT) z{GiBC6d8&l16Cv^^`uY|6GdX8NK6!oiF%&k1%ej|NLv(Xiz01N?+{QAQtuJGPw)Z3 zhXA)rp&#+@_XIx>{76s@0;47nOeDCN;2MG%1lJPGB$!1on_v#XbpQ*c(7F6Ok6;a6A#MAH~JgxCS9BJ4V4+M>dP)iy@k!uLu zs3D}_h9!7@f(Pn#Lkd))Y4qgV#yUsC8;B4<9^8;TSc~0D84}rh8AHn>u!120kx+g_ z%?ZYFjnJk>Xj3D!sS(=Ls3)G@cus_jj`${sZ-V$HXj_wxcsk)Z3=i7aYTgmgV~p5LKvuF1>e+G4 z$wgXVbX#B)TVNDhAVZ7a;`tpOC|)hdTU)T^1>F^5zGZ>iJUEwb12Lc$F)TE zmdM@`^|i!=Z7C_{F&WuoOR~p={zRszl_)aBRw$(v2B{Th&;~AtRvqyNBi0Hd)(Rum z3RAt+&+r_9hy1@4`9IaJgUaz>Ldw$%znGW@VPgKA#T*1x@}R!K(+|J>A;hDRtRO|^)~K%aN{nP{a+S6m&er5A8i;O3Tbx$#?q^8A28INX-Lw`! zp3|B>bD)9`)GX&2tJg4HJEZ^qC2zq9_W)ZZ5Mw?#*{MMt+qN8iCI(iXkl7QNjTqudtDuPs(y zThNHM7~Hm`18wgkxSxQ;pe^Y@Thf8H>j}8}MH&7XmqS7=7TtIYu>wR(<|J?XYy@6l z=p}-eL(mR=)edcKhqjt*Upq9o9U9yY4Q@xFO9M8g9h=gQ^rjsvYsbaZj`g%-JqM$t zgHh7KDCuD6(v7*e4n78dj)j&DWP2dn1KA!mv_}o?QG+PsS`X)9Z_lOMo(rr!mu~wx z03DERJcqRd@^(Pp4#?XfkEaYzS3FGLf$0;PI~QIDlCch4WCA*(w>u&KWLSKU>x4o& zp#hyR9Gx&6oj?scF#!thgn~O^1$Dy0>9iBsJG~YG%7mQ+>_+IXTwk4DXWSbAVrc9X z+Y~!vT;;*oiUk3$VzQ&r3bP{~q&2bHrttMlBr?GpOxPk!^q+}tGf%*SR+!MmO|B~q zxUNhATvFyHg2xEBkS-uSFZnZ!23)@yyuy%xy$pRq@F~G(1fLUpLGUF3<&hFfAtjFy z)ByaVrYp+a!M{5RULzpWFCo(}A=57*zc1NC@Gb$(787b5<9NG=|9AZMuut^I!|?li`|o}Ue*a+q!#@PSf3*MYcYuX(IJ(Dg zi@=}k38vo~ff4pZ({F{qY4&8(KM;Y_?J1_;7=bhFsn|_Gpvu0?ghkjj&a|&IeGh@N z>}jU&AaJ%l-SjO4M%q`IzKOt}?HQ*3Jp$+0*P8yf2#m64n*Kfn&b4Qmu;04IXnUUN ze}cey_I%Udi@+Frf$4vUz+dczrvE+yW9=JEe-8rV?8T=476Rk#C8qxd0_WQ|n*MGC zF0gMl{T&GW)xHHAGYDL0-)j0VBXE(u%=EV-@Hcz4iQNj<_`7|d>2E^dANG3FUx&ay z?M){38eHRF_7)SCY1jC-{e%gVv}a&!UNEt5;29H4`$ZEw2c9v}v|lm(`3PMMDZ}*V zB6Nvq?>4bNP~Vtj+I!67?T<|VWc<6-wBNzMy(T7vXG}Kj&rJVc2u(5V&rSay2u(HZ zZ%s@~&$!IAzcVp0J>zoI{@%pY^o%P^`v((~(=)C#?P}$}htM?Bo}m195Snh<6P5oq zLRXpg#mavZp{q^%QswVL=o-_Wto)tWn3-WZpf8S(jSkni)^rZ>Pe5R%>2&swM_`ue zlwg{<#%$9%!S95?9MdZIeFUyEt)6~+1m>F7iGG`!HpV>D>hF8|uu3(!%tDA@8#Wu} zn-;9)Zbt~y;PO91)eB4)6vu6Ys_PjGO%H#(Ht4eY#`UHLy2Gb4%3ox9oiVlh88?{T zQHX{WpQKY8@W_s|*^aA48|&U>h>TGi=ENpPHB}qozD0w&qsGOicMRf=MfVRfmYCkJ z@#na}O1PYv?;#*V(-y%RhV~GU`)b4A~Rr!x9+O5RA<+f5fZYXnH+R{t13hbo5fw>xni@#jze5BRgn^iIQ{)3KWC8Mm8W75<#* ze~dqOnBLj=Gtz&zrn#}&^sxKjjqKS*N-aql@U;h0tM&E<+=E#6rt;8I^*M!B_Ux?{+AI-kLx7aj4K>Yo* z|N2)UeyxPO+f4I${Cj{i%Ev#o4XGaF_+u}uzOjx5V&A*pH19$DL!1)+IK;2#yz{+H zrnvy|8#qh+D#SlbG1 zc0TJH&r8UgW|`lj!(TAHMV4>9g=tm~$zC+Qn=StWgtnXBD$73?p_feWZVTPgz@W~?*$7S&NE&$z1J$g^-Zucp z0ke}!8Qjb>UX##I5ZcA%<{yO6ZV9zQ=yi}E+rJc{H%#wZ8=T%V-lXvzZEI`1B_Z!7 z8|}6&Jo6q) z%iL34lT+d&(h+|Ya_p55b`>$v@!aTQpQo|$v5uXCn7OXm95J6Ta=Qe5mc*v{|9#W*yMgTItnGmhIeW^nMQW1JYrv0RACBD<~K7gvX<}F zrQXX(vgw4moEn+7l+(PiA4YQZBGYXLcwLwJ68}?AtldgZJxJTezhsEYZ^8ur1OL)E zB-ZcKbg2{2?b-%@2}6?zE+wG(Tg@UMw@+BU=kc%DyE9DP9dxNQO^B^qTezte6&kn2 zq+OdeTg8TK+OY4^rPgi9&N5=xX|R4rmzrg^PFt)KcIy9ZqCQNQTAQI-P2{qrmFVgKg{{mAWMVcOLS zd&F>ef_kE?Z6+L^pq?mf8N=lX>WQ+R)ym5y%7PkmJ>n)Q3u+97nM;-Rl2%?OE9+&` zpM$t5%7P#>6QQZfdX)+d)DmUwq$mZoL|Lzy5GkORDC=!gcT&J-0?VpCwT!pP~urbe=r?CGG4c#;5D{O*8 z5%i1&3OnJ@1U+M+!ge@RLC?5eSx}ZmMCkg z@*hX&MrA?B+KkXrWnH15K6=JY%9^GipnAs5%9^g=)aDttDC=qkozgRIRn|4ie*mFn z%DPs;rOh*zD{H2LqUjkclm+4JPJ~t}YmV|)BXpaxu2=ptgjOl*1|?&8yTZo3jO85) zyZ54qu2$H>7e#c9vX&|t)jJh-^kr1`FX z0(s#+1zzQ2172a*9lNs-nH78i{AzHvwF)fE#~!?5Z#|&k830wavGJgSdw`G4coW<3 z>T}@MDfkNb7b4F?3e3*Oro5s$yk5a+K$O}I3Z4T{YMU7kD{w*|Tl6L#1#c#EI!rnn zm9+`6;tddQ|Hu3NvdbUu?Q=tZ6e@TG(^&a`Kh9z`hFII>pCXkPn zHOqntq=E4XRtO5%g#v!S-%piwUGVoio z3zWWrag}9l2VwybBY?QtvR=`nevM_-SpF2m&9JPU7Dx$*w`IMiM}4Mc?Y4yQ&$2A2 zbtL?=E$dA^;BzeNEepf~#M`na*#0XB&9$tlHpp(JG0(DQ+51ljVh73CM~8Dv+*PFi z{s9M36v|$#K=;nKtl21kG5*HgdnhQ-0?V57UsTNM9t1U5Xj#`GTilL_8ter2ddr%Z zjjcgj7FpJOVAE|m7;U-1vK9dG-%!Il@tTV*>pn;mN1{WQSk^QF+!FiXCY0$$P8V^{p#fl5zK?`2r;MyYm>6jW(=9* zj{t6qgy4-#H#+$EH!!wh92`B)ZP4Jy_1~RHpc%IQ-Hrd6KkDDN9k{VJHlEO_iA4;# z;gc2|;32?*Yf8xa3OKNQdB9o8T^l0Z(-yqwK#O3dk`Vmo%&+n98U1gzYwpFrXZ1gr zJ3g#wWjtpgl@HfCy4TSIUY>er$McqTm0%!Vx#o%B=`UFD!}F0wV&Gf{2On@*bejwD zq_MGGLe?E9W3_93j=EmbG0R-@e*Akm!mq}^SM)!mydCYRvEYv9!v~Lkc=WoL=kF-> zRm)l~7{!wJq8&RdIPCdIBQdOtHn*KvqAn(3ed9F=VUd^<@o!i3kG9F(ShUCs+`o|L zbr5qGGDUsk4GCdQK~AY}ya}p~RQN|(=q)TT7yX|z-Uijhs(TcXdn{O#v84l+jmhL; zTcNS>u7p78Njc3Xu*AP-slP*5bdC2d^$%zOuJM7T{t1b|H9oY|zaS7CXMAL-fBPkW zu}a2SCI7ZcFrQ1N<5`4f6`uR?Y{K&%9vGiWpr({uYje-e#6}$k7(Cy?Zk^d4p}iK= zU4JSr$o^~zOvw%C_2d37Tgm>3fX7DRw7c!Hx_&p zMH~6ng1yB53rhLUg14f79zx$+FoKEQ^9Kuli_le?89!QZUi3@8KuchxEt&6NHw2P_ z4R1!-o|$07rBSwLCfYE$_^$(du?^=&*{He1hKD0IY9I~RaC7uuMd(r+zK+5oC);p% z^j|{U6dP6<|3!qR+Az)Fn;d9oHY{)WDhJw`4gW`cmjmt0h7%&RW=+WMVGnShIgdMFxS|y_xKMZ-3(j7Jh&dAYi&47idHkzRyUcV z)y%TtHVKP77`zQ@5Weq#c4otY(!U#)tLtn9Ygh@a`z7P>{2LFHT@#Z8fF3LuIDkb2 z+z-VV0^CJ#Kfxw~_XxNR^9{DRud~s+_+O35f<6Yg0!BQHH^8;vJ{Wa?odmBDPzz6N z3eN}Wq!c{YR?=T7v|*=|-M&S( zdQdCOH`oe_I_2TTHXK5QjV`fa>k>A4qYa~`D91}}_=k#&1Pe11^@+%FvkgyCNXAeW zZMcidZs4spd`4wAaG4FqQ4x=q+wdM0X=#NG7g8~~ue4zz6Se9#8+I~bw5x15lgeJ< z?KW&>vR8PA4TBlX$6&NJd`q#Z4MuCj!Bhn0J8gKGilBU#4Odf9r|-7mZz>}5J+|7V z)#-a}^_GbZZqK;SR-c-Fe}wM0VW#zegV0(VW;eeNLJ!#ROZ9sr^q>vrRP0YdF|=XC z#V#Y*q76%~=s@djm~%x3+F-*_hYfAdc-V%u4tpQiL$Tqt>K}#BBQ{)DMH_n5hX1N) zLz`@v@x&nVmSufe3&pUKdAsy~x? zh@nRSEHLXpgO+ z(NhO{$A%9twzr`8*$P@bwW0SgfwfZmJ|?gdyVeJozzTaj(D^Wd6}EXn|1p8Jdb<}B zSgW@mV*)GqF?hx&n7~@m{nS=aoDW9aXExk{;k1A)3>!Yd@LB+Ex8WEp3hb9Qyo3D~ zi2KThi!e4ZJ>zQ|e!}o&@Qi&n%&XvhmBu%=f?C~@TNW*^BbZAtk6=E*0)mAE*AtLJ z=?{$-Gqi-@MuMdT+{L&I#ea*rtNb4k`VMnf!R-NT0&`cv?*U39=B|R{1C&P0UA=i$ z?WhTs{~6*YI12jqCkRb+6!h)A2wm)`ODwoSz^}kjS6lvT2u*U}!VD(|um%Ty%wpV{ z?7*2>j9XJ2cr=S~YpMgcW-)GE=D@dEj9ZsGaBvpm))fxCoc*U!%9XIxSYqay=3qla z%v{qQ1r>S=uva+>YVcZwu6E!94fEBZ#x)Kcq5YBzRLL9Qwjbbu$+P5A1OZz1=5&JD-_t@A}ZDw5Sz{a~(K%!=QGUG0%aQw_h>` zOnx3-d>wu_;P)B)K9AoWc&XjCc?e!%z5`cqzvL^#OmR&1;sQs(ATSf5g^q$TU)p#2%O z0!#tF>w-FNbQCsP|Bld72X5yg^4tWwo;JMP?7#tCM4nq5c%g%zR2sKB>Q&2c^EwJ` z^A^D#0`g-0O&mL4J1)lVik~u$oI2r}$ng<3M1{(iIqF>tng?v44m{oc;Rvm8;O;IK znUxNF-o+wwo1;Fo#DurXQQv4w%k2)F;f2cF;lLwasLW~yZt-GlTjRhtUW{#bI&hHp zd!XdI9C*o#ymB{|nJx0lJy>S8$Se0^nb{(*+=pdmLtX(}bKp5I_Sm%!+~>s}`+x%< zdjED{A9UbI@85>dItSkL{tAR(0L8BJGKAJU@T>Q4L1=>m=Xwz?9(LeiFT%w}2X6Kv zTs-2y*ItB+M;+{Ch||I*EN|N{*=(6NBmZMq;5mWlH? z7Pc)D=LsxqTPDtvSlG5q9GYNlVN_3JVcWu}wqar0!l<5c;Hxi;>RAU4`@*Q6bKtcv zjOuv@uKU8MUU1;QFH-Z14xIQ!B-!p@3q@q*mmGDIEfeQu2k!hLE5G8vr(a~{8W0a# zWaU>uJh%@JlO%|Tt(h07gAL}@z<3Q5LEfHUtHLhnsQYah{M`<|0)YJ%+Kz)y0pLjm z_Jp-*i|zJJtWCWM{}$G!t=SXSrVaKqz}SPeXZ!8$!SriKc30>-%5|eZ$$XR{N}Ae> zbTdO+2(}V%_maZzJC1tF_J4)YyAHlS5X9p>4(a1J`aXhQ|O9HS?ME3?ZV3=wAaDL5!~~j06Ew_61(ju4z`fQZu_Z& zeI(5Q9emKB8K8r&8o&U{jV~Ov2kEXxV>?_!FpGfPt zxawL*81+SAw=Bl}t)fk@!nn~@5B}dx)fX{UZ*>2^r)pEY-cnbsbF^{SRS!AZxa+F* zjyCSPYJ;PVyRLfJ5v_EYt2R2Kl`ePHBaUdLD_r%cBU|Y&30f)hmt|pdWTsjUxu= zjjn>}wGufVan%k-wwxYy)lLUa<1pyD>NQ7n@5fxV%Msmsv#WMHqI+*~)$5Mv-dkPu zh9kQ7;M}a3@^^N2I4COuLs_z^)hePvq67Cc7e_ zyzHtet_UcvxN52^0!odmE^|dddDT^yyCR_M07-Q*JKGyOK~h~`PBoy}=zh{5N}uA~ zzZ40umkaZ6EeV#OZM#5#UCiYYV>bvelHS7XD+t8aM3yghC9w}Zk94ntJpZS3G_kz_ z;_YG`{LFY0#2Y!t^-8WFm`<>WKrB>ZlA#1+N2U?AInA+%B`aYe^D!u}EA#jh5MNj3@uwiPuFT%gKxkc=y`O{7x-xse0HLMj8nOcjtt+$l zD-c>&X7AS^w64tFeIT^1%-(N6XkD4T--5ilBF29Q^6H8h|GlejcSVfOBPi@lc;%ZMlrq{(ap4!ZHQEANZ)E11%t(+YHOE8^gPJX;x!mpK| zujzt9OXl(a^#n@@ZYEexu!>*}!94_P0nWm%*tMS8igwWAq>ZPvkrFY}Q;!!Rs?hRT zo_YcZigo(~cCfbH1aA?%OYkAVCj?&rJc5?b@=Esc|6J;+3kenz&?Bp48NqD?s|oG~ zI23zGvpw}B+A)Le5R30@VrlIC1lT#AdMX=BTgr8w!hXr62+j4>Gp_Kxd7i>v39Yg7 zJ@vdR3eN&hz2J(%v(Qs7x}q~*@2Qtu;dYBW^|CA6?gmf2!u9DH*w5eLisf~Qr*?8R zLf`h(YjoTNU-r~)S8Q}QdFpjnY;-q!>J3+HbhmiwO&2ygI0|{{Emu_IWuAK571emT zr}ns_8n5uwJFck4D?RnDE85X*o_fy}?P!&!-giYiy4_PBxS}21;i(T@G2X5A)JLvp zM{7K_*A?U4ou2yG731Aqp8CWUwfb&PeX7^vJ)ZhZug7~m^|@Y;_j&3Iy&muP)R%fa zuJzPcuINM$cm2p$ivnETdy>IYZ6SvGj;M_0UA9`;nV zC+l&erzUzLm_6dDi#-v{9`)2Eo(N`}JT=J^!R#?lUFwNow%JpYJ>gSZJT=7=KDE_T zQ$68Rk9+DePx#amp1Rx{t@J>gSNduo~|d}^DgrhCGtp7GRGp75z> zJ$1DweCjz*UE>L#dfrnrJW-@y@YJ=QDAF%_YNjWO^mb3p@UvLR*e*{k;)Wf3c06^1 zCo}AIPc8ODNqNIlOFW_TZ+hxRPw4zxo?7Y&oqyX?H+e$m_ju}NPw4zRp1Q>oI{&Vx zZuLZ7dCybJJW%`tjrTpZ-1GG|3%9IaL)-_RT9J&SCGta0t@OYJ4m3XU)NR1Z77cTp zg}A+*T9u5eLXM9;b%!T2@e@z2_GBi03hM63O#BSg-4o96IjFlQoZ$;lcTYIOm!7)E z6VC7z=)5PK;cL)&PiEpi(0Na0;y0dJ>xp*$EhxSxbMiaTc~5o{z6YK6WGCSV(0NZ> zD}Mx?_e5f<&Z&nzQ5GiT)J8ogC+5^6dQM)PQ;+I7c}Y%f(sOcBPCcgQaSNciIeA4+J*DU5l{xjao|DsZYMY*u({t(> zJtwcqsb}?^ygH|z({u8goO)i*$r(BIf}WGt=G2RNPR`7!?Rrkm%Bhz;p>?x!>Sa%8 z-JG0y#S>b0T@Hpiu@BD8saHKQ^UTYs9iEtZ=I7K-Ps}_Ea_Tit%sdNoYL_Qwp6hdJ zwpdP4th%c+k& zp?|A#>JvTdZqKPt^{l%ir#{oOZgoz5;fV~rCa1piM25aIr@r!J|LU%s`r4EItGjb* zpC|iQ_vF+!p6p-Un^WIf)SG!VNifNlqx?!#Oo6CzNnwPFKvPa%A1UoD9s7b^CKNC`Z;E$jRUwS$8leLvm!@p_~lOk#&c2GAu{d9m&b? z99efXCnIuX-LagE%#n4+b22JN)}6@7=p0#hGACnlWZkKpjLngCr*kqsNAG(kClhk? zzGrhXF-PxvE+><6^uFhFGC4=@dm$%Na`e6zb22qY?|UgH({l8_mvb^b$IR_YPG;oD zx~n;vnIr42apWL}O6cPl6Jb5yw7Ia!dS!rjTq!W^US z-JC4SG3wsS$>JQN?){uB$ua6afWqb2WP1pO%W<0Y5fm=RY0?HwR^;e{n`p8!M;F{w zlT|so;AWbv&d~)o*JMqOF1UpzYjbqLEj3w}WBIz3ChK!*pj?v;In4K9WI>aSIZl|i z)nrqSBWmq5*_`8uT6;~lDH<8Mz*_T?CVdug&i$N1Y@lY@$DeKa|wxYk#b z!-{MDG&!1M)a|dyu^glB08NhP7*Imt(9Q zrpfsnW9@KFF6O9aBQ&{`qneG>upW7&=*#dpWAv6ix2usAf|&d61);P1EF& z;?;Cb8Z_oqGc;+Uu{APNlV%!os#%&e*QjB$HEE$y!{%txQlo~=)ufe14V$M)YmFK< zUz4^P*|b2Db{g5VP?Po=*|bQL4jS3CSd)$#*|bEHP8!*?RFlpc*|bcPE*jaiT$8RE z*|b8FZW`INQj_i)*|bWN9va!ST9cj{*|bKJUK-i7R+HWu*|biRJ{sAyUX#8W*|b5E zej3@dQIq}}*|bTM0UFt~S(AYp*|bHIK^ob#Rg=LQ*|bfQAsXG>c1?zAbaOj28K%+A z?bKwrMmM)hlaU&gYqut&G%D8~O-5@}uDzO!(WqSeG#RT=x%O)^PNQ-i&}6(ugmFuu3lQb&V5ltp*WY|$nrf6i?F-@jwWY}>{rfFo@2~DPJWY|efW@u#C zDNSZ-WY}p=v|1qlVpv zB5AB^-GL%$xWyS=3Mi7siTHa^B#jgC_n}A{Zf!?j9*U&Z*8@F-B5Am}9esHylE&Hi z23y;uC>x-x8hoBUG^xh zwb5m-;#yl>_9?El(`CQnT6vm$Qm%eRMgexYk#f^NMTz zbh)6o)?b&4ifaROxum!@P?yV!YlC#TqPR9#m#d0vLv*>OxHeRm>xyf`bh)9pHe8pR zifbcuxuv)^QkUC`Yom0zqqsI&m%EBed8D{D zQI`gtwW3M7G|^crnygDxow_zfmu5P3ZK^KKb+&w`>C!@H%XhjiEp@hhXXw&OXO=os zm)1I~MzeHjqqAx>TbH&v7Y~L=Ihc?r@}4JrISvDTc}HC zoeH-|mo7RLZm}+Xbh@u4y7blQzLx6JPpA7@rb~aF?rXU&19ZBt6}k-6>AqI#GDxTU zTBXZio$hP3E<<#>uQj?1)#<+0>M~5H`&y^VaGmaJy)GklD%S>GM(I?pjk=81sa%_M z8LN{`n{^qdQ@OV2GG3>0ZPjI>&g^rWE|YX-pWAhrtTX%Eq03aAdbLxRX*%_4moC$F z>eX&t=IiuQdvsZ#(@X8uWuZT^8%~QU`QdqSH$q)McqoFLg+lWjejo zVO^H%^ioH3S)tQQ9o1!}&X{*hmsL7r-f>-4>x_9PbXlX*!JpJ+txgAjN|$vy9sFrs z*6Yk0&*-v2XWn>LmyJ5}#&f!C(wR4&hi>Ssv|oU3=v1VO&<&l6bP2klQ;{y~vR$Vl zU4eq=RHUm=5S@y24GN-Dk*-5QbSlyfD2UFxb#6jIbl&`a3ksswM^LWYP!PR70J;MO z(d*NW&|N5qUhe?igM#SwHqd=tj_9~u9r_0a(b?;L2nEsE>wN?T(b?;5Fyw^J=-0%M zlRBecQ$tSajDF1wIjuALH8|kh40YUrR&IDGs$Vv*M?2&bD47smZ*V~W>igkSqd8k;|*N{hwb^Q!! zFgO|2-;gE-C!+=!($rvobD$y34E8q%8PeQfe{--QEe!TIhZxe*Kz|c;LPJ^^c*Z?$ z&M>64!Pe$*L)sW@ZH_Rct-;pjNJH8gY;BG*q`kp9_Gm*o81!6Y4C!dlbB#5mlR?il z&XCRqJ=b_cx*AlZ35Ikts7MnH>26SwCK=Mhpdw8+q^Chenqo*VgNiiOklqFrX__H@ z3@XxeL;4z2q#1_vGw8Wy8q(jO=bB~60E3=uwjl!zdagN!3^M4s<{C2Cpy!%r$Pj~` zYrY{v4SKExh72?4xfU8S+@R-LWXK4EtXpizNQ10fV#p|itXpcxXoIXpswvRWQ9Rp+i%E9gSvLWkW~hC z?Vus64eHteX>Wb{f>H6Nc&;YHeH6Q7}TaK&=LcWmBNE6pd|*i=^C`epf+8Hf*AE#yn6!*V$}aHpqo$- zqdpxcy9M1aIB$6yx?ynM@(y&v;JoEssD)9V-ehnOYGKsh1iBBkFzT-ZJ%C0SoVR=k zjW9TG`3M?eaNe@Pl=}u#rn@OUOe#$eQwErHH$6=mXwu#EGG&lS zchlRHAtn{1k10bu1UclM2$`l#wPCWPmB7Oe)AgQ^uIAHw`jntjT)Q zU{l7K^v^>~nP5^khMF?bq;3o|Ws<3GPBUeSNuM*ql&L0t&PY?Hne;iMOqpR)Ek>I% z)1+FAF=duXwHRy49Fy*5oGEinx|{K)%roh3CYUncq`R4D$^w(_W|AojO}ggErYth) znx~ku*raQoYRVFmu6dd%%S>v-bW@g_)QB0TtT3q&GfmlGQUzw2veBfInQh7@lTK!i zDO*gcz+6+dnv6K}Oxb2K;>@}$ZOHA2k zQU#Wpa=>Jkwak=*CbO*NrW`VvWvwvflu6gJ(v;ICUCSy{&X{y9t4%p;(zUEH<(x?s zSZm68lPa*zlnW+RV7)09O}ds1rd%@VS~i+;#iR;sGUckt`GC!)Tr)YLw#AeiCRJdo zDK|}em2IZnGU-*en{wNvSJ`389g|*Vrzv+$>cK8knp%ttyRm01Ug&XVO8^Xc}Mtgu*r?qJDEi^|Z^ zl2sO!p_3)6EhF*hS+d=tM)bF2heeGTV98F4xzIpMc3I4Y23fL4 zF=wzPdlhqrSh7zsXQ(Cn6?2AJazHU>xFrV_b4FNlNHJ%mC5IJrMp<%1F=w|7bacHI`mlcO*S#m{jXtpI+EvnBPORiZ|pShM?x2Qhz zEV*G(edb$o)1vw;u;i9S^;u}iZHwx&$dWr2)n~CKcP*;V5=-t`%$b&2a^GUkw9Jx+ z7S(6DC66r5$F8uX!KQm%X-N~C?sb(VO>Mf@)s{4~8HLtZ(#|HE)>_iuCY#n-(!nO1 z)?3oaruuBKq_fR9v(b_+HeKl^OS;;0rJF73X492!v820ASGv`b9yVR+HcNWibfw!Z z>19)gc39HerVj12q>oJ<+GR;!n>w`HlKwV1w8xSGHuLGdmJGD%LH1cP$fgI`Z^>Yr zuJnKw1@<5jN|3m!T0h>v~r#S!7dvu0kzrs?Rm3h0VI&b*P2S-oy>4g-w5Y6KY}8 zpWcF6*o;iKp%ykH(;aApO@De98euas-GfHhj7;~T5jG>!189WJ$n+2zVKXv4f=1Yk zObxbdvZ+H&Y}ss6hnm{5MKPzDEn5|Hn%lBXF{gzs+imJlOIvo>)S*_k?6eudTHCVA zW&~?v%Wj(ytgS73Y(}tlw(L{PX>ZGZ#hebd98k>ZXv-m+>eI=V!#35Yvn@w#s!tbN zj@gV`U2QpTGj4UW<%G?+)!mj;iZ4BEIj#88)0Q)eFTHFzXER#$w&lFdXw}D-3yLp& zZMmrU($AJliZA_bxok694Y1{k&1f~yma8_S)gW80*^E|$ZMk8yUOdE>n>OpkLv6Wb zvtB&RmOD0;X1FbPZ7R(OTkhFZnvu3N%d<8&%9iGN*5*dr(jpJ{`hI4NEv@qP>hPii z=^)Vm>*a8|b}D_joW49rUmDUmqZa8)+w^5+`m!4@2Bs6n+R_?--<|ZPpnaGm`U}>^ z+0v%*T6*8icw5@#ky*Q$3AVJyyZ6#>q_++I3)Uvu(xLI%&+&~(wsgv)H|u65+tL~D zruQ829-~fJn_^3s#%mq$jj6VD%R{-`%rslNw!oHwjn~%V8w+h2oCn+8%pzNc;N1i1?~%Uz5^IZX8QOR)y?=3uEyMEg zaBgO)EyEkX`!lR9vt>l%wRB!;xh*5}h|X?ig)O5RzxyMst+Zuy?&?lgFNM zGplVG+xXq@U~P>p;~KA}cb%-YWqckA>}J;4GNJLi-@w{>TP8MM`x?Hn!InvRsIr^c zXv^fr@4k<Yg=uZ-gxcP_{KI{X5>*_a5LL& znc4W=cd@p^mRXJ0(z(f1IFb@anW)9f0sPVh6VC|qSiyN=Kgl`f+F4uHH(pD}$IscaA&+>3*(h5!Hh$N|+66?C z#%pT$N zw92DS<7Vz5S~Y(68rJUHa^U}nrSBLm*#ShJODl&}q5gSk?XdnlATMnk)}IIFrLDvI^Ps%6b69^KoR{_v z>(4{-(!pWFh9D9FdnU4ztCPdFkpfTO5^_ZVu;`M(3rw z!?~p~dFkPBZfR^@dOEBljmt|fhk4`py!3XMH%`b)ABTD4#Ju!%m^V(!OFxHsb zcj(uqMX1J>nbmcxmF^?8}?a3WwsUgkKg zQ*X@6Jcqt+Q(opf^mUu_vcRFQ+me?>4mr6sFN+;=a$8=OIP`Vf^Rm>TuiKHAWe%$l zJM*&KVHILmURFBvb-VMj%3&2^PhM6#tU~O~%UXw7!oIw$bC@OU&&zs;S;B$5YC|;%N~by>SKA?>o5;Eo|k+BdLk{zRGkH1eFb_DJmm>}<*5~qa)M3T?d|r+@?517F%W(&f zMu(#3<%CnO16|6?DTm#(%XvBNu$y)zFJ~OyIe8Vj=G15Kxoglh2M$HhH=%G2HSrb{&SCBPHWbcb?fMQB&Z)nO@7{&NIe5@IYTQsbr~V?)eJGq$pWc`B z0FvhLtbm8mFo$OaJc5Qfd>BoGBX=CCV-rX2D&{nG9hvA-n8GaQ-ivKl(mkvT52%2|%g zb(vMpc4VH*ta6Sc^IcX$=Q^^$Wi@o3BMV(tL+3lP$YnKjfg_7u=9dc{S>iIkT;#}7 zm-UFnj;wVV{gybg&Smsl>d1PRO0&$7jV>z=%N^O|vf{A9kQY};IkL@V zm2AryR1;HcVw?iec9m1K9^O9jgIVhS%ui-$U&EN zsm+cYa;ZLB969V#eYQGs)Mf2qnu&&^!R~hXRFbpU(;lPMIqYeV?(01Ev`6=K0Xx|vBQ849(jy}-VNZKx#AWPhkBqp2 zJ?)VZR~>2VkrCG%Y40%}U3a8|$9QzZk&YhY(M?A>dyGf7paLG_(QT-J$9QxHD&Vos za2G1zu|jnZD&UbX_p$dq#-j(=`yS)bL+pKze0hW&?=c=VxYFNam#m2^13dbnrmhV1 z=!crQGRUJJYVOKlkAA3yD?>dhO-omXc~qKKt_=66G_743>CpwXab=W87u433(H>n; zJ6FbdbV2Q18SBvnb#P^zN2TfL%6N}T)5(B@AEO4G}g86K6Uw<|L}Dor0(W_eVazOKyns5Jdtnd4Du z`nxjMqtXm;Wu8Z+8R*JoY-@5*J5&zacZ%2kgZX`?IGJbI)}u3Y!%kv6+>)8pfnwzzW3n)+neURRp=WY|7e zn)_tfepg!hjAaL0Y2}k)2VH6HlVOKkY3oz34!hFMr(PX#rM*wRI_gSCpL%u7l}bNVNed^T-SGxN2&nI2!=F>l)a;3XZ|9sk&9zONzj4M5T>eX3Sdim6=bFTFEncbat zrH{|-?t&|Qea5$ouJrR6-!4IOe8#uS&>Wvm`U;fBC!4N9X?(Kjnkz$mvgtaM#%FxH z0j2R7-)_1x!e_nx7L>+ke7g;$@fqLlKxusPe5zDOPnP;r zsZO3O^QlsuJz4HkrMh^s!lz1g^<fy;6#i5>_to5lQP? ze#Ms|o*Yno8S2SF#g}2898!E4?#W@rml2*EQG6Nc$x+3ZQJx%Ad>QS@amAN0o}BQR zd5!htq|Zn<&XZF6FfPim^0Cnvx+&BJUOSBGue~#K07s2Jh|XA2b=22 zMV~p?G*2%1^hnb^xvV%e!;>qDLo+?O=F=n1^5nYW&}>g`C=Si>kpiO#;Te6`nK=81q(o(kx)iTjfdffNWarNsEANTH{H}fNWapNvnWtTIWfdfIYtT zp0o|9LmND47qG{-(UT4Vb!d|(9RupnW=}c=(lubdzul8= z0TpS7C*1=o(oRo$1XQG5p7ab@zuN6duYmQdJ)ZOq$hEzm^a;qdeV+6Us7?Dl=@(F& z4tUZ(pf(-!WI#Y|I^@Z~fZBA}lfeNa-4RcQ1oTozJsBF%OC9rMctAxu?#YONigd!0 zkpUIyq$i^SGVGKmqXRPRv?pT%GVF{eV*@hmtS93FYSTGS#s}1<^PWrys7)6op(ehpQ5uX1=Ub9BS^%hJbzI7QSp$9BS#yCdHvvzHA8?%Ub)gRdJ|| zFWVG{+WN91U@U9r%g%tYti3P00>-iqz8q5A=;+H~#f?tB98uip?8~u0O~CqcJWvy` zzMKf?uDkhiGN23U?#rowE~tkurvtj6p1zz>-00=YS;dXszMNCs=;O=zfIhpgFBby( z?0&vn4Cu4_`*JCu&mQ2*<$!T(pf6Vf#;rlVTn!kv2K#a?pbHw}%k_Ycd#Eor0#<;A z`EoO0hBn-nTLB~32w(0fZjAKhuHwchU+yVxjP~We;>H+X9w=^%_2r@B#yDRdDQ=AS zr6E)ku)Z`2)dZ|BO+z&S>r1mxO~CrnJX8~~zO)F{1gtMDLp1^GORG>#!1~fUR1>hi zvl_sXm*185L4}w)iqSr21_2WpYS;+2+fXkR00X%hZq@+TqKzkR00S%k+>O+U3iP zkR00W%gm4*+T+WtkR00U%j}RG+ULuhkR00Y%iNG0I^fH^kQ_Sb%lwcWI^@fOkS^%3 zFAGDupd-F43hA1U`m#8rYd+@7l8|#K$9-8AQeRH^vOJ`|ob+WyNPRiw%gT`Ya@v< z8WB=`u0kV1s?RlFwuhXGy$+2Cnfc#<^jw-}B`_$jtw~F9$$CR{@J1u=Vn7$mw%YW~4GED;w2@Bs$*MEkkW`X86TKeg}Y^Hgjg@`KI zOp8D(B9vq^Edwn^B*|u41zLhYlFhUZv=ZV-Hq$21%J^4gGi?K{f+&*BvaKzjw(G@BU^Xdgf^Cz}}Jet6F8&!CH!Gj zpuNvOq=)&94z#b};(Qf<7f$mGG#ucmeG^Q`X2u5Ex9X1|j~o|hII1sRh%1s{eSDCM z_&ZGqas_gAVvxgMoj$UAQjjY*)XfB%9OP;ZbyM+|P6>2eem#%imd#8J^aA214(kjI ztQvV(q-#n9a-yj0zILY-Vm? zRFMZ}GxGxDG5(Y12gc*zZZ@+ZFrEN)vzdi~@g$g=%`6Ixr$F3nW^rIV4c=xmO9JB= z&^DV{8W_)lwb{(Fz<3UY@oZ*!U_6hycs8>lFkV1eJeye=7%!qKp3STZjF(Up&t_H! z#>=RQXESR8;}w*|vzfJl@c~rCvzc{)@hYCqp3STej1Sfy1=tW6uVK79o7or`pT#tG zHnS-(zJQW-HnTY}zK(8MHnSx#eulDgHnTM_{)O>oTVUXv(@)@kb30MmgWnMtziOy^ z2WTfz`qb-Pf${5xy7Z~nyNTF&4~&0PM|kWd`Y_(zNAx=W_xA@D_NQed)y!rN1Xh8+ z$-%%X@;5mYSTTQ-!-19XH#rhmCH^Ky1FOv6VR>aFe|j@2W5Nq2U-7f%P)lc?}#GiL(pDHQl|N0~Yj*7NmN@ANO~gO^|8y-R`h0gS3=GnWJFRn*|JnJapevJZ025IeG-8_o4FrYpF*6^W*!9ArxE6}nTLV(1w{00 z=22jM5dl4$X$Y+^alpV;n}^m{xnWy`*0*@bb<5EDHts`! zj)m5Dc-nRA(E2X!LV%8i*7tbYb=%PTK2N)D7g|3+nH4$~T0caU6*?ALKjQh<9YgD1 zc*u39(E8W<6L_n0X#E0@n1qgn)-SQEp<|)-D?DHlIu=^L#`7hiW1;nLxZeOe7Fz#~ z+YO*&q4giQ+Wq4g)UXR?{Wp_QJ-3mprs|BD-(pktx+XI{!-q4gJ*Q-_BZ z&PYg~i8~^+a5BOuppl`4GZ50p?2ig9oPjVDXmn_GSEtd939VjrEFFvuEu3F|-EOG1;3GT7&AC>`e|WoM_Mv-FU&nd7(8!olrMFv}V>ZiCYj_v+9_{EetIjE08|wW>IM2Sb=m1VR2~9t)q=v z5?VM`;73?n8d^A3ARSLy7FvtzXwR32){;7=ZYx4-X&qCym7%pv9Ui_aw3gS=TCEPP z6?L>$YeH+KdNBXm&|0M)%)c(QR;vf|uMe#?>cRXQLJJ2Lqz~rb7+N^6;60#Cp@qW< zJ_fWov~Y012Z6SP)?Rhm;MUN>!2vI0ZChyJ;D8r_wujb%I+lxegx1kIru92R>sTGr z`dy)Qs*VO|cW9liqXF6zT4&Pp<#AwHXq`xTiF`>}9l%6~P51GTEg(C$14(Lc|JxEWL$4F3U;b?$+K*vH0M+4jeIv!d$ z8sPUpCqfHH1Ede>IvH9x8sN7;r$P%y1Eh~AJsny&8X$d`(wWf0(E#b=y3U3cjt2O} zzFg*9Xmx{H-32@kq5|FqyrAGMz>6Wp@dn@}1+N2M27&R}%YauDyaad^WX9?Rz-tPg z2fPkqWA!ZH4KN$$Qp~)PXo45@Kb2#oR|Vey>=s#*u=+Y+cLhHL*dt;Pdlj&!f*(LQ?G@Pw zr*=9S4vCEH0{9JyjO-%l4T+5G7{yRXWMn6(V?iP#y9B=5nE{bquD9RAmp|E1_XoT) zFtTeXKfv-u7(Xrp436x_P<((?M)p&*g+n9zY1+bJk^Ky#%<#y5f#zsLWWPvrG%~VZ zqB$BB*{_1^+05w3{ve~wn8<#OQD$spzdrxd zDYD;fs7tkQa+LmqTLDcWN*{(dHA;Vh=0MYkngLCZ>`yh+H36DIlxpV8$o_OgU8 zMNW~w;G)Qh`3o+NoP@vNlE^7xdpnt>kyEaB(nl3K)A90id~I3e)EGyXN0{$OmAlf>a&5`qgdMACrxRVZpeH35Y z5;-5HKiV2OZ_poYi<~#=qYSRQBIg|j*WHoxF$UK?k@Il| z*S(SR2?p1Fk@GHn(*DT#B!(j3{vzj7n2E?{4o1$WF%pr@9EzOJ&@dg2oX^rQ9f_RJ z(J&p2oX?|4nav!FoG;Kh9gm#%X_!t#&X?g@;r=4$D|Ak$BIm1gPNyU1YjjR$BIjEO z%CLKp^KHar910aV-$C~gb}w?ii$W~yUgUfap*fqm7&+fZWQNI$oF5=C!{kNI4-uDP z@*?NQm?VbDi=1Deqydu`Iln|j112wWeuaVtOkU*t8ubjAyvX@2N*6GBk@GuLF0z^1 zk@KG@pu*%u&VQkP3X>N(zenVS$%~vnAn?NEMb2LlSz+=b=Wh(G4Ftl+e*;~kgH3r#BNz|aLChQ zpjHJ324)^m>w?o$9e&iN;K0hHnN-_?11mEfs9nKsV`9Pf`bE_dIR+-IIuk3fch33Se`CG{R+uP?YYX2}~07-UJa8Y* z+;V%teTKQ^j)MCvbIY9t_c`R2+03qj`vOyv-39kWrX+g`?n_Kb_7>cinUd@)xUVoJ z*1keql$ANAVrNisD3hs|^SOd^)qAJiGq6*O6g8So!x^!gy9#H~xpD6X&4+`#2 z)LEPli6X2$B1%Wr8;b5fHq>K45!DyS&g6}=iV1f;q}ubu{~ZP9y-2C7}rdz=QUebIY@2C75R zdlCi;CA*^c6!Ha>?26vg=mH|uEqc$uK{=T&Meo^q?;5!8UB^r6fw~sG570SvD|)Jq z*1hPdI$DpSr|M`ui{4u(iX!PPdT+C=)Vt_?gk_~ZMepNG%lj6+PcSX-SM=UxTHe3t zy+=DSpy+*)c4A=B`xNcOprZF_rsac+-e>TD064j#_gOq207-Ar`yAcGu%h>Qx{2XM z?+Z-bM-;s;GIbwW^uEN@eN@qVpJrlo(fcyZ#F(P@6`F~$MenOj-NzNZuQ7EWU-Z7t z)O|wH`v&*P#G?02?vqJH?|*ZjOfGu=hx=qo(fbzn$<(6vZSIq4MejS@C)11Gcezhy z6us|ppUfMZQtf3$53w?}jmwK3 zjye2qpcO?AQ8P7*D~lfD;_rY~6+Oho-vF&HdWeC)23k|}5CeY+w6^FW2B!1=>xv#? zU^*4OzUUzadN)Cpop@tI(L>Pt3DCx(hoF~c*_(ib`?Ej{GS2ZUG$Lgry2F0 zqKAw>&8YVlJ!Jf8`EOs*L&l%x*87VdGX9SO9VmLp_|u}_!J@Z79d&o8=q;>cv*K{k zTU5tp#gU?idO(_uA1!*w_)~>BR`ihZrwVht=po~O4(LSDL&l%#%E_XKj6cs5w+uIO!08T$F6w^3#27mD5{m7!lOdYe^-eyQkf zQ5pK>qPJCL=vRu~HkF}YEqdEkhJLN+?X2Ul&-J2*D!^_0v>Qba8Gjn)ZWg_(xJYdP zZz%dq*1qtf;R!1Dwqb~X0dk{AGikCT){K|w}`!aSWWZymI|f;xK->u#OgV~)(WOc zdm9DM0Je?2NBF=gz;+6zseJp`Yd|jgQ@{=i{v%*V1%CqADfXJ+13v=ntl$p;yTo2o ztbQM`tAgKyRCkMgNVT8df{L17>_=>3^oacen;1P~zle(u`HTISO^n{LpRnNHC-zHh zV)TvuGMgCvV!y&BM*rBavWYPu_G@fn42&_95#sL|6#I`+a|g%%{{iaqq}YFzx;#1dKS*7k68o=Fm#4=5hp5ZbV*hpO z^7PpMFm-uG?7u->o*DaZQkQ4N{zoXsvt$4JO8#R12eb)uWB-S=3G-tAADL6lkNuz0 z9W03bf1*2B82dkCPPHiZ|And4;@JOJ7NM8K{x6tQEsgzOGN)P=`@dpNwLJEJizz82 ztFiw(R65a_i2dI)m0A`1e_$%LI`;p_RBBD^|2JC6NKs?|&%E60V*hWfXReQZBreUs zj195h5{ygT^+p9#cfBe0(_5QTcfDD`)Lm~;Fm=~kW4|>%kh<$_v7bKD-v`{TVCt@S z#C}_>rj~kV?6(6e&ctF7{;KA5W zPlrm4_8|pRqkULG0X(8$>bZ}`en))v5#TWeQ_p=o_S2I#?gO4s@E+hv1=Et{l1`JDg+l}zZ+IB0$x%uE#zHR zFfHU=iT&>QK&lB>6-+hZTI~10YN`p>V?RBS>jdBp1&;&XjQ#Y8uA_jr6g+}`emf4Z z&jXu&=}sI(4BB_&AYr@dUL2GVtC8u(K^c_*C-Wc@wPs21G_6|mBzT5DxYn24g z)2g*jf>+TEgylq8rZxkT;Cr-M1C!wUv|59b;0Lr?gOlKgv|2-w;77Dt zLzCdgv|7WG;3u?N!;|1&@#Lj!W<(PF0tEpmT@w5f^#CYc68wtSXmk?%n%8Jd68r~? zG-H$CHx!g{N$^`RI||B#B=}DX%ETo26Ldt+OiF^k)CVv%YY{&uCjp8UX<|Pm z39$Fm#C~cLz^0{%{j?;2O-mE|=}FKkHEc#^MiQW;5y0`JC5M?w0ISv!XjT%ysa%z4Y)B0(&AnkkT)rq?!(OqPry9_ zxJALkfLj$j1h_5XF}w!=w=1|GaEF5X0Cy%qS{c{_xJ$v^fV-0*tqkl0+@s(Qz`Y6g z-WI@p3T_76uiz%Y0}5^gJecrA-t~Zo6kG>*Si!Y`M-mXu#;3)+c0iI5R)%ffJz%vTY2Ry6bJiv2FkRF0K3-G*xGXXCsI0Nuv z5~MTjQvfe1I2rJA5^TciM8GQwP5`{B;CQh7T7o`JU1(Evt|wuES;~zhEK=}pCSlAh zHNJUtjEn7kjEr^4EL_05SWCI zOW}7oH!z_Teiw5C+04XJ z_&q%BE}NND3cpXuom>ik0LgVSQ%d0v>%-I-gsBfmOTkl1;g4zJrj^2<(8NtIh5yJ} z&x}&|Gjd{PDf~G(F{>2*f+e2WrSRAEZgWcEf6%hcEroyLaKOA$_*bODDB6|6=J+8m z04`AQdBBAwGVoczMG8IxxVS`0J_Wc$!6yNimcrC&)dMb5um-ri6sAtA0=S|SrcSE_ zxU$6GEA?ut6pR2@m-vgOmC!W`rnYTuDNOB39&nw4saIQH3RAO@TCoiZrdDiYDNM~q z>c2LX!t|iL)PHSOF!f(sN@03Kd}_M3Dwq~Jx0S-aSWQjWb_E{*?kI)n5ybbfjdzwJ zY-2RN-or)MRf-Cv$L>;8Bt7<&qL}p9TZ$6WV_zvMkskX?QJM5OP>L#`hm$#2imLTd z`fuZ*+-W`kP${Zs06tub9%BGLQi>jDt>b7ZdWt2EW2NY6ipTL%^bE!0L@9cnnsKre zy+kscDn+j_5}z(buaXRBO3`Z!z-LR*>(qsFrRWVh`tzmeE!@9_rba3H2w8El6upCc zAkfq(MIUERx`myZ5QDf%R0F`62s=+kuc*Gkc6IZblC6n&mOksGDxi-^H!YLue) z*$TN;ihjs`$L&(|BlbJ)l%gLaxaEgj{c3sr6%R*-&tI0T8{pM#ieHD=r?pc&CAhm>3CX{qd(B!v@A#e zm)oyZIr=lVU+Z%87jC~c<>;^6er?Oq-}tP_cI5~pPCFm%%MofqbAdXPBiM^+Kpo2w zti&XsPUQ$zVggX-as(?e4ya2xLM3PvxYM=FW7j_c*iFHY19mU-y1xV1L&1*%_AHYK zX}7nRf^Px#R`5;0K4qTV{$aqr3ce25Pr(lX_Am2P_YVRNQ1Dg2feL;Aa8Q{izP}7O zSizS7hbZ_W;LtKpgHQMTFa@6j9Ijxx{YR8}QvB0^BNa@y|0o61?LWHAQ{*299HZc4 zfMd%%Rz6jNaSB!e$19kM!UP4&fD_9+eLex4q+puiO;#|?@TQcbq3N~(oT^|5I8DJ+ zHKvz&YJHmF%}~$wxnVOciE+IU0!{{11Q& z6wE>t7M2STg@TP{8%Frbg(BVg;&LITJ6}>RBy{IX%Y_o%`Lc4M%EWznxlm)`zM@>H zXAoLhEq5Ys7q(@)|Cs-lJe`z zh38254due~H2E9Lg%@b@H*N^@S$*HPYd-E#-phIczN#RL@~sxuALu z+sg&jbJ$TXsGh^lazXVRc9jdN=din6P(6n|<$~%t>@62m&tYG=pn4Ab%Y~0ngASAn zA7wx~ST4LnlX9qB_!!0LaJletnv^5u!e?+JRyK3AT=*@;h&KW zpov>9{EEH(8|A{UF+~HtD;NF^bLD8_mJ7dO&+2x$@LLMjopRxKxNQM?S1$a4CE0uB z!k^QE92yzr^kQBCdO(yu;oxC8y|@>F9ucK!KtqL>?dO0^6#N-rQw9GCuvw+h6xa11 z0h=rM6VS6or3iW!RVl4yrC8vEaH~qO$O+-rm14}|TANBSVR5Z(rC4HdtzD&9WlgPp zrC4K4twW_)&zf4tO7St))H+p)kF%!Mxl&YvA6+U%HTcoBQdEN<-73XrnI?Cy6rW?7 z+@n%_o@sK=O7R7z$-OGYmzf>+t`ybaN1saZ!%TtuR*G*i^X*qDzN741rTB5|B%E_x zDZZ!XJq8k`x!s^j5mO#%X?`$K3!ovDBBngjd5@t)O@W3HrIR1SD@DwE{0(RX(O-c^ zR*L^K`7x?e#JopZ!XI5JV#*^e;g6{lG3Aj?U5zD5^TcsP>HO9BO7RN~b!o;pfhaBT zPb5kwu_jfDUu>vLC$T0IrA7ZKmExCDXNPQ;=odiKD#iEH2d*L8CHiMv%Ndmz*D|)j zAdDYZ;)JDvS(UiN|Df5GxJ>bxQ;91SpShK|O7WRjiE9*}`IY!FI^YGB_;EVmg_ZaT zc0CtW;wRDdbTW%8@l*Bje3WJ51$cQ5KWs@QewJouX(fJ+W@lL?ex7D$c_n^VtMtHj@B(eiL5{sF2C+02nj{O`0lM=SAv(Bd4c#J{1%IbMl>i*^r$s}lc?Ugu;b z{!e1JO8iF-d7P`nf5LDj`mvSxzcE`0;i|;{7fl~b zpH$*MbN=H}CH@OqJ`k=-{8y6WN+tdq=RmGjVw6LL-K)eHbNvX={Ys23 z*N1@~RN|hhrSq^7qm+`ibRJb=OoY4w)KHBv{V^7(Ni{}qYXnf!YK-32Fra4D7-gU# zK+UT$<~s%fwW!7@xeNemS&h-^>Ic-S8l%Z3xZfG?=t{QN|s__ZcfE!+oPpSsoh-!@1)Z6&EBdhVHI^J(Msv2KcjkVF$_=ak% zjj6^rRby>zHNK>+~^v3Egz#R(i1l$RNV|5$gE(Ny&?pAOM;2y9YAJ_=E zSHTT{`@npxrd7E83a$k_P>mO1H7&gztj0?KmjfPBa2eoX1=A|r5e3sK+|g>h6rWuL zcuc{CfX5YF0C)ns3m-^JZzmO;3wTPwIe@3D@p611Ey$fwa3Qx6RO8k7z(l}{3QhpLRE^hRbqwHT1xEv3Q7}!{u40Sh10w*hRpU*7LjbQUI2iCo zHQtQXfq*v^8~}I=dmpR)0B4*i^x^xY10(w7Ai{79YX~9s#zf#fJeO0Jc={ zK47a_d=#s909z|~8?a3+K8DqsfNd4L0obk`9V7=ocd{wIsds3U_nVk|IrG*IE+OGk^?O97|?6UN#CH1tAy=w{X)WK)^)RM<(AN$slCukr0)siRKW$9l_o}!N&P)nX> zmt|lrd4^qgLC12t|%hX!(KC3;`YRT7Vg{Ie%ue0wmqn3Pwo@iz*`6fJ( zlbKaZ{&#(HJpE5RftR%CJG+*AixuKIwdC7OzUJ1F?;!bdGV^N5ck7dr>8DTOWhg#9 zzm|NThG{`9`2h{n!dmh}8m2|HQ@k_?mQzW=kzWt0*hYY5d+>OHkWM*1;8ZPv!+8~Jr)vouPU@o0)RO@%3K$`T4F zYn6p^&Ix6qoO2xIh;q(>`@dIX*A`upg1x9cPDlPrfJ4 zj`A0$?2WUd{lzK!;w<7Hjc4qSvxt8p(1AFM_$LG%jI)S;vYK8SKR*H;jk6fnxde19&SG4r0_b?0oucGkT_@t~R3-PmIT>dc`O8#J#aWEfoWXIY z<1AvLQ=l_(7V*z9(AhYtQcq4D`X%rd9m1l+Q6?o)&drL%fM!=mKOWKW~{bH zHe+@Cu0IW|>ya&5JuRof31EGXY|$EcWQ*3&Z-2IEjXWL(exl`kVB^-g;ZuF#Pj2^T?k5Q;+QFo9pZz9KfEwg-7=EEp>J;wCw3yd1O!DT4(n`y9wCFBRl=J z9@*))^SB;ZqO<#PY#!L&Bm4gj9@+nQ^tc+>NoNn>SoZ&&J+1(D@wgn=)#EZ?H=X4X zrA5HcJaQ<|U1xb3ksES7JaQ<|(<6rhy*$nV_SRXROPUGn<8cPCuSX6L`swU(9KcaQ ze~%m$4DdJwIM5>p2!nL?1dg2u9PDudaEM0^5Qci>0AZNUp2V?Zfx|s=fH1-%2M8l| zmItCZKp5q51aP!R4iLuZEDuBt1&;MN1o*kf!SH3{bO2u#@RtKzm>I8wijqc8&_N|h zqbKShD^oa=bPz}}Z?XcJaeu9A8 zwO8OhX6V3*%b2MHCoW@_4szl$X6vA`xQsbEr~;Q!Av0G8SLlF;xdU#?{t(Zfr-Q1} zGnlV~tHhlw(81N>P8RCmI?1dT>7bgplf^o?UfjtN9oztSQX#Wc2RD`8w2SZ8H3zC? zI=H!1#dq(ThBsNRgWDy^UZI1##AmG3!QJ9BR_Wj#@foXiaIg4`H9Gi-WZP?X@KedQ z^E$Xsvh8&`xL-O8>vixmxlVP14jzzJ)J7dVDD%ggbnuW|th8AN4@>^NMF%w{|K6&D zMLeS$8_*}DFGhW!Rt~2JfVX(qy%_U2XErWCAhLf2X7(sKv7T!Z^OAD zvpV<_ZZ3g_t`7bzTkyON-p7n4njkv(K<+G1oCF`C6NF?s!IkaOs;Hd=aD@}0tCIw9 zh2ubVlK{#77*M?=fGgzoMg1gz!|DrakOWBB`9h0^Nl@a`??y?`!B1g)k_1TDIq7bk z1Q<{)0X0bixU-g^rbz(T#nTqek^mDFJY(@`5+MEl80S*+ME3XPz!n}a1GeY~zs&_HC1ZuTd%wZ0GS}U`ZnTzAUi4M-GZRc>Er)V)JqgwT*?G+H$j)P?M|K{wl3*-#GT^Z$34OD6 zZ4zE7E&O~ER+X;px+L_?+Vx3zoo|#RVKv_zkzzjSsFCgB5OWDh0b&&9|dPQnKc$klDLvyR6uzZ- zWTPpC|1Ivd8HI0)d;OHcKZtv6PT@O}t+k-=U8!KVr0~y@nzf?veJNbGrtky#l-p4F z5qv6Yi4?+Qb4|1zg~(&Nfl4Su_QI9W_7oyhX%Ff^Aq;h6P)7yL;q1LJyK%&&IK*#|*F+g%j{%9Dw)s zcm~+VBiqTo9@$RzqmW}1wv+um9tRHa$R=|jg&e=IogCzm?c`vOhk!#UoQeb3A`bPq z7dXu09^h~adC-&XyZQS&pmPgK8`{j zD`S&6-XojL2_88BpGe_s9Ka@XlE+oR$rQ5LW|KL^BS+m+DP&vCCi4rAY%-^LTnwB} zA)9SBnKL|cEpDdA`LJrUs0dcA=wjrIxW1Q)yj7b+Xvp#XG3HW{w`%jKh^^YinfX){ z=%VZJoNC4D8XU5Kii%{nFQlSKcKaeK(lQvan2NkjTS7%fOxaQ@av(QgKTd3$(_7TXVg*dm~Cd7S-?Nn5QZ{dPGTBrv8 zd^;(^pD*IC!@`|iD7swE&RrB$l(Ta;MU~|2+(S`T`b&E$3S@+4A4Q=wn)Xvvg!8pR z<^V;Jj(El?;*qAu@QMd1N+cRSL=j0ee3+tCqTwSH8Ht9EQe?$GAEU^LeLhZ6PNLxx z6jhdJ_#{PFihVvsQB|?erzyHhqTw?XT`ke@S&FU^`+Sa~YsEgFr|3Gd&tFkgP3&`V z8r>juv07<#qvk6VYNt_ksf*P~qno5IRyU1qmbzHIG`dx0>*}Xb4Sf~|H%Oz~rL)*D zjqZ@nVxu(jBXysoksqmRoJM}6u1Ol*D+RKqY2-)hnx)bG(op;~jedrPB5HwY^nhGO z*&>Y|mhNH8G^#0Pxm6lHB4)XD8a*mzxlI~9Ax5}u8a*jSxLq1OE8DUpjb0R!+dhq6 zk&m!L8vS18-a4ky8}d1IN~5>Ldv;Evw`JD2OB(%2K8vnt^qzbK-O}g-{N>RYP9ucQ z9N>0OqdI&G7MQ&>YKYJE$H1N*uLkx?}cH0Q;u09V!F+dCUR(rxB0; zr@#Ro2{_PW0vzN~0|%!OPx(c_As&l>Lp_GTVQIt@fLY*hkClKUJXQpbOe3C=`w?)I zM~<#Xr%@YdIgTFV@nYauk3Rr@o<=-GR}MJNBS+WcJ#utCA&q#Rj=jc2j~rc3^2iQk zavGK30QMSFJQe__dQ><8zer=8fU&n<)6%%2cRcQF)NKj z?28JS*=by)WB#>bzA%B^{hTz`V!`I7aUxq~UK*2ZmHBC$ioafv##Z*s!Zdc01ushD zoP=kK)3~yPXG_w!iiBrN)3~aP&@D^jt0XF0p2pY8`M)BKuakYXGL5T=zh0Hb*Gmq( zI*o6T4YnqYZ^Y?eF0(d`tLwN2eoXGu=F|8VIrZ12v7fA4pT;%h)ZdWCx5=r$F^zAR zQ-4z$-yw_%&%eA5P=frQ3WYjo*?c^U*Z^AIVaWrSbc?IS)o)()dHUe(*#Z<8)#Z zeKL*FVy=Pha4L=YiWE)}PJ3j3cP5n&ms5nZ9yvug=aCCe=TrIMX9K_TI15;8V&1cN z18aHYoT0YIJArjf%zO5BU|o;50qc3>AE&;FdC%SgY~b-`U_*~L0ULR&4*bN#?Q!f4 zz{Vc02R89o4cOGgJUV(Uu$jkefS-C~Q_|eTopAsgjTRo+XteZL1=z~OU2p&!jn*C= zu#Jg7gO-g(TaRos+IeK7QDR~qhGV1A-Xj~04j$QPbo3YiI~m!VY&1H1WTVl=zeDF(D*B#jP>RVO^&-6S}R6F=(K!z7o>aCT3VR1^o&%OsV=f%G;> zR$486Oj3jn3ub3bk`}9`pnfJX+|$DBj7hAY-WgyL=kL}sP>82@2AL$scWWt|8Ego* z;iK~UKJ2g|hO*L_8EPmHzcb8GC=)Hi4Fa0oIA(;QNF2~eLopl>E)y}NHF2Yf%PgY} z@hBZ`+-Jy2GC0POh{wknx>5|yctcgi&`dCNl^B|dhOQO+GRe?& zVqYd3swVbjilOVpzDzZAlX$5w4Bae&#xz5>NT4y@(5(_^%rI0#49!eKw~3*dW$1P> zG_wueA%bAtt{V+D= zGD{8pOw&gEmOQ_|%+Q0T7Uo{&T^Z|F%Rg5@&n3_Yc36P|Gf&scBh8Oa7W7ZHH7vPw|9;iLd}gs(Bp<+^SHfp!Vs!&+}=59sGe`{oHB%@j@vt@ z4Z$MvxXc+tNbjx(oi&8o9FNPKGlb?8H+s$+LUZaW&{u|#@?8lkwuI&sSMF+ALQAR_ zsJ11vq-2D~5?WF+LSqRPJ{h60gyEb{IIg}W)cQJr8d$<`4p;LUT0+&YEvS*D_WmOH zPb?v=K8^B{aqU z0P0`~O);LO>u3p0F>d&EvV^AC>!8k-&=lhdx-OQG0KW?AYH66lZoy2TrQr(O1y;=x zDwV$mb+CQk)Xr6JBGsw~uKWH`B5}IfCK{v$GG{3KgTAJ?n)i6sl z{Jt7)X{O&-BP`AG`)Z`6*?wP*vNXrb1!uS$jV?W8#GJlQzWJ_q@rO-{Ww89SsO|^ufC2lHy zVF@igZYoZ*w8l3Tr(0UvK{!1k}PqLf|`|pYD%hZqmS-}7Bg>wEYi(3_dI`Th5`5&H` zx-@?YUeSMBF5gGlcDSHe4Z<59wq;9``y)bk=4)n-3jN#Odm!HX=y%_{KMegbt199O zk;^j2t*XRdoXNi@el*DX!h$w<;Dl9Kd@CUoEKMLA3ky2uug;vb3RBaKp!jFf8jo)% zEO;8b>y%ZYRv7y|j5j`Q(W#$|TTh>{D&cS4?84{@Iw)l{o0OWaZHR26t4Tte;C z6*4wn+o`K@4dah8b)5RKwjW?GC~QGxw-*)^;dSadb&Xavi*esX+(*Z$>oEazNv6J2 zH}DsE^1e`ZnL=)TNv45QH*$B8_lZK$ACYg_Ohc!tYxO7>cTjtE>Q|2qo{xYpm;soS*rWwE*uhc|KRE=&bomTBtL-5T4Cx16$_A-f6-I^ghTPTix` z;~a(KUOZ0Srwj1OHFxTM>}$pUy{YW`%GSdV)C)2Xl83awOSFfqE-Yx5zdO^ysR#I5 zxp{N{t!%=2D`Y2RFXSNP6yzMFK3<>+BwtuC7BAA$sb74v!@k~7|7`E@W4z&b4`D|> zmM@PN;eE+FinrlCc-dA?J@n1~`FgATKXyfne2N#5eZ(7#_sF+)A@3L7bQ`b*T02$q zJ6m8+KFYLl>d|jL?5{sxeCYfcm&eD`)~R3q-KW_e543aY@xS}rKFC+flsNUIRy>xd zc&g973RzKDjIqK0%(Qpv89wizT8}2R?Erlq`VLM#TdLp8`YzBffxe?t&z0)8v%Wj@ zv!L(f)bpkKU99g7{Y268zsz1c~!O-`EzN=HeD%Brj{cz~J zLf_4)Uzh4nv3@l4ZBX9$%&C|7)P?F(=pet zrK*llT?17wr+!I&5rQ1y1|)lyXts0>tnoO-QP)dwoR3sqmIepjj*098e(`Z@Lc zQq>TsE`h4QQ?Hk*MnH8DR0EuPqf|8pstchS=+v8~s_{@|kO~ZP>TNCGOy2~n!A|`_ z%U9Ib!)l0A?`Zk1`j4<0>eRbhzO?>MtcE%DM=jr8Up0SeX1G&-_Wp-`&}#hs&fu64 zPQ8a?u(CKIMmqJrwr}zRf6;Pye3Vmv!MkDgKUj@+>I02)o4s(^%owLW)b{;iRg8zm zI`xspDbLmcd7x7tYn=GSxSZyq%s2r|gwLW048QHs@ir;uduD#4)}oI)xgA<-Nx zH#&u}JXy}da+6a?DkN5#hUI3bkXgubDuSUcP9c@34%+GzQi&Tt+nhowQ4O@+DWnqD z;?KInDWnoUy5bOv6Q-R`Az7#l`qC*R3l6l)DI^O9wA(2p3k2HZ6p{s=6Wr?*k_8Uw z_c?`RfkXQJP9a&~Il%)?VZyH>=%7VYLb_PThmVNUhNiX&nE0_#ROg=-4rgRP9^Cpk3`OAd_rly96mjLaz>(dToyt4G`J0%V>wGTn0cwf-hd`zHG2fUQBP{DV+xLjE3p`acS;z7RR(cn8QTVLQG#`Qa0f_7tcPPg0z48j3hPN&PX